gpt4 book ai didi

assembly - 如何在汇编中使用 ADC?

转载 作者:行者123 更新时间:2023-12-03 06:28:00 31 4
gpt4 key购买 nike

.MODEL SMALL
.STACK 1000
.DATA

MSGA DB 13,10,"Input first number: ","$"
MSGB DB 13,10,"Input second number:","$"
MSGC DB 13,10,"The sum is: ","$"

NUM1 db ?
NUM2 db ?
NUM3 db ?

.CODE

MAIN PROC NEAR

MOV AX, @DATA
MOV DS, AX

; get first number
LEA DX, MSGA
MOV AH, 09h
INT 21h

MOV AH, 01
INT 21H
SUB AL, '0'

MOV BL, AL

MOV AH, 01
INT 21H
SUB AL, '0'

MOV CL, AL

; get second number
LEA DX, MSGB
MOV AH, 09h
INT 21h

MOV AH, 01
INT 21H
SUB AL, '0'

MOV DL, AL

MOV AH, 01
INT 21H
SUB AL, '0'

MOV DH, AL

; add
ADD CL, DH
ADC BL, DL
MOV NUM1, CL
ADD NUM1, '0'
MOV NUM2, BL
ADD NUM2, '0'

; output sum
LEA DX, MSGC
MOV AH, 09h
INT 21h

MOV DL, NUM2
MOV AH, 02H
INT 21h

MOV DL, NUM1
MOV AH, 02H
INT 21h

MOV AH, 4Ch
INT 21h

MAIN ENDP
END MAIN

上面是我在汇编中添加 2 个两位数的代码。我想知道为什么ADC不起作用。如果添加时这些数字没有获得进位,则我的代码可以工作。但并非如此。我是否误解了ADC的真正作用?我应该如何处理我的代码?

最佳答案

您似乎正在使用十进制数学,但没有使用 AAAADC 执行您所期望的操作,但使用该代码,第一次加法永远不会产生实际进位(毕竟 9+9 不大于 255)。

所以解决方案当然是使用AAA,如下所示(未测试):

add al,dl
aaa ; takes no arguments and works on al
add ah,dh ; adc not necessary, aaa already incremented ah if there was a carry

AAA ( ASCII Adjust for Addition ) 测试 al 是否大于 9,如果是:

  • 调整al
  • 设置进位标志,并且
  • 增量

关于assembly - 如何在汇编中使用 ADC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11562895/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com