實驗3 多個段的彙編源程式編寫與除錯

2022-05-22 18:33:07 字數 2656 閱讀 6628

一、實驗目的

1. 理解和掌握將資料、**、棧放入不同邏輯段的程式的編寫和除錯

2. 理解具有多個段的彙編源程式對應的目標程式執行時,記憶體分配方式

3. 掌握大小寫字元的轉換方法、數字字元和數值之間的轉換方法  

4. 理解並掌握各種定址方式的靈活應用

5. 掌握彙編指令loop, and, or,div, mul的用法

二、實驗準備

複習教材chapter 6-8章。

chapter 6 包含多個段的程式

chapter 7 更靈活的定位記憶體位址的方法

chapter 8 資料處理的兩個基本問題

三、實驗內容

1. 實驗任務1

源**

執行結果

除錯執行

修改後的源**

執行結果

data段

line4

位元組資料的用途是存放字母的顏色資訊

2. 實驗任務2

源**

除錯結果

3. 實驗任務3

源**

cpu執行程式,程式返回前,data段中的資料為0123h, 0456h, 0789h, 0abch, 0defh, 0fedh, 0cbah, 0987h

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

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

4. 實驗任務4

源**

data段中的資料為:0123h, 0456h

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

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

如果段中的資料佔n個位元組,則程式載入後,該段實際占有的空間為:(n/16)*16    (n/16)向上取整。

5. 實驗任務5

源**

data段中的資料為:0123h, 0456h

cpu執行程式,程式返回前,cs=076a、ss=076e、ds=076d

設程式載入後,code段的段位址為x,則data段的段位址為x+3,stack段的段位址為x+4

6. 實驗任務6

只有實驗任務五的**可以正常執行。如果不指名程式的入口,實驗任務三和四**的前幾行資料段將被當做**來執行,

而實驗任務五的**把資料段和棧段的內容放在**段的後面,所以不會影響程式的正常執行。

7. 實驗任務7

源**

除錯執行檢視邏輯段c段的資料

8. 實驗任務8

源**除錯檢視棧段b中的資料

三.實驗總結

這次實驗讓我對資料段、棧段、**段有了更多的了解。在沒有end start即不指名程式入口的情況下

很容易因為位置問題導致資料段或者棧段當成**段來執行。對資料段、棧段的段位址也能通過計算

得出。對於div也有了充分的體會,16位除8位商存在al中餘數存在ah中。

實驗3 多個段的彙編源程式編寫與除錯

實驗任務1 assume cs code,ds data data segment db nuist db 5 dup 2 data ends code segment start mov ax,data mov ds,ax mov ax,0b800h mov es,ax mov cx,5 設定迴圈...

實驗2 多個邏輯段的彙編源程式編寫與除錯

在debug中將執行到line17結束 line19之前,記錄此時 暫存器 ds 076a,暫存器 ss 076b,暫存器 cs 0031 假設程式載入後,code段的段位址是x,則,data段的段位址是x 20h,stack的段位址是x 10h。在debug中將執行到line17結束 line19...

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

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