繁体   English   中英

"如何在 x8086 汇编语言中输入十进制时以十六进制显示两个负数的总和?"

[英]How to display the summation of two negative number in HEX while the input is decimal in x8086 assembly language?

; 您好,我是汇编语言 x8086 的新手,问题是如何添加两个负数(十进制)并以十六进制显示。 我被困在代码没有检测到负数的地方,我不知道如何在 HEX 中显示它。 有人能帮我吗? 这是我的代码

TITLE PROB12
PAGE 60,132
.MODEL SMALL
.STACK 64H
.DATA
NUM1 DB 8,?,8 DUP (?)
NUM2 DB 8,?,8 DUP (?)
PROMPT1 DB CR,LF,'Enter the first number','$'
PROMPT2 DB CR,LF,'Enter the second number','$'
PROMPT3 DB CR,LF,'The total sum is '
SUM DB 7 DUP (?),'$'
CR EQU 0DH
LF EQU 0AH
.CODE
MAIN: MOV AX,@DATA
MOV DS,AX
CALL CLEAR ;clear screen
MOV AH,09
MOV DX,OFFSET PROMPT1
INT 21H ;display first prompt
MOV AH,0AH
MOV DX,OFFSET NUM1
INT 21H ;get first number
MOV AH,09
MOV DX,OFFSET PROMPT2
INT 21H ;display second prompt
MOV AH,0AH
MOV DX,OFFSET NUM2
INT 21H ;get second number
MOV SI,OFFSET NUM1 + 8 ;point to LSD of number 1
MOV DI,OFFSET NUM2 + 8 ;point to LSD of number 2
MOV BX,OFFSET SUM + 6 ;point to LSD of sum
MOV CX,7 ;add 7 bytes
CLC ;clear carry
ADD_LP: MOV AL,[SI] ;get byte from number 1
ADC AL,[DI] ;add byte from number 2
PUSHF ;save any carry
AAA ;ASCII adjust
OR AL,30H ;make it ASCII
POPF ;restore flags
MOV [BX],AL ;store sum (in BCD)
DEC SI ;decrement pointers
DEC DI ;to point to next byte
DEC BX
LOOP ADD_LP ;loop through 7 bytes
MOV AH,09
MOV DX,OFFSET PROMPT3
INT 21H ;display result
MOV AH,4CH
INT 21H ;go back to DOS
;--------------------------------------------------
CLEAR PROC
MOV AH,06 ;clear screen function
MOV AL,00 ;page 0
MOV BH,07 ;normal attribute
MOV CX,0 ;entire screen
MOV DX,184FH
INT 10H
RET
CLEAR ENDP
END MAIN

我被困在代码没有检测到负数的地方,我不知道如何以十六进制显示它

<\/blockquote>

如果您编写的代码有更基本的问题,那么询问上述内容是没有意义的。

您的代码使用DOS.BufferedInput 函数 0Ah<\/a> ,并希望在输入结构的偏移量 8 处找到输入数字字符的最低有效位。 只有当键盘上的用户始终提供精确的 7 位数字<\/strong>时,这种方法才有效。 这不是很用户友好。

后来添加两个这样的数字的循环并没有像它应该的那样传播进位! 目前,您正在保留adc<\/code>操作的进位,但这毫无意义,因为它总是很清楚。 您需要在整个循环中传播从aaa<\/code>指令获得的进位<\/strong>。

如果要检测负数,则必须检查第一个输入的字符cmp byte ptr [NUM1 + 2], '-'<\/code>和cmp byte ptr [NUM2 + 2], '-'<\/code> 。 如果两者都确实存在,那么只要您遍历剩余的6<\/strong>位数字 (7-1) 并在SUM<\/em>处写一个“-”字符,当前的加法就可以了。

"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM