實驗1 用機器指令和彙編指令程式設計

2022-08-21 09:54:10 字數 2255 閱讀 5788

使用e命令寫入記憶體:

使用r命令觀察暫存器情況,並使用t命令單步執行:

使用a命令寫入記憶體:

使用r命令觀察暫存器情況,並使用t命令單步執行:

使用a命令寫入記憶體:

使用t命令單步執行:

由於使用無條件跳轉命令jmp,計算機在完成2^8的計算後仍將繼續運算。

可見rom晶元為2023年1月1日生產。

嘗試使用e命令修改,並再次使用d命令檢視:

可見e命令得到了執行,debug程式並不報錯,但記憶體中的值並沒有變化。這是由於該位置為rom區,向其中寫入資料是無效的。

使用e命令向記憶體單元中填寫資料:

可見螢幕右上角出現了特殊字元,並可改變顏色。這是由於b8100h為視訊記憶體所對映的位址,e命令修改了視訊記憶體中的資料,使顯示發生變化。

使用e命令將記憶體單元 0022:0 ~0022:7連續 8 個位元組資料修改為 50h, 51h, 52h, 53h, 54h, 55h, 56h, 57h:

使用a命令將程式段寫入記憶體:

使用r命令檢視暫存器狀況,並使用t命令單步執行:

可見:

mov ax,0022

movds,ax

mov ax,2200

movss,ax

mov sp,0100

mov ax,[0] ;

ax=5150

add ax,[2] ;

=a4a2

mov bx,[4] ;

bx=5554

add bx,[6] ;

bx=acaa

push ax ;

sp=00fe;修改的記憶體單元的位址是2200:0100,內容為a4a2

push bx ;

sp=00fc;修改的記憶體單元的位址是2200:00ff,內容為acaa

pop ax ;

ax=acaa

pop bx ;

bx=a4a2

push [4] ;

sp=00fe;修改的記憶體單元的位址是2200:0100,內容為5554

push [6] ;

sp=00fc;修改的記憶體單元的位址是2200:00ff,內容為5756

使用a命令將**寫入記憶體中,並使用d命令檢視2000:0到2000:f中的內容:

使用t命令單步執行,並使用d命令檢視2000:0到2000:f中的內容:

可見,其中的內容在持續變化。

這是由於

mov ax,2000

movss,ax

mov sp,10

將棧頂設定為了2000:0010,即初始時棧頂與棧底均為2000:0010。而8086cpu中,棧是從高位址向低位址增長的,即2000:0000到2000:000f位於棧區中,因此,cpu會自動將其初始化,並使用一部分記憶體資源維護硬體棧。而當push ax指令被執行時,ax暫存器中的值被壓入棧中,棧頂元素即被修改為ax的值。

彙編實驗1 用機器指令和彙編指令程式設計

1.實驗執行環境 win10系統下的dosbox 2.實驗所用偵錯程式為debug 一 基礎指令 此次實驗中所用到的7條debug命令 r,d,e,u t,a 1.r命令 檢視 改變cpu暫存器的內容 檢視暫存器的值 改變cs ip的值 可見cs,ip的值由上面的073f和0100變成了0000 2...

實驗1 用機器指令和彙編指令程式設計

1.熟練掌握使用debug工具編寫和除錯x86彙編命令的方法 2.掌握8086cpu 暫存器 記憶體的基礎知識 3.理解並掌握記憶體中多位元組資料的存放 小端法 4.理解並掌握 棧 記憶體空間的特性和使用 5.掌握指令mov,add,sub,jmp,push,pop的基礎用法 練習教材p35 45 ...

實驗1 用機器指令和彙編指令程式設計

1 使用e命令將指令輸入記憶體,並用t命令單步執行。使用a命令將指令寫入記憶體,並使用t命令單步執行。2 使用a命令輸入命令,並使用t命令進行單步執行。3 使用d命令查詢記憶體fff00h fffffh,查詢到日期。使用e命令修改後發現並未修改成功。分析原因 位址為c0000h fffffh的記憶體...