相关疑难解决方法(0)

当使用 MOV 助记符将字符串加载/复制到 MASM 中的内存寄存器时,字符是否以相反的顺序存储?

我想知道使用 MOV 指令将字符串复制到寄存器中是否会导致字符串以相反的顺序存储。我了解到,当 MASM 将字符串存储到定义为单词或更高(dw 和更大尺寸)的变量中时,字符串以相反的顺序存储。当我将字符串复制到寄存器时会发生同样的事情吗?

基于这个问题(关于 SCAS 指令以及关于在 MASM 32 中为变量分配字符串和字符)我假设如下:

  1. 当 MASM 将字符串加载到变量中时,它以相反的顺序加载它,即字符串中的最后一个字符存储在字符串变量的最低内存地址(开头)中。这意味着分配一个变量 str 像这样:str dd "abc"导致 MASM 将字符串存储为“cba”,这意味着“c”位于最低的内存地址中。
  2. 将变量定义为str db "abc"MASM 时,将其str视为字符数组。尝试将数组索引与 的内存地址匹配str,MASM 将在 的最低内存地址处存储“a” str
  3. 默认情况下,SCAS 和 MOVS 指令从目标字符串(即存储在 EDI 寄存器中的字符串)的开始(最低)地址开始执行。在执行之前,它们不会“弹出”或将“后进先出”规则应用于它们操作的内存地址。
  4. MASM 始终以相同的方式将字符数组和字符串处理到内存寄存器。将字符数组 'a'、'b'、'c' 移动到 EAX 与将“abc”移动到 EAX 相同。

当我一个字节数组传递arLetters与字符“a”,“b”和“c”来的双字变量strLetters使用MOVSD,相信的字母被复制到strLetters在反向,即作为“CBA”存储。当我使用mov eax, "abc"时,字母是否也以相反的顺序存储?

下面的代码将在退出之前设置零标志。

.data?
strLetters dd ?,0

.data
arLetters db "abcd"

.code

start: …
Run Code Online (Sandbox Code Playgroud)

string x86 assembly masm masm32

2
推荐指数
1
解决办法
2820
查看次数

标签 统计

assembly ×1

masm ×1

masm32 ×1

string ×1

x86 ×1