我在 .data 中声明了一个字节数组的字符
chars db 'spipopd'
我已将 rdi 设置为指向该数组的基本索引
mov rdi, chars
在某些时候,我想将数组中的一个字符放入一个 8 位寄存器中。下面的第一条语句产生一个有效值,但第二条语句void
在输入 gdb 命令时导致 r9b 包含print $r9b
。
mov al, [rdi] ; produces valid value in gdb
mov r9b, [rdi] ; r9b = void, according to gdb
寄存器 r8b 到 r15b 中的任何一个都具有相同的效果。据我了解,al
和r9b
都是 8 位的,那么为什么一个可以工作,而另一个不能呢?我的预感是,虽然它们都是 8 位大小,但它们有一些我无法理解的细微差别。
英特尔文档指出:
“REX 前缀用于生成 64 位操作数大小或引用寄存器 R8-R15。”
这与我的问题有关吗?