8086 ALP字符串显示

时间:2014-07-19 15:04:08

标签: x86-16

我已经为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

我不明白为什么我们必须给字符串的有效地址为str + 2来打印输入的字符串?如果只是lea dx,则使用str2,不显示任何字符串。

提前致谢。

1 个答案:

答案 0 :(得分:0)

STR2的第一个字节应包含要读取的最大字符数。第二个字节应包含已存在的字符数。因为您使用50'$'字符初始化STR2并且'$'的ASCII值为36,所以您有效地要求DOS允许输入已经存在的36个字符!
更好的代码str2 db 50,0,50 dup (0)
在“缓冲STDIN输入”结束时,第二个字节将包含读取的字符数。我希望你现在看到为什么你需要lea dx,str2+2。这是角色所在的地址 请注意,50输入的第一个字节限制为49个字符,因为DOS附加一个终止'$'字符(不包括在第二个字节中)。