在汇编(emu8086)中进行内存寻址时,bp 和 si 有什么不同?
What differs the bp and si when memory addressing in assembly (emu8086)?
我正在使用 emu8086 微处理器仿真器
我想知道为什么当我尝试将一个值放入带有 SI 的内存地址时,它就放在 DS:SI 中,但是当我尝试将它放在 BP 中时,它会转到 DS:BP+20h
here's with SI
and here's with BP
我确定 SI 是 8 位,BP 是 16 位,但我不知道为什么会这样
您的程序有一个包含单个 17 字节字符串的数据部分。数据部分紧跟在堆栈部分之后。部分对齐段落(16 字节),因此 DATA 部分扩展为 32 字节。这对应于 2 个段落,这就是您在查看标记这些部分开始的 DS
和 SS
的值时看到的区别:
DS=0710h
SS=0712h
使用 [si]
的指令寻址 DS
段,使用 [bp]
的指令寻址 SS
段。
因为这些部分之间有 32 个字节的差异,您可以通过 mov al, [bp]
(BP=0)正常寻址 STACK 部分的第一个字节,但也可以通过 mov al, [0020h]
或 mov al, [ds:bp+32]
.
I'm sure it's something with SI being 8 bits and BP 16 bits
SI 是一个 16 位寄存器。
8位寄存器为AL、AH、BL、BH、CL、CH、DL、DH
16位寄存器为AX、BX、CX、DX、SI、DI、BP、SP、CS、DS、ES、SS。
我正在使用 emu8086 微处理器仿真器 我想知道为什么当我尝试将一个值放入带有 SI 的内存地址时,它就放在 DS:SI 中,但是当我尝试将它放在 BP 中时,它会转到 DS:BP+20h here's with SI
and here's with BP
我确定 SI 是 8 位,BP 是 16 位,但我不知道为什么会这样
您的程序有一个包含单个 17 字节字符串的数据部分。数据部分紧跟在堆栈部分之后。部分对齐段落(16 字节),因此 DATA 部分扩展为 32 字节。这对应于 2 个段落,这就是您在查看标记这些部分开始的 DS
和 SS
的值时看到的区别:
DS=0710h
SS=0712h
使用 [si]
的指令寻址 DS
段,使用 [bp]
的指令寻址 SS
段。
因为这些部分之间有 32 个字节的差异,您可以通过 mov al, [bp]
(BP=0)正常寻址 STACK 部分的第一个字节,但也可以通过 mov al, [0020h]
或 mov al, [ds:bp+32]
.
I'm sure it's something with SI being 8 bits and BP 16 bits
SI 是一个 16 位寄存器。
8位寄存器为AL、AH、BL、BH、CL、CH、DL、DH
16位寄存器为AX、BX、CX、DX、SI、DI、BP、SP、CS、DS、ES、SS。