王爽汇编语言adc指令

assume cs:code
data segment

db 99h,88h,77h,66h,55h,44h,33h,22h

db 99h,88h,77h,66h,55h,44h,33h,22h

data ends
code segment

start:
mov ax,data
mov ds,ax
mov si,0
mov di,8
call add128

mov ax,4c00h
int 21h

add128: push ax
push cx
push si
push di

sub ax,ax

mov cx,4
s: mov ax,[si]
adc ax,[di]
mov dx,[di]
mov [si],ax
inc si
inc si
inc di
inc di
loop s

pop di
pop si
pop cx
pop ax

ret
code ends
end start

为了验证所以改少了一半,算出的答案却是:3311EFCCAA886644
windows的计算器算出的却是:3310EECCAA886644
为什么?是哪错了吗?

用计算器计算:3310EECCAA886644。

计算器计算,是把 99H,当做最高位、22H 当做最低位。

程序的计算,是把 99H,当做最低位、22H 当做最高位。追问

对计算器的进行修改:

2233445566778899+2233445566778899=446688AACCEF1132
现在22是最高位了,99是最低位了,那答案相差更远了是为什么?

追答

这程序的计算结果,和你用计算器计算的,相同。

你的程序,每一步,功能说明如下:

MOV SI, 0
MOV DI, 8
……
MOV AX, [SI] ; AX = 8899H
ADC AX, [DI] ; AX = 8899H + 8899H + 0 = (1)1132H
MOV [SI], AX ; [SI] = 1132H
================
MOV AX, [SI] ; AX = 6677H
ADC AX, [DI] ; AX = 6677H + 6677H + 1 = (0)CCEFH
MOV [SI], AX ; [SI] = CCEFH
================

在存储器中,可以看到,这两步的结果是:

32 11 EF CC....

……
……

其它的,就不详细说了,自己去实验。

关键是,对《高低字节存储规律》的理解问题。

温馨提示:答案为网友推荐,仅供参考
相似回答