使用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使用a命令將**寫入記憶體中,並使用d命令檢視2000:0到2000:f中的內容: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
使用t命令單步執行,並使用d命令檢視2000:0到2000:f中的內容:
可見,其中的內容在持續變化。
這是由於
mov ax,2000將棧頂設定為了2000:0010,即初始時棧頂與棧底均為2000:0010。而8086cpu中,棧是從高位址向低位址增長的,即2000:0000到2000:000f位於棧區中,因此,cpu會自動將其初始化,並使用一部分記憶體資源維護硬體棧。而當push ax指令被執行時,ax暫存器中的值被壓入棧中,棧頂元素即被修改為ax的值。movss,ax
mov sp,10
彙編實驗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的記憶體...