汇编语言绝对地址和段寄存器

时间:2011-12-13 09:19:59

标签: assembly stack segment

审核问题以十六进制列出这些寄存器:

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
  1. 要执行的下一条指令的绝对地址是40f0f。

    40f0f  
    -01cf
    _____
    40d40 / 10 = 40d4 = cs
    
  2. 数据段的大小(以字节为单位)是否始终等于堆栈段减去数据段* 10? 48ee - 4100 = 7ee0。同样,以字节为单位的代码段是否总是等于数据段减去代码段* 10? 48ee - 40d4 = 81a0。

  3. 对于mov cx,[bx + si],源操作数的绝对地址为42334。

    bx = 1234
    si = 0100
    _________
         1334
    
    ds = 4100 * 10 = 41000 + 1334 = 42334
    
  4. 对于mov cx,[di - 4],源操作数的绝对地址为41ffc。

    di = 1000
         -  4
    _________
         0FFC
    
    ds = 4100 * 10 = 41000 + 0ffc = 41ffc
    
  5. 对于mov cx,[bp + si - 3],源操作数的绝对地址为48fe0。

    bp = 0003
    si = 0100
          - 3
    _________
         0100
    
    ss = 48ee * 10 = 48ee0 + 0100 = 48fe0
    
  6. 我是否正在以正确的方式解决这些问题?我如何知道何时使用堆栈段进行这些计算以及何时使用数据段?

1 个答案:

答案 0 :(得分:1)

对于涉及bpsp的地址计算或诸如pushpop的堆栈操作,段寄存器隐含ss,其他地址{{1 }}。例外:如果使用字符串指令,则目标段寄存器隐式ds