NCRE 南开100题中有一题的答案我看不懂。。。
一、请编制程序,其功能是:计算10个有符号字节数据的绝对值之和(字型),并找出绝对值最大的数及其所在的偏移地址,最后将它们依次存入指定的内存中,结果以FFH结束。例如:
内存中有 10H,01H,27H,00H,FEH,80H,00H,03H,FFH,01H
结果为 BFH,00H,80H,05H,00H,FFH
部分程序已给出, 其中原始数据由过程LOAD从文件INPUT1.DAT中读入SOURCE开始的内存单元中。运算结果要求从RESULT开始存放,由过程SAVE保存到文件OUTPUT1.DAT中。
填空BEGIN和END之间已给出的一段源程序使其完整(空白已用横线标出,每行空白一般只需一条指令, 但采用功能相当的多条指令亦可),或删除BEGIN和END之间原有的代码并自行编程来完成要求的功能。
对程序必须进行汇编,并与IO.OBJ链接产生PROG1.EXE执行文件,最终运行程序产生结果(无结果或结果不正确者均不得分)。调试中若发现整个程序中存在错误之处, 请加以修改。
程序代码:
EXTRN LOAD:FAR,SAVE:FAR N EQU 10 DSEG SEGMENT SOURCE DB N DUP(?) RESULT DB 6 DUP(0) MAX DB ? NAME0 DB 'INPUT1.DAT',0 NAME1 DB 'OUTPUT1.DAT',0 DSEG ENDS SSEG SEGMENT STACK DB 256 DUP(?) SSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,SS:SSEG,DS:DSEG START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX ;置附加段寄存器 LEA DX,SOURCE ;数据区起始地址 LEA SI,NAME0 ;原始数据文件名 MOV CX,N ;字节数 CALL LOAD ;从'INPUT1.DAT'中读取数据 ;****BEGIN**** LEA SI,SOURCE LEA DI,RESULT MOV DX,SI MOV CX,N-1 MOV AL,[SI] ADD AL,0 JNS P1 ;SF==0 正数 NEG AL ;(1 P1: MOV MAX,AL ADD [DI],AL ADC [DI+1] ;(2 GOON: INC SI MOV AL,[SI] ADD AL,0 JNS P2 NEG AL P2: ADD [DI],AL ADC [DI+1] ;(3 CMP MAX,AL JAE NEXT ;(4 MOV MAX,AL MOV DX,SI NEXT: LOOP GOON ADD DI,2 MOV AL,MAX MOV [DI],AL INC DI MOV [DI],DX ADD DI,2 MOV BYTE PTR [DI],0FFH ;(5 ;****END**** LEA DX,RESULT ;结果数据区首址 LEA SI,NAME1 ;结果文件名 MOV CX,6 ;字节数 CALL SAVE ;保存结果到文件 RET START ENDP CSEG ENDS END START
第二空和第三空的ADC指令为何只有一个参数?答案肯定错了,那么正确答案是什么?求解答。
[ 本帖最后由 Rexfield 于 2011-3-18 22:48 编辑 ]