rar*_*dea 2 x86 assembly x86-16
这可能是简单而愚蠢的,但无论如何我会问它,因为我似乎无法弄明白.
一个简单的代码片段:
assume cs:code, ds:data
data segment
b dd 256
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,word ptr b -> the result of this operation will be ax:= 256 (100h)
mov bx,word ptr b+1 -> while this is going to be bx:= 1
Run Code Online (Sandbox Code Playgroud)
我想它与地址有关,它被一个字节或其他东西移动但我不完全确定,我真的需要理解.
提前致谢 !
sha*_*oth 10
这个
mov ax,word ptr b
Run Code Online (Sandbox Code Playgroud)
在格式化时更容易理解:
mov ax, word ptr [b]
Run Code Online (Sandbox Code Playgroud)
它具有将地址中的单词复制b到ax中的效果.所以这
mov bx,word ptr b+1
Run Code Online (Sandbox Code Playgroud)
实际上是
mov bx,word ptr [b+1]
Run Code Online (Sandbox Code Playgroud)
具有将地址中的单词复制b+1到bx的效果.
现在dd指示分配一个dword并为其分配256.十六进制256表示为00000100h.将DWORD将在这样的内存分配00010000h-字节00h,01h,00h,00h因为在x86低字节存储在较低的地址(所谓小端).
当存储器被读入寄存器时,字节顺序被改变,使得较低字节占据寄存器中的较低位("自然",即所谓的大端).因此00h,01h在内存变成0100h一个寄存器内01h,00h内存变成0001h内部寄存器.
所以第一个mov从b(00h,01h)获取前两个字节并使ax== 0100h,第二个从b(01h,00h)得到中间两个字节,并使bx== 0001h.
| 归档时间: |
|
| 查看次数: |
10242 次 |
| 最近记录: |