mov [string]的MASM语法,WORD PTR' HE'

时间:2016-09-28 19:11:44

标签: assembly nasm masm

我在汇编时遵循本教程: 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的EHllo字符串 我想要:来自asm的HEllo字符串

那么如何将字值移动到MASM中的字符串中呢?

PS。有没有人有更好的来源,MASM教程而不是NASM?

提前致谢,

科迪

1 个答案:

答案 0 :(得分:2)

HE作为一个词值得'0x4845'。当你把它放在内存中时,它被序列化为小端(因为你使用的是intel 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"交换"字符串字/长但不是十六进制值。

MASM更多"基本"这个交换没有完成,这解释了"标准"你正在经历的行为。

注意:这样做是一种黑客行为。调用字节到字节的复制例程更好,更通用。将这样的代码从MASM移植到NASM(或反过来)可能会带来灾难性的后果。