實(shí)驗(yàn)任務(wù)二:
?(1)使用d命令查看日期,得到日期為1992年1月1日
(2)使用e命令修改后再次查看,發(fā)現(xiàn)無法修改,原因是FFF00H~FFFFFH區(qū)是只讀存儲區(qū),只讀存儲沒有修改權(quán)限
?
?實(shí)驗(yàn)任務(wù)三:
(1)debug中通過e命令向內(nèi)存中寫入數(shù)據(jù)
(2)通過f命令批量向內(nèi)存中寫入數(shù)據(jù)
?
(3)修改內(nèi)存單元數(shù)據(jù)
?
?
實(shí)驗(yàn)任務(wù)四:
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í)行后, 棧頂?shù)倪壿嫷刂泛臀锢淼刂贩謩e是:
邏輯地址:0020:0030;
物理地址:00230H;
問題2:指令 push [6] 執(zhí)行結(jié)束, pop [6] 執(zhí)行之前,使用 d 20:20 2f 查看此時(shí)棧空間數(shù)據(jù)。給出實(shí)驗(yàn)截圖。
問題3:編指令 pop [0] 執(zhí)行結(jié)束后, pop [0] 指令執(zhí)行結(jié)束后,使用d命令 d 20:0 7 查看此時(shí)數(shù)據(jù)空間內(nèi)的數(shù)據(jù)是否有變化。給出實(shí)驗(yàn)截圖。
問題4:把最后四條指令改成截圖中的順序, pop [6] 指令執(zhí)行結(jié)束后,使用d命令 d 20:0 7 查看此時(shí)數(shù)據(jù)空間內(nèi)的數(shù)據(jù)是否有變化。給出實(shí)驗(yàn)截圖。
?
?
實(shí)驗(yàn)任務(wù)五:
問題1:使用t命令單步執(zhí)行 mov ss, ax 時(shí),是單步執(zhí)行完這一條指令就暫停了嗎?后面的指令 mov sp, 30 是什么時(shí)候執(zhí)行的?
答:沒有暫停。執(zhí)行mov?ss, ax后隨后就執(zhí)行mov sp 30。
問題2:根據(jù)匯編指令,前三條指令執(zhí)行后,00220H ~ 0022fH被設(shè)置為棧空間。并且,初始時(shí),已通 過f命令將初始??臻g全部填充為0。觀察單步調(diào)試時(shí),棧空間00220H ~ 0022fH內(nèi)存單元值的變化,特別是圖示中黃色下劃線表示出的數(shù)據(jù)值。根據(jù)實(shí)驗(yàn)觀察,嘗試思考和分析原因。
答:因?yàn)閙ov sp 30是在執(zhí)行mov?ss,?ax的時(shí)候一起執(zhí)行的,所以在執(zhí)行mov ss的時(shí)候相當(dāng)于兩條指令一塊執(zhí)行,那么當(dāng)前執(zhí)行指令的地址便往后跳到了073f:0108。
?
實(shí)驗(yàn)任務(wù)六:
?(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對程序匯編鏈接過程截圖,以及,運(yùn)行可執(zhí)行程序task5.exe的運(yùn)行結(jié)果截圖:
?
?
?
實(shí)驗(yàn)運(yùn)行結(jié)果:
給出在debug中查看task5.exe的程序段前綴PSP的截圖:
?
?
?
實(shí)驗(yàn)任務(wù)七:
(1)補(bǔ)全代碼:
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
依據(jù):1、cs為程序段的起始地址,要在下一步傳給ds;
? ? 2、通過截圖并利用CX數(shù)值進(jìn)行計(jì)算得出字節(jié)長度為0017h。
(2)在debug中調(diào)試,使用g命令將程序執(zhí)行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命令 對0:200h開始的內(nèi)存單元反匯編,確認(rèn)是否把task7.asm中l(wèi)ine3-line12的代碼復(fù)制到了目標(biāo)內(nèi)存空間。
?
本文摘自 :https://www.cnblogs.com/