2011-12-13 84 views
2

审查问题列出了这些寄存器十六进制:汇编语言绝对地址和段寄存器

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 
    

我要对解决这些正确的方法是什么?我如何知道何时使用堆栈段进行这些计算以及何时使用数据段?

+0

真的吗?有人仍在教这些陈旧的概念?除非你在嵌入式领域工作,否则分割在多年前就消失了,我想,或者你正在采取某种计算机历史课程:-) – paxdiablo

+0

汇编语言似乎足够接近计算机历史课程。 – raphnguyen

回答

1

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