【任务】在BUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的绝对值之和,并将和数存入以SUM为首址的数据区中。
data segment
buf1 dw -56, 24, 54, -1, 89, -8, 87, -32, 23, 45
buf2 dw 45, -23, 124, 345, -265, -214, 0, 48, -10, -12
sum dw 10 dup (0)
data ends
【参考解答】
assume ds:data, ss:stack, cs:code
data segment
buf1 dw -56, 24, 54, -1, 89, -8, 87, -32, 23, 45
buf2 dw 45, -23, 124, 345, -265, -214, 0, 48, -10, -12
sum dw 10 dup (0)
data ends
stack segment para stack
dw 20h dup (0)
stack ends
code segment
start:
mov ax, data
mov ds, ax
mov cx, 10
lea si, buf1
lea di, buf2
lea bx, sum
next: mov ax, [si] ;取第一个数
mov dx, [di] ;取第二个数
test ax, 8000h ;8000h,最高位为1,为负
je tdx ;结果为0,说明ax中是正数,不需要取反
neg ax
tdx: test dx, 8000h
je adds ;结果为0,说明dx中是正数,不需要取反
neg dx
adds: add ax, dx ;原数的两个绝对值相加
mov [bx], ax ;bx为存放结果的单元地址
add si, 2
add di, 2
add bx, 2
loop next
mov ah, 4ch
int 21h
code ends
end start