【问题标题】:Taking input string from keyboard and outputting a string in Assembly (8086)从键盘获取输入字符串并在程序集中输出字符串 (8086)
【发布时间】:2021-06-26 20:34:03
【问题描述】:

我正在尝试创建一个程序,用他们的名字向用户打招呼。用户在提示后输入他们的姓名,并与他们的姓名一起受到欢迎。我已经尝试过使用此代码,但它失败并在第 21 行抛出错误。

错误消息指出: (21) 错误参数:LEA Dx,name (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    





【问题讨论】:

    标签: string assembly input keyboard emu8086


    【解决方案1】:

    它失败了 不是一个有用的描述。当你想使用Int 21/AH=0Ah buffered input时,第一个缓冲区字节必须用它的大小来初始化,例如 name db 80, 0, 78 DUP('$')
    同时删除MOV Dl,Al 中的指令MOV Dl,Al 会损坏; Print Greeting 中的DX。

    【讨论】:

    • 我按照你的说法初始化了缓冲区字节,但我一直收到同样的错误。(21)错误的参数:LEA Dx,名称(21)可能没有十六进制的零前缀;或没有“h”后缀;或错误的地址;或未定义的变量:名称
    • 也许 LEA 在内存变量规范中需要方括号,就像大多数其他汇编程序一样。试试LEA DX,[name]MOV DX,name。还要检查name 是否不是您使用的工具中的保留字。
    猜你喜欢
    • 2014-01-16
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2022-06-29
    • 1970-01-01
    相关资源
    最近更新 更多