實驗任務
(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...