汇编语言 | 复习月的一道练习题
【例题】
在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的绝对值之和,并将和数存入以SUM为首址的数据区中。
DATA SEGMENT
BUF1 DW-56,24,54,-1,89,-8……
BUF2 DW45,-23,124,345,-265,……
SUMDW10DUP(0)
DATA ENDS
分析:绝对值如何处理?
【分析】
负数在计算机中是以补码形式存储的。如何转成其绝对值呢?使用 neg指令 即可!
DATAS SEGMENT
BUF1 DW -56,24,54,-1,89,-8,4,56,22,-1
BUF2 DW 45,-23,124,345,-265,-34,-56,-44,33,22
SUM DW 10 DUP(0)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV ES,AX
LEA SI,BUF1
LEA DI,BUF2
LEA BX,SUM
MOV CX,10
LP:MOV AX,[SI]
CALL ABS
MOV DX,AX
MOV AX,[DI]
CALL ABS
ADD AX,DX
MOV [BX],AX
ADD SI,2
ADD DI,2
ADD BX,2
LOOP LP
MOV AH,4CH
INT 21H
ABS PROC NEAR
OR AX,AX
JNS OUT1
NEG AX
OUT1:RET
ABS ENDP
CODES ENDS
END START
【附:一文一图】