相关疑难解决方法(0)

x86程序集指针

希望这不是一个愚蠢的问题,但我试图围绕汇编指针.

究竟有什么区别:

mov eax, ebx
Run Code Online (Sandbox Code Playgroud)

mov [eax], ebx
Run Code Online (Sandbox Code Playgroud)

何时应该dword ptr [eax]使用?

另外,当我尝试这样做时,mov eax, [ebx]我得到一个编译错误,为什么会这样?

x86 assembly pointers

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

为什么在向内存地址处的值添加立即数时需要消除歧义

说明除非我们在将立即数添加到存储在内存地址的值时指定大小运算符(例如bytedword),否则NASM 将返回错误消息。

section .data           ; Section containing initialized data

    memory_address: db "PIPPACHIP"

section .text           ; Section containing code

global  _start          ; Linker needs this to find the entry point!

_start:

23            mov ebx, memory_address
24            add [ebx], 32
Run Code Online (Sandbox Code Playgroud)

………………………………………………………………………………………………………………………………………………………… ......

24:  error: operation size not specified. 
Run Code Online (Sandbox Code Playgroud)

公平的公平。

我很好奇为什么会这样。由于以下两段代码将产生相同的结果。

add byte [ebx], 32

或者

add dword [ebx], 32

那么它有什么区别呢?(除了对为什么在这种情况下使用 dword 没有多大意义之外)。仅仅是因为“NASM 这么说”吗?还是这里有一些我缺少的逻辑?

例如,如果汇编程序可以从寄存器名称解密操作数大小,add [ebx], eax那么为什么不对立即值执行相同的操作,即继续并预先计算立即值的大小。

什么要求意味着在将立即值添加到内存地址处的值时需要指定大小运算符?

NASM 版本 2.11.08 架构 x86

x86 assembly nasm

3
推荐指数
1
解决办法
290
查看次数

标签 统计

assembly ×2

x86 ×2

nasm ×1

pointers ×1