首页
/
每日頭條
/
科技
/
彙編指令debug的實驗結果及分析
彙編指令debug的實驗結果及分析
更新时间:2024-09-28 12:15:16
【實驗具體内容】

1.使用Debug,将程序(見實驗源代碼)寫入内存,逐條執行,觀察每條指令執行後,CPU中相關寄存器中内存的變化。

2.将下面三條指令(見實驗源代碼)寫入從2000:0開始的内存單元中,利用這三條指令計算2的8次方。

3.查看内存中存有的PC機主闆上的ROM生産日期并試圖修改。

4.觀察下圖中的實驗過程,分析為何2000:0~2000:f中的内容會發生改變

【第一個實驗】

(1.1)實驗源代碼(粘貼源代碼):

機器碼 彙編指令

b8 20 4e mov ax,4E20H

05 16 14 add ax,1416H

bb 00 20 mov bx,2000H

01 d8 add ax,bx

89 c3 mov bx,ax

01 d8 add ax,bx

b8 1a 00 mov ax,001AH

bb 26 00 mov bx,0026H

00 d8 add al,bl

00 dc add ah,bl

00 c7 add bh,al

b4 00 mov ah,0

00 d8 add al,bl

04 9c add al,9CH

(1.2)實驗代碼、過程、相應結果(截圖)并對實驗進行說明和分析:

Win10下可以借用Dosbox調試Debug,如下圖

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)1

用Debug下的-d命令查看1000:0之後128個内存單元中的内容

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)2

用Debug下的-a命令以彙編語言的形式寫入從1000:0開始的内存單元中

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)3

使用Debug下的-d命令查看1000:0内存中的内容核對

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)4

在-t命令之前注意CS:IP當前指向,這裡指向073F:0102,需要修改其指向

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)5

使用Debug下的-r命令修改CS:IP指向,如下圖

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)6

使用Debug下的-t命令逐次執行1000:0中的指令,截圖如下

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)7

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)8

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)9

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)10

曆次-t命令下CS:IP指向和寄存器中内容如下:

CS:IP AX BX

1000:0000 0000 0000

1000:0003 4E20 0000

1000:0006 6236 0000

1000:0009 6236 2000

1000:000B 8236 2000

1000:000D 8236 8236

1000:000F 046C 8236

1000:0012 001A 8236

1000:0015 001A 0026

1000:0017 0040 0026

1000:0019 2640 0026

1000:001B 2640 4026

1000:001D 0040 4026

1000:001F 0066 4026

1000:0021 0002 4026


(2.1)實驗源代碼:

mov ax,1 (從2000:0開始的内存單元)

add ax,ax

jmp 2000:0003 (觀察跳到什麼地方了?)

(2.2)實驗代碼、過程、相應結果(截圖)并對實驗進行說明和分析:

源代碼寫入過程類似上面1.2的過程,這裡不再贅述,僅展示截圖

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)11

通過jmp指令,在執行一次mov ax,1後程序将在add ax,ax和jmp 2000:0003之間循環往複,直到計算出2的8次方

(下面忽略中間過程,僅關注最終結果即可)

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)12

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)13

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)14

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)15

指令執行過程紛繁複雜!


(3.1)實驗代碼、過程、相應結果(截圖)并對實驗進行說明和分析:

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)16

由于dosbox模拟一個真實的電腦環境,故01/01/92與主闆ROM不同可以理解。

【第二個實驗】

(1.1)實驗源代碼(粘貼源代碼):

mov ax,ffff

mov ds,ax

mov ax,2200

mov ss,ax

mov sp,0100

mov ax,[0] ;ax=C0EA

add ax,[2] ;ax=C0FC

mov bx,[4] ;bx=30F0

add bx,[6] ;bx=6021

push ax ;sp= 00FE ;修改的内存單元的地址是2200:00FE 内容為C0FC

push bx ;sp= 00FC ;修改的内存單元的地址是2200:00FC 内容為6021

pop ax ;sp= 00FE ;ax=6021

pop bx ;sp=0100 ;bx=C0FC

push [4] ;sp= 00FE ;修改的内存單元的地址是2200:00FE 内容為30F0

push [6] ;sp= 00FC ;修改的内存單元的地址是2200:00FC 内容為2F31

(1.2)實驗代碼、過程、相應結果(截圖)并對實驗進行說明和分析:

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)17

修改CS:IP,使之指向2000:0000,并查看當前寄存器中内容:

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)18

執行mov ax,ffff

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)19

執行mov ds,ax

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)20

執行mov ax,220

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)21

執行mov ss,ax,此處忘記截圖,可參考下圖

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)22

執行mov sp,0100

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)23

執行mov ax,[0]

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)24

執行add ax,[2]

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)25

執行mov bx,[4]

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)26

執行add bx,[6]

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)27

執行push ax

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)28

執行push bx

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)29

執行pop ax

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)30

執行pop bx

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)31

執行push [4]

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)32

執行push [6]

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)33

相關填空見(1.1)


(2.1) 實驗源代碼(粘貼源代碼):

mov ax,1000H

mov ds,ax

mov ds,[0]

add ds,ax

(2.2)實驗代碼、過程、相應結果(截圖)并對實驗進行說明和分析:

輸入指令過程中,出現錯誤,是因為add,sub不能對段寄存器ds進行操作

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)34

運行前三條指令是正常的(*)

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)35

若一定要執行add ds,ax,可以采用類似向ds輸入數據的方法,如下

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)36

運行結果如下

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)37

彙編指令debug的實驗結果及分析(彙編Debug入門:承接上篇文章)38

由于前面在運行不完整程序的前三條指令(*)後,寄存器ds的值發生變化,導緻bx的值發生變化,進而導緻add bx,ax運行後bx變化,最終導緻ds變化,所以在-t命令後截圖中寄存器的值與之前不同,可以通過正式程序之前提前修改ds的值,使之與之前一緻來消除影響。


(3.1)是因為中斷的影響

【實驗心得】

CS:IP指向指令的内存單元地址,CPU通過它區分指令和數據。DS存放要訪問數據的段地址,CPU是不是也可以通過它來區分指令和數據呢?SS:SP時刻指向棧頂,對于PUSH指令,先進行SP=SP-2再送數據入棧;POP指令相反,先取出棧内數據再SP=SP 2。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
手機掉水了怎麼辦
手機掉水了怎麼辦
手機掉水了怎麼辦?及時關機,當手機進水後,首先立即關機,避免造成燒毀主闆的結果,下面我們就來聊聊關于手機掉水了怎麼辦?接下來我們就一起去了解一下吧!手機掉水了怎麼辦及時關機,當手機進水後,首先立即關機,避免造成燒毀主闆的結果。去除水分,首先...
2024-09-28
怎麼使用關鍵幀
怎麼使用關鍵幀
怎麼使用關鍵幀?視頻直播離不開視頻幀,幀是進行視頻流媒體制作的最基本單位,一個視頻流會分為很多幀,在時間軸上的每一幀都可以包含需要顯示的所有内容,包括圖形、聲音、各種素材和其他多種對象之前我們介紹過H264編碼NALU結構中的關鍵幀判斷,一...
2024-09-28
十代處理器能裝win7系統嗎
十代處理器能裝win7系統嗎
十代處理器能裝win7系統嗎?今天一位朋友來我這裡想要組裝一台高端台式電腦主機,他的唯一裝機要求就是使用9代I7處理器電腦使用Win7操作系統,大家應該知道,現在的主闆由于架構更新,基本上八代以上的電腦都裝不了Win7操作系統了,而這位朋友...
2024-09-28
和平精英蘋果空白名字代碼
和平精英蘋果空白名字代碼
和平精英蘋果空白名字代碼?玩家不要用系統自帶的輸入法來輸入,網上搜索一款可以自定義設置表情的輸入法,像QQ、搜狗這些都是可以的,然後點擊改名卡或者點擊創建角色的名稱欄開始輸入,今天小編就來說說關于和平精英蘋果空白名字代碼?下面更多詳細答案一...
2024-09-28
2022年最好的lcd屏手機
2022年最好的lcd屏手機
LCD屏幕在硬件上具備優勢,護眼效果通常要好于OLED屏幕,但是弊端也很明顯,首先是無法做到屏下指紋識别,其次色彩呈現不如OLED那麼鮮豔,加上近些年OLED屏幕出現了PMW、DC護眼調光,在護眼效果上有了提升,使得大部分旗艦手機更傾向于使...
2024-09-28
Copyright 2023-2024 - www.tftnews.com All Rights Reserved