mov [string], WORD PTR 'HE' 的 MASM 语法
MASM syntax for mov [string], WORD PTR 'HE'
我遵循这个关于组装的教程:
https://www.tutorialspoint.com/assembly_programming/assembly_addressing_modes.htm
他们使用 NASM。我使用 MASM.
我有这个字符串:
string db 'hello string from asm here'
我想修改程序中的字符串。
我想替换前 2 个字母。
mov [name], dword 'Nuha'
所以我尝试:
mov [string], WORD 'HE'
抛出错误a2070。
它可以这样做:
mov [string], 'H'
输出:来自这里的 asm 的 Hello 字符串
然后我发现了这个:
mov word ptr [string], 'HE'
它编译,但是从后往前读
输出:来自 asm here 的 EHllo 字符串
我想要:来自 asm here
的 Hello 字符串
那么如何在 MASM 中将单词值移动到字符串中?
PS。有没有人有更好的 MASM 资源和教程而不是 NASM?
提前致谢,
科迪
HE
一个字值'0x4845'
。当你把它放在内存中时,它被序列化为小端(因为你使用的是英特尔 x86 或 x64 处理器)=> 交换字节:十六进制转储:0x45 0x48
如果您这样做,您将获得预期的行为:
mov [string] WORD PTR, 'EH'
(你本来可以自己想出来的,但现在你知道原因了)
我查看了 NASM
文档,他们对字符串做了一件特殊的事情,可能是因为它更方便:
dw 0x1234 ; 0x34 0x12
dw 'a' ; 0x61 0x00 (it's just a number)
dw 'ab' ; 0x61 0x62 (character constant)
dw 'abc' ; 0x61 0x62 0x63 0x00 (string)
请注意 dw
"swaps" 字符串 word/longs 但不是十六进制值。
MASM 更 "basic" 并且此交换未完成,这解释了您遇到的 "standard" 行为。
注意:这样做是一种技巧。调用字节到字节的复制例程更好,也更通用。将这样的代码从 MASM 移植到 NASM(或相反)可能会导致灾难性的后果。
我遵循这个关于组装的教程: https://www.tutorialspoint.com/assembly_programming/assembly_addressing_modes.htm 他们使用 NASM。我使用 MASM.
我有这个字符串:
string db 'hello string from asm here'
我想修改程序中的字符串。 我想替换前 2 个字母。
mov [name], dword 'Nuha'
所以我尝试:
mov [string], WORD 'HE'
抛出错误a2070。 它可以这样做:
mov [string], 'H'
输出:来自这里的 asm 的 Hello 字符串 然后我发现了这个:
mov word ptr [string], 'HE'
它编译,但是从后往前读 输出:来自 asm here 的 EHllo 字符串 我想要:来自 asm here
的 Hello 字符串那么如何在 MASM 中将单词值移动到字符串中?
PS。有没有人有更好的 MASM 资源和教程而不是 NASM?
提前致谢,
科迪
HE
一个字值'0x4845'
。当你把它放在内存中时,它被序列化为小端(因为你使用的是英特尔 x86 或 x64 处理器)=> 交换字节:十六进制转储:0x45 0x48
如果您这样做,您将获得预期的行为:
mov [string] WORD PTR, 'EH'
(你本来可以自己想出来的,但现在你知道原因了)
我查看了 NASM
文档,他们对字符串做了一件特殊的事情,可能是因为它更方便:
dw 0x1234 ; 0x34 0x12
dw 'a' ; 0x61 0x00 (it's just a number)
dw 'ab' ; 0x61 0x62 (character constant)
dw 'abc' ; 0x61 0x62 0x63 0x00 (string)
请注意 dw
"swaps" 字符串 word/longs 但不是十六进制值。
MASM 更 "basic" 并且此交换未完成,这解释了您遇到的 "standard" 行为。
注意:这样做是一种技巧。调用字节到字节的复制例程更好,也更通用。将这样的代码从 MASM 移植到 NASM(或相反)可能会导致灾难性的后果。