gpt4 book ai didi

assembly - 8086汇编,关于PTR操作符

转载 作者:行者123 更新时间:2023-12-02 21:32:33 25 4
gpt4 key购买 nike

这可能很简单而且愚蠢,但无论如何我都会问它,因为我似乎无法弄清楚。

一个简单的代码片段:

 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

我想这与地址有关,并且它被移动了一个字节或其他东西,但我不太确定,我真的需要理解。

提前致谢!

最佳答案

这个

mov ax,word ptr b

采用如下格式更容易理解:

mov ax, word ptr [b]

其作用是将地址b处的单词复制到ax中。所以这个

mov bx,word ptr b+1 

事实上

mov bx,word ptr [b+1]

其作用是将地址b+1处的单词复制到bx中。

现在dd指示分配一个双字并为其分配256。十六进制的 256 表示为 00000100h。双字将在内存中分配,如下所示 00010000h - 字节 00h01h00h00h 因为在 x86 上较低字节存储在较低地址(所谓的小端)。

当内存被读入寄存器时,字节顺序发生变化,使得较低字节占据寄存器中的较低位(“自然”,所谓的大端字节序)。因此,内存中的00h01h在寄存器中被转换为0100h,并且01h00h内存中的code>在寄存器中变成了0001h

因此,第一个 movb 获取前两个字节(00h01h)并生成 ax==0100h 第二个从 b 获取中间两个字节 (01h, 00h) 并使得 bx==0001h

关于assembly - 8086汇编,关于PTR操作符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14772656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com