8086 ALP 字符串显示

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

我为 8086 微处理器编写了一段代码,用于从键盘获取字符串并显示它,如下所示:

Title Get the string from keyboard and display it

.model small
.stack 100h
.data
    str1 db 'Enter String ','$'
    str2 db 50 dup('$')
    str3 db 0dh, 0ah, '$'
.code

main proc
    mov ax,@data
    mov ds,ax
    
    mov ah,09h     ; for displaying Enter String
    lea dx,str1
    int 21h
    

    mov ah,0ah      ; for taking i/p from keyboard
    lea dx,str2
    int 21h
    
    
    mov ah,09h  ; for displaying in new line
    lea dx,str3
    int 21h
    
    mov ah,09h          ; for displaying what you have entered
    lea dx,str2+2
    int 21h
    
    int 21h
    mov ah,4ch
    int 21h
    main endp

end main

我不明白为什么我们必须将字符串的有效地址指定为

str2 + 2
才能打印回输入的字符串?如果仅使用
lea dx, str2
,则不会显示任何字符串。

assembly input x86-16 dos
1个回答
0
投票

STR2处的第一个字节应指要读取的最大字节数。第二个字节应包含已存在的字符数。因为您用 50 个“$”字符初始化了 STR2,并且“$”的 ASCII 值为 36,所以您实际上要求 DOS 允许输入已经存在的 36 个字符! 最好写一下:
str2 db 50, 0, 50 dup (0)


在“缓冲 STDIN 输入”结束时,第二个字节将包含已读取的字符数。我希望您现在明白为什么需要

lea dx, str2 + 2

。那就是字符所在的地址。
请注意,第一个字节为 50,输入限制为 49 个字符,因为 DOS 会附加一个终止回车字节(不包括在第二个字节的计数中)。

阅读

缓冲输入如何工作以充分了解 DOS 功能 0Ah。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.