Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何更改第三个字母(汇编程序)_Assembly_X86 - Fatal编程技术网

Assembly 如何更改第三个字母(汇编程序)

Assembly 如何更改第三个字母(汇编程序),assembly,x86,Assembly,X86,我需要更改用户输入的最后一个字母的第三个字母,并用“*”符号更改最后一个字母。到目前为止,我成功地编写了这段代码,它允许您输入7个符号的单词: a100 mov dx, 200 mov ah, 0A int 21 mov bh, 00 mov bl, byte ptr[201] mov byte ptr[200], 0D mov byte ptr[201], 0A mov byte ptr[202 + bx], 24 mov dx, 200 mov ah, 09 int 21 mov ah, 4

我需要更改用户输入的最后一个字母的第三个字母,并用“*”符号更改最后一个字母。到目前为止,我成功地编写了这段代码,它允许您输入7个符号的单词:

a100
mov dx, 200
mov ah, 0A
int 21
mov bh, 00
mov bl, byte ptr[201]
mov byte ptr[200], 0D
mov byte ptr[201], 0A
mov byte ptr[202 + bx], 24
mov dx, 200
mov ah, 09
int 21
mov ah, 4c
int 21

a200
db 07 00 '*******'

n ivesk.com
r cx
200
w
q
问题是,我不确定这是如何工作的,我下一步应该做什么。你有什么建议吗?。也许你可以推荐一个好的网站,上面会解释所有这些命令,比如(0A09)? 谢谢。

(假设这段代码真的有效(因为我很久没有弄乱16位代码了,也没有32位操作系统——更不用说16位操作系统了——可以测试了)…)

显然,您已经知道,
[202+bx]
是输入的最后一个字符之后的字符,因为这就是您放置标记字符串结尾的
$
的地方。想知道
[201+bx]
指向什么…?:)

由于您的缓冲区位于硬编码地址,您已经知道第一个字符在哪里——因此,第三个字符也在哪里


因此,只需将最后一个字符
mov
放入寄存器,并将
mov
寄存器放入第三个字符的地址。然后将寄存器设置为“*”,并将寄存器设置为最后一个字符的地址。

作为参考,8086代码在引导加载程序之外几乎不再有用。64位操作系统不会以本机方式运行,即使是32位操作系统也会通过兼容层运行。如果你想摆弄汇编语言,我强烈建议你使用真正的调试器(如WinDbg或NTSD,它们随Windows开发工具包一起提供,是免费的)和/或真正的汇编程序(如Yasm或NASM,两者都是免费的),并至少学习编写x86(32位)代码。@cHao是的,我会,但由于大学要求我使用dosbox,我使用dosbox:)我有一个助手,我只有两周的时间来解决这个问题:)无论如何,谢谢你的提示:)