組合語言 實驗五

2022-06-03 23:27:11 字數 2543 閱讀 8638

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

①cpu執行程式,程式返回前,data段中的資料 不變 。

②cpu執行程式,程式返回前,cs=076c,ss=076b,ds=076a 。

③設程式載入後,code段的段位址為x,則data段的段位址為 x-2 ,stack段的段位址為 x-1 。 

(1)對比程式執行後data段的資料和執行前的資料,發現資料不變。因為先執行出棧操作兩次,再執行入棧操作兩次,兩次的順序相反,正好將先出棧的資料後進棧,後出棧的資料先進棧。所以data中的資料沒有發生變化。

(2)通過執行後的結果可知cs=076c,ss=076b,ds=076a

(3)通過第二小問的結構可推斷出 data段的段位址為 x-2 ,stack段的段位址為 x-1 。

2.對要求的程式進行編譯,連線,用debug載入,跟蹤,然後回答問題。

(1)在程式返回前,我們用d命令查詢data資料 發現其中的值並沒有發生改變

(2)在程式返回前我們可以發現,cs=076c ,ss=076b,ds=076a

(3)該程式載入後,code段的段位址為x,則data段的段位址為x-2,stack段的段位址為x-1

(4)對於如下定義的段:

name segment

name ends

如果段中的資料佔n個位元組,那麼程式載入之後,該段的實際占有的空間為(n/16+1)*16。因為我們在分配空間時使用16個位元組為單位的,所以不足16的時候仍然是分配16個位元組來使用。

3. 對要求的程式進行編譯,連線,用debug載入,跟蹤,然後回答問題。

(1)對比程式執行後data段的資料和執行前的資料,發現資料不變。因為先執行出棧操作兩次,再執行入棧操作兩次,兩次的順序相反,正好將先出棧的資料後進棧,後出棧的資料先進棧。所以data中的資料沒有發生變化。

(2)通過執行後的結果可知cs=076a,ss=076e,ds=076d

(3)通過第二小問的結構可推斷出 data段的段位址為 x+3 ,stack段的段位址為 x+4 。

4.如果將(1)、(2)、(3)題中的最後一條偽指令「end start」改為「end」(也就是說,不指明程式的入口),則哪個程式仍然可以正確執行?請說明原因。

答:第三條程式仍然可以正確執行,如果不指明入口位置,則程式從所分配的空間開始執行,前2個是資料段,只有從第3條開始是指令**。1,2題是將資料段寫在前面,但是3題是將資料段寫在後面,將指令**寫在前面。所以,第三條程式仍然可以正確執行。

5.程式如下,編寫code段中**,將a段和b段中的資料依次相加,將結果存到c段中。

執行所有的**後檢視c段的值。

6.程式如下,編寫code段中**,用push指令將a段中的前8個字型資料,逆序儲存到b段中。

得到結果。

組合語言 實驗五

一 對要求的程式進行編譯,連線,用debug載入,跟蹤,然後回答問題。1 在程式返回前,我們用d命令查詢data資料 發現其中的值並沒有發生改變 2 在程式返回前我們可以發現,cs 076c ss 076b,ds 075a 3 該程式載入後,code段的段位址為x,則data段的段位址為x 2,st...

《組合語言》實驗 實驗

注意 db定義位元組型別變數,乙個位元組資料百佔1個位元組單度元,讀完乙個,偏移量加1 dw定義字型別變問量,乙個字資料佔2個位元組單元,讀完乙個,權偏移量加2 dd定義雙字型別變數版,乙個雙字資料佔4個位元組單元,讀完乙個,權偏移量加4 一開始用了乙個暫存器表示所有項,但是後來發現四個資料佔的位元...

組合語言實驗1 2

小寫字母變為大寫字母 data segment notic db please input the word 0ah,0dh data ends code segment assume cs code,ds data start mov ax,data mov ds,ax 填入ds mov cx,1...