汇编emu8086-如何打印两个加号?

问题描述

我正在尝试打印输入的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,30H
MOV DIGIT2,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:

enter image description here

解决方法

您的程序通过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,9] to digit character ['0','9']; adds 48
mov ah,02h ; DOS.PrintCharacter
int 21h

我的代码可以接受2位数字的输入,但是不能打印输入的2位数字,并且它可以打印输入数字:

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

截图也缺少“ R”和“:”之间的空格字符。