assembly - NASM x86 16 位寻址模式

标签 assembly x86 nasm x86-16 addressing-mode

这个问题在这里已经有了答案:





Differences between general purpose registers in 8086: [bx] works, [cx] doesn't?

(3 个回答)


7 个月前关闭。




我无法指向一个地址并在我的情况下写入一个字节大小的变量。这给了我错误“错误:无效的有效地址”:

mov byte[AX], byte 0x0

经过一些跟踪和错误后,我测试了相同的但使用 EAX。这编译得很好:
mov byte[EAX], byte 0x0

我在这里缺少什么?

最佳答案

[AX]是无效的内存操作数规范。

The valid 16-bit ones are :

[constant]  
[BX]  
[SI]  
[DI]  
[BX+constant]  
[BP+constant]  
[SI+constant]  
[DI+constant]  
[BX+SI]  
[BX+DI]  
[BP+SI]  
[BP+DI]  
[BX+SI+constant]  
[BX+DI+constant]  
[BP+SI+constant]  
[BP+DI+constant]  

[BP] 在形式上是无效的,但是很多汇编者会悄悄地将其转换为 [BP+0]。

有关内存操作数编码以及 ModR/M 和 SIB 字节,请参阅 CPU 手册。

关于assembly - NASM x86 16 位寻址模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12474010/

相关文章:

c - 将各种参数从 C 传递到汇编器

c - Y86 1 步停止异常 HLT

使用 PAPI_read_counters 计算 L1 缓存未命中会产生意外结果

assembly - 如何获取没有 NUL 字节的 objdump?

assembly - 在VirtualBox上运行操作系统

c++ - !编译器只留下一个 stub ! ,C++, 在.o文件中找到这些 "stubs"

assembly - 如何阅读英特尔操作码符号

c - 复位 vector 在现代处理器中的意义

x86 - 使用 simd 查找字符的第一个实例

assembly - 8086 无操作系统编程;分割