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

2022-08-13 05:21:13 字數 2171 閱讀 5842

實驗任務

(4)若將最後一條指令」end start「改為」end「,(3)中的程式仍然可以正常執行。

原因:如果不指明程式的入口,程式的cs:ip值沒有被設定為指向該入口,就會以程式段的第一條指令為預設入口了,然後程式會在end處結束,無法執行到**段。

(5)①實驗**

assume cs:code

a segment

db 1,2,3,4,5,6,7,8

a ends

b segment

db 1,2,3,4,5,6,7,8

b ends

c1 segment   ; 在整合軟體環境中,請將此處的段名稱由c→改為c1或其它名稱

db 8 dup(0)

c1 ends     ; 改的時候要成對一起修改

code segment

start:

mov ax,c1

mov es,ax

mov bx,0

mov cx,8

s: 

mov ax,a

mov ds,ax

mov dl,[bx]

mov es:[bx],dl

mov ax,b

mov ds,ax

mov dl,[bx]

add es:[bx],dl

inc bx

loop s

mov ax,4c00h

int 21h

code ends

end start

②在實現資料相加前,邏輯段c的8個位元組

③ 執行完實現加運算的**後,邏輯段c的8個位元組

④驗證是否完成正確的資料相加

c1中資料符合a的資料與b的資料加和。

(6)①程式**

assume cs:code

a segment

dw 1,2,3,4,5,6,7,8,9,0ah,0bh,0ch,0dh,0eh,0fh,0ffh

a ends

b segment

dw 8 dup(0)

b ends

code segment

start:

mov ax,a

mov ds,ax

mov ax,b

mov ss,ax

mov cx,8h

mov bx,0

mov sp,10h

s:push[bx]

add bx,2

loop s

mov ax,4c00h

int 21h

code ends

end start

②檢視邏輯段b的8個字單元資訊截圖

③執行 push操作,然後再次檢視邏輯段b的8個子單元資訊

④:對比②和③

經驗證,已成功實現逆序儲存。

總結與體會

通過本次實驗,我掌握了如何來編寫、除錯具有多個段的乙個程式,

具有多個段的程式相對於僅具有乙個段的程式而言,能把資料,**和棧段分開儲存,不僅提高了程式整體的儲存容量,還使程式顯得井然有條,通過對多個段的定義,使我們對資料的操作更方便清晰了。 

大致清楚了為具有多個段的乙個程式分配儲存空間的方式,以16個位元組為倍數,將其連續地分配在乙個儲存空間中。

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

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

一 實驗任務 完成教材133實驗5 1 將下面的程式編譯 連線,用debug載入 跟蹤,然後回答問題。用u指令反彙編,g指令執行到001d前,得到程式返回前。1 cpu執行程式,程式返回前,data段中的資料為多少?2 cpu執行程式,程式返回前,cs 076c ss 076b ds 076a。3 ...

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

實驗一 將下面的程式編譯,連線,用debug載入,跟蹤,然後回答問題 執行程式截圖如下 總結 cpu執行程式,程式返回前,data段中的資料不變 cpu執行程式,程式返回前,cs 076c,ss 076b,ds 076a 設程式載入後,code段的段位址為x,則data段的段位址為x 2,stack...