assembly 从键盘获取输入字符串并在汇编中输出字符串(8086)

wdebmtf2  于 2023-03-18  发布在  其他
关注(0)|答案(2)|浏览(178)

我正在尝试创建一个程序,用他们的名字来问候用户。用户在提示后输入他们的名字,然后他们就和他们的名字沿着被问候了。我已经尝试过使用这个代码,但是它失败了,并在第21行抛出错误。
错误消息指出:(21)参数错误:莱亚Dx,名称(21)可能没有十六进制的零前缀;或没有“h”后缀;或地址错误;或未定义变量:姓名
这是密码

.MODEL SMALL                                 
.STACK 100                                   

.DATA                                        
    msg db "Hello! Please enter your name:$" 
    newline db 13,10,'$'                     
    greeting db "Wellcome!$"                   
    name db 80, 0, 78 DUP('$')
   
.CODE                                        

main PROC                                    
    ; Prompt
    MOV Ax,@DATA                             
    MOV Ds,Ax                               
    LEA Dx,msg                               
    MOV Ah,09h                               
    INT 21h                                 

    ; Input
    LEA Dx,name       (throws error)                       
    MOV AH,0AH                               
    INT 21h                                  

   
    ; Check if ENTER is pressed
    CMP Al,13                               
    JE Display                              
 
    ; Newline
    LEA Dx,newline
    MOV Ah,09h
    INT 21h
    
    ; Print Greeting                                                                           
    Display: MOV AH,09h                      
    LEA Dx,name+2
    ;MOV Dl,Al                                
    INT 21H                                  
    
    Exit:    
    MOV Ah,4Ch                              
    INT 21h                                  
main ENDP

END main
6jjcrrmo

6jjcrrmo1#

  • it fails* 不是一个有用的描述。当你想使用Int 21/AH=0Ah buffered input时,第一个缓冲区字节必须用它的大小初始化,例如name db 80, 0, 78 DUP('$')

此外,还应删除损坏; Print Greeting中DX的指令MOV Dl,Al

b4wnujal

b4wnujal2#

试试这个。name不被接受使用name1

jmp start
    
    name1 db 80, 0, 78 DUP('$')
    msg db "Hello! Please enter your name:$" 
    newline db 13,10,'$'                     
    greeting db "Wellcome! $"                   
    
   
    start:                                
    ; Prompt
    MOV Ax,@DATA                             
    MOV Ds,Ax                               
    LEA Dx,msg                               
    MOV Ah,09h                               
    INT 21h                                 

    ; Input
    lea dx, name1     
    MOV AH,0AH                               
    INT 21h                                  

    LEA Dx,newline
    MOV Ah,09h
    INT 21h
    
    lea dx, greeting
    mov ah, 09h
    int 21h
   
    MOV AH,09h                      
    LEA dx, name1+2                               
    INT 21H                     
             
    
    Exit:    
    MOV Ah,4Ch                              
    INT 21h

相关问题