gpt4 book ai didi

string - 显示字符串的汇编代码

转载 作者:行者123 更新时间:2023-12-04 06:03:27 25 4
gpt4 key购买 nike

我有这段汇编代码来接受一个字符串并将字符串显示回来。

我的问题是我无法弄清楚名称是如何存储在 name1 中的。因为我们使用 buff 来存储来自用户的输入。

我知道

buff label byte
maxchar db 50
readchar db 0
name1 db 48 dup(0)

与此有关。但我无法理解工作。
.model small
.stack
.data
buff label byte
maxchar db 50
readchar db 0
name1 db 48 dup(0)
m1 db 10,13,"enter name: $"
m2 db 10,13,"your name is: $"
.code
mov ax, @data
mov ds, ax
lea dx, m1
mov ah, 09
int 21h
lea dx, buff
mov ah, 10
int 21h


mov ah,0
mov al, readchar
add ax, 2
mov si, al
mov buff[si],24H ;ascii code for $ to terminate string
lea dx, m2
mov ah, 9
int 21h
lea dx, name1
mov ah, 09
int 21h

mov ah, 4ch
int 21h
end

请帮忙!

谢谢你。

最佳答案

使用 DOS 函数 0x0a(或代码中的十进制 10)读取输入,该函数执行缓冲输入。 DS:DX 参数指向具有以下格式的缓冲区,该缓冲区位于标记为 buff 的位置。 (或等效地 maxchar )在您的程序中:

 offset    meaning
------ -------------
0 Number of bytes available for the input data (starting at offset 2)
1 A location for DOS to put the number of characters read into the buffer
2 A buffer of bytes that can hold the number of characters specified in
offset 0

所以在你的代码中,DS:DX 指向 buff这表示最多可以将 50 个字符放入缓冲区 name1 .看起来代码有潜在问题,因为缓冲区中只有 48 个字节,但数据结构表明有 50 个字节。因此,输入可能会覆盖 m1 的前两个字节。 .现在,汇编程序——尤其是旧程序——以执行各种技巧以节省空间而闻名。 m1在调用 DOS 函数 0x0a 之后没有使用,所以这可能是故意的(但如果是这样,我不确定为什么更多的 m1 没有可用)。我猜这是无意的,而且这个错误从来没有表现出任何明显的迹象。

关于string - 显示字符串的汇编代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8665141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com