用e命令寫入記憶體,用t命令單步除錯:
首先將書上前4行的機器碼存入073f:0100開始的位址單元裡,然後使用u命令反彙編,檢視是否與書上的彙編指令相同。
然後進行單步跟蹤進行除錯。
用a命令寫入記憶體,用t命令單步除錯:
將彙編指令寫到0:200開始的位址單元,並且使用-t=0:200的命令進行單步除錯。
使用加法和跳轉指令來實現2^8的計算:
通過自加和使用跳轉的迴圈來進行迴圈計算,剛開始計算,看到ax=0008,下面一步計算得到ax=0010,一開始想成了十進位制還以為是自己寫錯了。最後得到ax=0100,2的8次方256。
檢視並且修改生產日期:
首先因為不確定在記憶體的什麼地方,所以用d命令檢視 fff0:0 ff區域,查出來感覺應該存在了最後一行的位址單元中間,所以嘗試用e命令進行修改,發現更改不了。
9ffff-a0000是視訊記憶體位址空間,在這裡寫入資料會被顯示卡輸出到螢幕上,正如下圖中右上角的圖示所示,並且資料能夠被存入。
首先根據將記憶體單元 0022:0 7連續 8 個位元組資料修改為 50h, 51h, 52h, 53h, 54h, 55h, 56h, 57h,根據此修改得到理論值:
然後進行實驗:
首先將ds賦值0022,保證等會取資料取的是剛才存入的資料,然後將ss:sp指向2200:0100。
然後將ax,bx的數值進行對比
ss:sp指向2200:00fe,修改了2200:00fe的值,修改成了a4a2h
ss:sp指向2200:00fc,修改了2200:00fc的值,修改成了acaah
出棧,ax被賦值最上面的資料,即acaah,ss:sp指向2200:00fe
bx被賦值最上面的資料,即a4a2h,ss:sp指向2200:0100
ss:sp指向2200:00fe,修改了2200:00fe的值,修改成了5554h
ss:sp指向2200:00fc,修改了2200:00fc的值,修改成了5756h
與之前的結論一致。
首先8086使用的是小端法。
棧基址ss=2200h,棧頂初始位址為sp=0100h,出棧的時候sp+2,入棧的時候sp-2。
前3行彙編指令的功能:
設定棧的段位址,ss=2000h,設定的為棧頂的偏移位址,sp=0010h,所以0010h為棧頂,000eh為棧底。
觀察2000:0 f的內容,裡面存放了ax,bx,ip,cs的值。
我發現並不是只有在push時,裡面的內容才會變,每一次除錯都會發生改變,都是往前面移動2個單位。
1.了解了一些基本的彙編指令。
2.但是對最後乙個實驗2000:0 f的內容的變化不是很理解原因;還有就是在教材實驗一的第4個任務,對視訊記憶體位址進行修改,在做完任務3後直接修改,更改了好幾次都不成功,最後重新啟動程式了之後再次更改,才能正常更改視訊記憶體位址內容。
彙編實驗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的記憶體...