2011-12-13 150 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