Ian*_*one 3 c x86 assembly mov
我不明白之间的区别MOV我不明白和MOV ptr。
例如,在这段C代码中:
unsigned char x, y;
x = 2;
Run Code Online (Sandbox Code Playgroud)
汇编中的第二行是:
`MOV x, 2`
Run Code Online (Sandbox Code Playgroud)
但这段代码的第二行C:
tabbyte[0] = 15
unsigned char tabbyte[4]
Run Code Online (Sandbox Code Playgroud)
在装配中是:
MOV byte ptr tabbyte[0], 15
Run Code Online (Sandbox Code Playgroud)
两种汇编指令之间有什么区别以及何时应使用每种指令?
指令 BYTE PTR、WORD PTR、DWORD PTR
有时我们需要协助汇编器将引用转换为内存中的数据。
例如,指令
Run Code Online (Sandbox Code Playgroud)mov [ESI], al ; Store a byte-size value in memory location pointed by ESI建议移动 8 位数量,因为 AL 是一个 8 位寄存器。
当指令没有引用操作数大小时,
Run Code Online (Sandbox Code Playgroud)mov [ESI], 5 ; Error: operand must have the size specified为了绕过这个实例,我们必须使用指针指令,例如
Run Code Online (Sandbox Code Playgroud)mov BYTE PTR [ESI], 5 ; Store 8-bit value mov WORD PTR [ESI], 5 ; Store 16-bit value mov DWORD PTR [ESI], 5 ; Store 32-bit value这些指令要求操作数大小相同。
一般来说,PTR 运算符强制表达式被视为指定类型的指针:
Run Code Online (Sandbox Code Playgroud).DATA num DWORD 0 .CODE mov ax, WORD PTR [num] ; Load a word-size value from a DWORD
http://www.c-jump.com/CIS77/ASM/Instructions/I77_0250_ptr_pointer.htm
| 归档时间: |
|
| 查看次数: |
2757 次 |
| 最近记录: |