一个审查问题以十六进制列出这些寄存器:
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
我要以正确的方式解决这些问题吗?我如何知道何时使用堆栈段进行这些计算以及何时使用数据段?