问题描述
我想用 Emu8086 汇编语言创建一个简单的程序,它会提示用户输入一个值。然后它会显示用户的价值。显示用户的值后,会显示一条消息。但是,我的问题是我无法显示用户的价值。这是我的代码:
org 100h
.model small
.data
a db "Enter your favorite number; $"
b db "Your favorite number is $"
c db "My favorite song is Blinding Lights by The Weeknd$"
.code
mov ax,@data
mov ds,ax
;displaying a
lea dx,a
mov ah,09h
int 21h
;User input
mov ah,01
int 21h
mov ah,01
int 21h
;Newline
mov dx,13
mov ah,2
int 21h
mov dx,10
mov ah,2
int 21h
;displaying b
lea dx,b
mov ah,09h
int 21h
;displaying User's input
mov dl,al
mov ah,2h
int 21h
mov dl,2h
int 21h
;Newline
mov dx,2
int 21h
;displaying c
lea dx,c
mov ah,09h
int 21h
ret
解决方法
Michael 已经告诉过您代码的问题。
这就是你解决问题的方法。
- 您从 DOS.GetCharacter 函数 01h 获得的输入字符需要存储在某处。在这个简单的程序中,您可以使用几个字节大小的寄存器,例如
a: 0 b: 1
和BL
。 - 要输出换行符(回车符 13 和换行符 10),您可以在寄存器
BH
中设置这些值。无需在此处使用更长的DL
寄存器。 - 既然你不应该重复自己,你应该把换行代码放在一个子例程中,你可以在需要时
DX
。 - 如果您编写
call
,那些lea dx,SomeLabel
指令将获得更短的编码(从 4 个字节到 3 个字节)。
mov dx,offset SomeLabel