實驗任務二:
?(1)使用d命令查看日期,得到日期為1992年1月1日
(2)使用e命令修改后再次查看,發(fā)現(xiàn)無法修改,原因是FFF00H~FFFFFH區(qū)是只讀存儲區(qū),只讀存儲沒有修改權限
?
?實驗任務三:
(1)debug中通過e命令向內存中寫入數據
(2)通過f命令批量向內存中寫入數據
?
(3)修改內存單元數據
?
?
實驗任務四:
1 -a 2 mov ax, 20 3 mov ds, ax 4 mov ss, ax 5 mov sp, 30 6 push [0] ; 執(zhí)行后,寄存器(sp) = 2e 7 push [2] ; 執(zhí)行后,寄存器(sp) = 2c 8 push [4] ; 執(zhí)行后,寄存器(sp) = 2a 9 push [6] ; 執(zhí)行后,寄存器(sp) = 28 10 pop [6] ; 執(zhí)行后,寄存器(sp) = 2a 11 pop [4] ; 執(zhí)行后,寄存器(sp) = 2c 12 pop [2] ; 執(zhí)行后,寄存器(sp) = 2e 13 pop [0] ; 執(zhí)行后,寄存器(sp) = 30
問題1:指令 mov ss, ax 和 mov sp, 30 執(zhí)行后, 棧頂的邏輯地址和物理地址分別是:
邏輯地址:0020:0030;
物理地址:00230H;
問題2:指令 push [6] 執(zhí)行結束, pop [6] 執(zhí)行之前,使用 d 20:20 2f 查看此時??臻g數據。給出實驗截圖。
問題3:編指令 pop [0] 執(zhí)行結束后, pop [0] 指令執(zhí)行結束后,使用d命令 d 20:0 7 查看此時數據空間內的數據是否有變化。給出實驗截圖。
問題4:把最后四條指令改成截圖中的順序, pop [6] 指令執(zhí)行結束后,使用d命令 d 20:0 7 查看此時數據空間內的數據是否有變化。給出實驗截圖。
?
?
實驗任務五:
問題1:使用t命令單步執(zhí)行 mov ss, ax 時,是單步執(zhí)行完這一條指令就暫停了嗎?后面的指令 mov sp, 30 是什么時候執(zhí)行的?
答:沒有暫停。執(zhí)行mov?ss, ax后隨后就執(zhí)行mov sp 30。
問題2:根據匯編指令,前三條指令執(zhí)行后,00220H ~ 0022fH被設置為??臻g。并且,初始時,已通 過f命令將初始??臻g全部填充為0。觀察單步調試時,棧空間00220H ~ 0022fH內存單元值的變化,特別是圖示中黃色下劃線表示出的數據值。根據實驗觀察,嘗試思考和分析原因。
答:因為mov sp 30是在執(zhí)行mov?ss,?ax的時候一起執(zhí)行的,所以在執(zhí)行mov ss的時候相當于兩條指令一塊執(zhí)行,那么當前執(zhí)行指令的地址便往后跳到了073f:0108。
?
實驗任務六:
?(1) 給出程序源碼:
1 assume cs:code 2 code segment 3 start: 4 mov cx, 10 5 mov dl, '0' 6 s: mov ah, 2 7 int 21h 8 add dl, 1 9 loop s 10 11 mov ah, 4ch 12 int 21h 13 code ends 14 end start
?(2)?給出使用masm、link對程序匯編鏈接過程截圖,以及,運行可執(zhí)行程序task5.exe的運行結果截圖:
?
?
?
實驗運行結果:
給出在debug中查看task5.exe的程序段前綴PSP的截圖:
?
?
?
實驗任務七:
(1)補全代碼:
1 assume cs:code 2 3 code segment 4 mov ax, _cs_ 5 mov ds, ax 6 mov ax, 0020h 7 mov es, ax 8 mov bx, 0 9 mov cx, _17H_ 10 s: mov al, [bx] 11 mov es:[bx], al 12 inc bx 13 loop s 14 15 mov ax, 4c00h 16 int 21
依據:1、cs為程序段的起始地址,要在下一步傳給ds;
? ? 2、通過截圖并利用CX數值進行計算得出字節(jié)長度為0017h。
(2)在debug中調試,使用g命令將程序執(zhí)行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命令 對0:200h開始的內存單元反匯編,確認是否把task7.asm中l(wèi)ine3-line12的代碼復制到了目標內存空間。
?
本文摘自 :https://www.cnblogs.com/