王爽之《組合語言》學習重點十一

2021-05-02 19:36:32 字數 1083 閱讀 7601

實驗五 編寫、除錯具有多個段的程式

(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...