如何在 Emu8086 汇编语言中显示用户的输入

问题描述

我想用 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