X86 从给定的24位地址读取内存

X86 从给定的24位地址读取内存,x86,X86,我需要从地址读取内存: 0C0003H 并将其移动到AL寄存器。我是否会使用简单的: MOV al, [0C0003H] ??我想它不会那么简单…AL是8位寄存器,地址是24位。那我怎么做呢? 还有,为什么这个地址中有24位?它应该更像16位还是32位?为什么他们在开始时添加0只是为了将位数从20增加到24?您可以参考以下代码从程序集中的该地址访问一个字节: push 0000h pop es mov ebx, 0C0003h mov al, es:[ebx]; where es:ebx

我需要从地址读取内存:

0C0003H
并将其移动到AL寄存器。我是否会使用简单的:

MOV al, [0C0003H]
??我想它不会那么简单…AL是8位寄存器,地址是24位。那我怎么做呢?


还有,为什么这个地址中有24位?它应该更像16位还是32位?为什么他们在开始时添加0只是为了将位数从20增加到24?

您可以参考以下代码从程序集中的该地址访问一个字节:

push 0000h
pop es
mov ebx, 0C0003h
mov al, es:[ebx]; where es:ebx is used as the memory pointer

如果您有2^24个8位值,则需要24位地址来全部寻址。它是32位。前导0用于确保值被视为数字而不是变量名。如果没有前导0,它将被视为一个名为
c003h
的变量。如何将内存从该地址移到8位寄存器中?如果您只想加载一个字节,那么您所拥有的就足够了(尽管没有任何上下文,很难说它是“正确的”)。如果要加载16、32或64位的量,指令名和寄存器名必须不同,并且根据您使用的汇编程序,可能需要额外的语法…如果清除任何内容,则必须使用ASM16编写指令。。。