[英]emu8086 Assembly Input output with three characters
大家好,我是该语言的新手,这是我修改的代码,应接受输入ABC并返回ABC,但它返回ABB。 我用AH,BH和Ax,Bx尝试过,情况变得更糟。 我该如何修改(目前,我们的老师希望我们坚持使用MOV,INT,LEA以及此处代码中的内容)。 感谢您的提示和答案
.MODEL SMALL
.STACK 100H
.CODE
MOV AH, 01H ; Character input with echo
INT 21H ; Character in AL
MOV BL, AL ; Save in BL
MOV AH, 01H ; Character input with echo
INT 21H ; Character in AL
MOV CL, AL ; Save in CL
MOV AH, 01H ; Character input with echo
INT 21H ; Character in AL
MOV DL, AL ; Save in DL
MOV AH, 02H ; Display character function
MOV DL, 0DH ; carriage return
INT 21H
MOV DL, 0AH ; line feed
INT 21H
MOV DL, BL ; Get character stored in BL and display
INT 21H
MOV DL, CL ; Get character stored in CL and display
INT 21H
MOV DL, DL ; Get character stored in DL and display
INT 21H
MOV AH, 4CH
INT 21H
END
在第14行,您将第三个字符保存在DL中,但是稍后,通过将ODH和OAH分配给DL会丢失此值。 解决方法很简单:将第三个字符而不是DL存储在另一个寄存器中,例如CH,在底部显示CH而不是DL(箭头<=============指向变化) :
.MODEL SMALL
.STACK 100H
.CODE
MOV AH, 01H ; Character input with echo
INT 21H ; Character in AL
MOV BL, AL ; Save in BL
MOV AH, 01H ; Character input with echo
INT 21H ; Character in AL
MOV CL, AL ; Save in CL
MOV AH, 01H ; Character input with echo
INT 21H ; Character in AL
; MOV DL, AL ; Save in DL
MOV CH, AL ; <============================
MOV AH, 02H ; Display character function
MOV DL, 0DH ; carriage return
INT 21H
MOV DL, 0AH ; line feed
INT 21H
MOV DL, BL ; Get character stored in BL and display
INT 21H
MOV DL, CL ; Get character stored in BL and display
INT 21H
; MOV DL, DL ; Get character stored in BL and display
MOV DL, CH ; <============================
INT 21H
MOV AH, 4CH
INT 21H
END
我选择CH是因为它是代码中未使用的寄存器。
有更有效的方法
主要程序
MOV BH,0
MOV BL,10D
INPUT:
MOV AH,1
INT 21H
CMP AL,13D
JNE NUMBER
JMP EXIT
NUMBER:
SUB AL,30H
MOV CL,AL
MOV AL,BH
MUL BL
ADD AL,CL
MOV BH,AL
JMP INPUT
EXIT:
AND AX,0
MOV AL,BH
MOV CL,10D
MOV BX,0000H
STORE:
DIV CL
MOV [0000H+BX],AH
ADD BX,2H
MOV AH,0
CMP AL,0
JNE STORE
MOV AH,2
MOV DL,0DH
INT 21H
MOV DL,0AH
INT 21H
PRINT:
SUB BX,2H
MOV DL,[0000H+BX]
ADD DL,30H
INT 21H
CMP BX,0
JNE PRINT
MAIN ENDP
结束主
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.