繁体   English   中英

Assembly emu8086 - 如何打印两个相加的数字?

[英]Assembly emu8086 - How to print the two added numbers?

我正在尝试打印我输入的 2 位数字,但在打印时遇到问题。 这是我的进展:

DATA SEGMENT
MSG1 DB "ENTER NUMBER : $"
DIGIT1 DB ?
DIGIT2 DB ?
BCD DB ?
DATA ENDS

CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX

LEA DX,MSG1
MOV AH,9
INT 21H

MOV AH,1
INT 21H
SUB AL,30H
MOV DIGIT1,AL

MOV AH,1
INT 21H
SUB AL,30H
MOV DIGIT2,AL

MOV AH,DIGIT1
MOV AL,DIGIT2

MOV CL,4
ROL AH,CL

ADD AL,AH
MOV BCD,AL
MOV AH,1
INT 21H

CODE ENDS

END START

我的代码可以接受 2 位数字输入,但无法打印输入的 2 位添加数字,并且会打印 Enter Number:

在此处输入图片说明

您的程序成功地从 2 个输入创建了一个打包的 BCD
要将结果打印回屏幕,您首先要拆开您放在一起的内容,然后将数字转换为 DOS 可以输出的字符。

; Display the tens:
mov dl, BCD
mov cl, 4
shr dl, cl  ; Moves the "tens" from high nibble to low nibble, throwing out the "ones"
or  dl, '0' ; Converts from digit value [0,9] to digit character ['0'-'9']; adds 48
mov ah, 02h ; DOS.PrintCharacter
int 21h
; Display the ones:
mov dl, BCD
and dl, 15  ; Only keeps the "ones"
or  dl, '0' ; Converts from digit value [0,9] to digit character ['0','9']; adds 48
mov ah, 02h ; DOS.PrintCharacter
int 21h

我的代码可以接受 2 位数字输入,但无法打印输入的 2 位添加数字,并且会打印 Enter Number:

您发布的MOV AH,1 INT 21H代码无法产生此输出! 也许您在生成屏幕截图的代码中编写了mov ah,9

此外,屏幕截图在“R”和“:”之间缺少空格字符。

暂无
暂无

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

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