實驗五 編寫、除錯具有多個段的程式
(1)將下面的程式編譯連線,用debug載入、跟蹤,然後回答問題:
assume cs:code,ds:data,ss:stack
data segment
dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h
data ends
stack segment
dw 0,0,0,0,0,0,0,0
stack ends
code segment
start:mov ax,stack
mov ss,ax
mov sp,16
mov ax,data
mov ds,ax
push ds:[0]
push ds:[2]
pop ds:[2]
pop ds:[0]
mov ax,4c00h
int 21h
code ends
end start
(1)cpu執行程式,程式返回前,data段中資料為多少?
(2)cpu執行程式,程式返回前,cs=_____、ss=_____、ds=_____。
(3)設程式載入後,code段的段位址為x,則data段的段位址為_____,stack段的段位址為_____。x-2、x-1
(4)對於如下定義的段:
name segment
....
name ends
如果段中的資料佔n個位元組,則程式載入後,該段實際占有的空間為_____.
分析:(1)段位址分配的先後順序是和定義的段的順序是一致的。若在上面程式中,先定義stack棧段,後定義data資料段,則data資料段的段位址 = stack棧段段位址 + 1 。
詳細見另一篇:http://blog.csdn.net/syf442/archive/2009/08/27/4490015.aspx
(4) 如果將1、2、3題中的最後一條偽指令"end start"改為"end"(也就是說,不指明程式的入口),則哪個程式仍然可以正確執行?請說明原因.
王爽之《組合語言》學習重點四
2.9 段暫存器 我們前面講到,8086cpu在訪問記憶體時要由相關部件提供記憶體單元的段位址和偏移位址,送入位址加法器合成實體地址。這裡,需要看一下,是什麼部件提供段位址。段位址在8086cpu的段暫存器中存放。8086cpu有4個段暫存器 cs ds ss es。當8086cpu要訪問記憶體時由...
王爽之《組合語言》學習重點四
2.9 段暫存器 我們前面講到,8086cpu在訪問記憶體時要由相關部件提供記憶體單元的段位址和偏移位址,送入位址加法器合成實體地址。這裡,需要看一下,是什麼部件提供段位址。段位址在8086cpu的段暫存器中存放。8086cpu有4個段暫存器 cs ds ss es。當8086cpu要訪問記憶體時由...
組合語言學習筆記3(王爽)
乙個字 兩個位元組,即乙個字需要兩個記憶體單元儲存。高位址放高位位元組,低位址放低位位元組。8086cpu為16位結構,有16位資料線,一次性可傳輸16位資料,也就是說對記憶體一次性操作兩記憶體單元即為乙個字。ds暫存器通常用來存放cpu要訪問資料的段位址,eg 0 表示記憶體單元的偏移位址。mov...