1. 程式人生 > >實驗 5 編寫、調試具有多個段的

實驗 5 編寫、調試具有多個段的

div 體會 存儲 實現 編寫 star art p s 提高

實驗任務

(1)

技術分享圖片

(2)

技術分享圖片

(3)

技術分享圖片

(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 編寫、調試具有多個段的