审核问题以十六进制列出这些寄存器:
cs = ???? sp = 0300 ax = a66a ip = 01cf
ds = 4100 bp = 0003 bx = 1234
ss = 48ee si = 0100 cx = 00ff
es = 4cee di = 1000 dx = 0000
要执行的下一条指令的绝对地址是40f0f。
40f0f
-01cf
_____
40d40 / 10 = 40d4 = cs
数据段的大小(以字节为单位)是否始终等于堆栈段减去数据段* 10? 48ee - 4100 = 7ee0。同样,以字节为单位的代码段是否总是等于数据段减去代码段* 10? 48ee - 40d4 = 81a0。
对于mov cx,[bx + si]
,源操作数的绝对地址为42334。
bx = 1234
si = 0100
_________
1334
ds = 4100 * 10 = 41000 + 1334 = 42334
对于mov cx,[di - 4]
,源操作数的绝对地址为41ffc。
di = 1000
- 4
_________
0FFC
ds = 4100 * 10 = 41000 + 0ffc = 41ffc
对于mov cx,[bp + si - 3]
,源操作数的绝对地址为48fe0。
bp = 0003
si = 0100
- 3
_________
0100
ss = 48ee * 10 = 48ee0 + 0100 = 48fe0
我是否正在以正确的方式解决这些问题?我如何知道何时使用堆栈段进行这些计算以及何时使用数据段?
答案 0 :(得分:1)
对于涉及bp
或sp
的地址计算或诸如push
或pop
的堆栈操作,段寄存器隐含ss
,其他地址{{1 }}。例外:如果使用字符串指令,则目标段寄存器隐式ds
。