为什么我们在下面的指令mov bx,0x78
中使用十六进制值0x 78。下面给出了一个非常小的代码:
cli
xor ax,ax
mov ss,ax
mov sp,0x7c00
push ss
pop es
mov bx,0x78 (why we are using
hex value 0x78 here)
lds si,ss:bx
push ds
push si
push ss
push bx
mov di,0x7c2b
mov cx,0xb
cld
更多代码....
很抱歉给您带来不便,我还有一个问题,如下所述:
我正在处理一个非常旧的msdos1.25源代码,我发现了一个笨拙的指令,其中“$”符号的使用如下所示。什么是mov sp,$0x7c00
中的$符号?
我想知道下面两个指令有什么区别:
1. mov sp,$0x7c00
2. mov sp,0x7c00
1条答案
按热度按时间umuewwlo1#
mov bx,0x78
指令在BX
寄存器中加载一个偏移量地址。因为相关的段寄存器(在SS
的情况下)为零,所以我们要寻址的数据在中断向量表中。它是Int 1E
磁盘初始化参数表。lds si,ss:bx
(最好写为lds si, [ss:bx]
)将SS:BX
中得偏移字加载到SI
寄存器,将SS:BX+2
中得段字加载到DS
寄存器.然后,进一步的代码将把11字节的表复制到引导加载程序内的缓冲区。
我想知道下面两个指令有什么区别:
我从来没有见过$字符这样使用。我的猜测是,可能根本没有区别。