请编制程序,其功能是:内存中连续存放着10个无符号16位二进制数,现采用近似计算法求此10年数的近似平方根,其方法为:令某个数X依次减去1、3、5、7、9…等奇数,一直减到差值刚刚小于等于零为止,计算出所作的减法次数Y,即为该数X的近似平方根。得到的结果存入内存。 例如:' O5 x9 B6 [0 t' @
内存中有 0100H,0200H…. c8 M2 u6 w% S
结果为 0010H,0016H…
_ @: i9 C6 a- e- Z K' V 部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。8 h& ^0 F& y0 y$ ^
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。, m$ C# I8 N* n0 V
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
* I: `' g# E+ v: c: I 试题程序:
8 q- g8 `7 c0 [; s! B EXTRN LOAD:FAR,SAVE:FAR
# l$ E! L. v& R6 z N EQU 10# h7 ]# i: \8 @) u7 Z
STAC SEGMENT STACK
* `$ G2 m9 H8 R1 C" e DB 128 DUP(?)
" Y, x9 m2 s) Z8 r0 S1 ~9 ~- O STAC ENDS
* _) r/ J) g1 t* w DATA SEGMENT
. S$ u- b2 y/ l( U8 e SOURCE DB N DUP(?) ;顺序存放10个字节数
* E ]% H* x. L: _% V RESULT DB N DUP(0) ;存放结果
) c* Q$ t% q1 u+ } C' } K; o NAME0 DB 'INPUT1.DAT',08 `' _; Q8 H9 q3 N3 G0 C% t
NAME1 DB 'OUTPUT1.DAT',0! t- Q. m9 ~1 |/ A% O. C- l+ I
DATA ENDS3 |! g( \- Y0 @
CODE SEGMENT
( y O+ E% ]5 `; |" s ASSUME CS:CODE,DS:DATA,SS:STAC2 c: \* T: R' i! U6 G
START PROC FAR1 u5 F4 a6 I. {. `- Q/ L, c' K( O. x
PUSH DS+ I7 a7 F, B) x! W
XOR AX,AX. j1 f: R) f$ ~' O6 P1 T7 Q" `7 ?
PUSH AX# o) C$ u+ b( d2 f0 }% B2 K
MOV AX,DATA
# g% y; r, W9 O0 w2 Z+ G MOV DS,AX
2 H) P: ~8 t3 Y4 j LEA DX,SOURCE ;数据区起始地址; K+ D; J. E( Y7 n
LEA SI,NAME0 ;原始数据文件名5 v Z3 V* l! T6 ]4 c
MOV CX,N*2 ;字节数
. U( f" ?- x! j8 g5 q- J CALL LOAD ;从'INPUT1.DAT'中读取数据7 X: u: l. Z: ?7 n8 c- Y# P
;****BEGIN****% o: j- Q5 r; n
LEA DI,RESULT' ]; F* D) Z8 H4 O" z8 C! m* @
LEA SI,SOURCE: C- Q5 F% N! j; t: X
MOV CX,N
3 t" A% p" y. F1 u0 g E AGN0: MOV AX,[SI]
. d' K: q- E1 O MOV BX,0+ N9 h3 C" c# D5 H
AGN1: __________________________
p% |9 v* m8 B. n SUB AX,BX
! F- @: z W' t0 V* t ________ STORE05 g) M5 _2 H/ |! i4 w$ W
__________________________
3 E9 D7 v3 |* X2 z) C+ i# {2 [ JMP AGN17 Y% n, V1 t* [3 r
STORE0: INC BX# _3 G2 u5 W2 n8 K+ L7 m
__________________________. w: @2 y" a. m% W/ l" f+ t
MOV [DI],BX' x5 n: d$ Y+ S4 l0 N K
INC DI
1 ]: t# e$ h* Q9 ^8 k __________________________( D" l: G- y. \, ^3 W; K; `/ S
INC SI
( d/ \- w ~+ a- W, S# `! c __________________________
* b4 m+ b% F k# L7 I' I LOOP AGN0
: H! U& L5 F1 N" Z( \! u ;****END****, C; C" z- R; d6 n6 o
LEA DX,RESULT ;结果数据区首址
! z0 v4 \! i# d" w" Z1 U- i LEA SI,NAME1 ;结果文件名
C7 U5 |+ c* J+ B4 B: q( R/ X$ B6 X MOV CX,N*2 ;字节数
8 H3 ^( C) m5 e6 j' y7 p CALL SAVE ;保存结果到文件& g3 G/ E! }& ]. E
RET2 O) S8 j) L3 z& }" J# V
START ENDP. @$ Q. G( m4 d! {
CODE ENDS+ y" {; c, U. `% D' m
END START |