在汇编(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 个段落,这就是您在查看标记这些部分开始的 DSSS 的值时看到的区别:

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。