實驗1: 輸入以下命令,我先是使用a命令進行了輸入,並用t命令進行的單步調試。 可以發現ax,bx在不同的命令下發生了改變,而ip的值也是根據輸入指令的長度而不斷的增加。後來我又使用了g命令進行了一次執行完成(結果和單步相同)。 這裡需要註意,g的最後範圍應當是命令結束的那個地址,而不是下個地址。 ...
實驗1:
輸入以下命令,我先是使用a命令進行了輸入,並用t命令進行的單步調試。
可以發現ax,bx在不同的命令下發生了改變,而ip的值也是根據輸入指令的長度而不斷的增加。後來我又使用了g命令進行了一次執行完成(結果和單步相同)。
這裡需要註意,g的最後範圍應當是命令結束的那個地址,而不是下個地址。
隨後我又使用了e命令嘗試。
首先反彙編看了下,發現沒有什麼問題。
然而當我嘗試使用g命令一次性執行完成時卻發生了問題,當我執行到倒數第二個地址時是成功的,而執行到最後一個地址卻出現了卡死的狀態,我後面嘗試了使用不同的方法都失敗了,不知道是為什麼,求助大佬。
實驗2:
使用3條指令完成2的8次方的計算。這裡我使用的是7次jmp命令來完成計算。這裡記得要修改cs和ip的初始值,因為我們是從2000:0開始寫的,而不是從預設地址開始的。
然後使用t開始單步調試,因為一開始要執行2次移動和加法,下麵的jmp每次都是要執行2次,共要7次jmp,故總共要執行t命令16次才能得到想要的結果。
這裡可以看見ax的16進位為0100轉換為10進位就是2的8次方即16的平方256。
實驗3:
這裡要查找FFF00H~FFFFFH中的生產日期。故我使用了d命令從fff0:0開始找起,發現了一個有趣的現象。
通過這幾張圖可以發現,在每個段地址從fff0到ffff中都會在00x0中出現01/01/92這個值(x為0~f)而且段地址的最後一位與00x0中的x有著這樣的關係 最後一位定義為y的話(即fffy)y+x=16 的00x0的地址就會出現01/01/92。然後我嘗試去修改這個值,發現並沒有能修改成功。
實驗4:
嘗試著在b8100一片連續的記憶體中修改值,出現瞭如圖的情況。
然後我在其他地方修改並不會出現這種情況。
後來查書發現從A0000~BFFFF的記憶體單元地址都是顯存地址,故會出現一些圖案。
總結:
經過這幾個實驗對彙編的一些指令有了初步的瞭解,也體會到了彙編對記憶體修改的方便。這裡還有幾個問題
1.實驗1:然而當我嘗試使用g命令一次性執行完成時卻發生了問題,當我執行到倒數第二個地址時是成功的,而執行到最後一個地址卻出現了卡死的狀態,我後面嘗試了使用不同的方法都失敗了,不知道是為什麼,求助大佬。
2.實驗2:這裡有個問題,因為jmp會無限執行下去,故如何才能中止這個程式。
3.實驗3:這裡也有個問題,如果這個就是生產日期的話為什麼會出現/92這種數字。眾所周知,一個月最多只有31天。是我找錯了還是什麼?