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

问题描述 投票:0回答:1

我想用 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,al
mov ah,2h
int 21h
        
;Newline                     
mov dx,13
mov ah,2
int 21h  
mov dx,10
mov ah,2
int 21h      
      
;Displaying c
lea dx,c
mov ah,09h
int 21h



ret
assembly emu8086
1个回答
0
投票

Michael 已经告诉过你了你的代码的基本问题。
这是解决问题的方法:

  • 从 DOS.GetCharacter 函数 01h 获得的输入字符需要存储在某个地方。在这个简单的程序中,您可以使用几个字节大小的寄存器,例如
    BH
    BL
  • 要输出换行符(回车 13 和换行 10),请在寄存器
    DL
    中设置这些值。无需在这里使用较长的
    DX
    注册。
  • 并且由于您不应该重复自己,因此您应该将该 newline 代码放置在子例程中,以便在需要时可以
    call
  • 如果您编写
    lea dx, SomeLabel
    ,那些
    mov dx, offset SomeLabel
    指令会获得更短的编码(从 4 个字节到 3 个字节)。
  • 提及
    org 100h
    告诉我们您正在为 DOS 编写 .COM 可执行文件。这样的程序首先将所有四个段寄存器设置为彼此相同。您不需要那个
    mov ax,@data
    mov ds,ax
    组合。也无需提及
    .model
    ,但如果提及,则对于 .COM 文件格式来说,它会是
    .model tiny
ORG 100h           ; .COM <=> CS=DS=ES=SS

  ; Displaying a
  mov dx, offset a
  mov ah, 09h
  int 21h

  ; User input
  mov ah, 01h
  int 21h                    
  MOV BH, AL
  mov ah, 01h
  int 21h                       
  MOV BL, AL

  call Newline
            
  ; Displaying b 
  mov dx, offset b
  mov ah, 09h
  int 21h    
 
  ; Displaying User's input
  mov dl, BH
  mov ah, 02h
  int 21h
  mov dl, BL
  mov ah, 02h
  int 21h

  call Newline
      
  ; Displaying c
  mov dx, offset c
  mov ah, 09h
  int 21h

  ret

Newline:
  mov DL, 13
  mov ah, 02h
  int 21h  
  mov DL, 10
  mov ah, 02h
  int 21h
  ret

a db "Enter your favorite number; $"
b db "Your favorite number is $"     
c db "My favorite song is Blinding Lights by The Weekend$"
© www.soinside.com 2019 - 2024. All rights reserved.