當前位置:首頁 > IT技術(shù) > 編程語言 > 正文

實驗1 C語言開發(fā)環(huán)境使用和數(shù)據(jù)類型、運算符、表達式
2021-10-28 15:17:40

實驗任務(wù)二:

?1)使用d命令查看日期,得到日期為199211

(2)使用e命令修改后再次查看,發(fā)現(xiàn)無法修改,原因是FFF00H~FFFFFH區(qū)是只讀存儲區(qū),只讀存儲沒有修改權(quán)限

?

?實驗任務(wù)三:

(1)debug中通過e命令向內(nèi)存中寫入數(shù)據(jù)

(2)通過f命令批量向內(nèi)存中寫入數(shù)據(jù)

?

3)修改內(nèi)存單元數(shù)據(jù)

?

?

實驗任務(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ù)據(jù)。給出實驗截圖。

問題3:編指令 pop [0] 執(zhí)行結(jié)束后, pop [0] 指令執(zhí)行結(jié)束后,使用d命令 d 20:0 7 查看此時數(shù)據(jù)空間內(nèi)的數(shù)據(jù)是否有變化。給出實驗截圖。

問題4:把最后四條指令改成截圖中的順序, pop [6] 指令執(zhí)行結(jié)束后,使用d命令 d 20:0 7 查看此時數(shù)據(jù)空間內(nèi)的數(shù)據(jù)是否有變化。給出實驗截圖。

?

?

實驗任務(wù)五:

問題1:使用t命令單步執(zhí)行 mov ss, ax 時,是單步執(zhí)行完這一條指令就暫停了嗎?后面的指令 mov sp, 30 是什么時候執(zhí)行的?

  答:沒有暫停。執(zhí)行mov?ss, ax后隨后就執(zhí)行mov sp 30。

問題2:根據(jù)匯編指令,前三條指令執(zhí)行后,00220H ~ 0022fH被設(shè)置為棧空間。并且,初始時,已通 過f命令將初始??臻g全部填充為0。觀察單步調(diào)試時,??臻g00220H ~ 0022fH內(nèi)存單元值的變化,特別是圖示中黃色下劃線表示出的數(shù)據(jù)值。根據(jù)實驗觀察,嘗試思考和分析原因。

  答:因為mov sp 30是在執(zhí)行mov?ss,?ax的時候一起執(zhí)行的,所以在執(zhí)行mov ss的時候相當于兩條指令一塊執(zhí)行,那么當前執(zhí)行指令的地址便往后跳到了073f:0108。

?

實驗任務(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對程序匯編鏈接過程截圖,以及,運行可執(zhí)行程序task5.exe的運行結(jié)果截圖:

?

?

?

實驗運行結(jié)果:

給出在debug中查看task5.exe的程序段前綴PSP的截圖:

?

?

?

實驗任務(wù)七:

(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

依據(jù):1、cs為程序段的起始地址,要在下一步傳給ds;

  ? ? 2、通過截圖并利用CX數(shù)值進行計算得出字節(jié)長度為0017h。

(2)在debug中調(diào)試,使用g命令將程序執(zhí)行到 loop s 之后、 mov ax, 4c00h 之前,然后,使用u命令 對0:200h開始的內(nèi)存單元反匯編,確認是否把task7.asm中l(wèi)ine3-line12的代碼復(fù)制到了目標內(nèi)存空間。

?

本文摘自 :https://www.cnblogs.com/

開通會員,享受整站包年服務(wù)立即開通 >