1. 程式人生 > >【實驗四】[bx]和loop的使用

【實驗四】[bx]和loop的使用

四、實驗結論

任務一:

(1)

①當我寫 mov ax,b800h時,編譯報錯了。

②清屏後執行

(2)將原始碼程式中字資料0403H→修改為0441H,再次執行,圖案發生了變化。

任務二:

(1)

①原始碼:

②用debug執行並檢視記憶體單元的值。(用了p命令和t命令的單步執行)

★★★比較懶,想用g命令,結果輸入 g=076a:0000 076a:0018或者g=076a:0000 0018後,直接宕機,筆記本上是這樣記錄的,之前程式使用前者,也沒有問題,(後者是錯的,千萬不要寫!!!!!)不知道錯在哪

 

 

反而是下圖,誤打誤撞不知道怎麼的就對了。 

****經查閱,下圖輸入的g 076a:cd21,代表程式執行到此處斷點

 

 

★★★還有直接g命令也可以正常結束

 

 

★★★另外,經多次試驗發現,g命令必須在程式最後的程式碼,int 21h之前停止執行!!

(此處借用的下一個任務的程式碼試驗)

任務三:將“mov按下,4c00h”之前的指令複製到記憶體0:200處,補全程式。上機除錯,跟蹤執行結果。

分析:

要複製程式碼段,應該找到程式碼的起始地址,根據書本4.9節,程式起始地址為cs:ip(ip=0),所以第一步應該是mov ax,cs。

mov cx,___   要知道cx的值,經網上查詢,要知道程式的長度,可以將cx隨便附一個值,然後用debug執行,反彙編,檢視mov ax,4c00h之前的程式碼的長度。

修改程式碼中cx的值,發現用r命令檢視時,cx不變,程式大小並沒有改變

可以看出來,0000到0016,長度為23,所以mov cx,23

但r命令檢視的cx值為1c,即28,它並不是有效程式碼段的長度,這是整個程式的長度嗎??

關於es:[bx],觀察到es==ds,有什麼意義嗎??

另外,程式碼命名改變了ds和cx的值,但每次執行後,他們都會變成固定的值,有點迷糊。

①編輯,編譯,連線,debug執行,反彙編

②debug執行並檢視記憶體單元。

五、總結與體會

本次實驗鞏固了[bx]和loop的使用,雖然過程並不平緩,但好歹是做到底。

另外通過親自實驗,我瞭解了更多的g命令的用法,感慨果然懶惰(不想用t,p命令單步執行)使人進步(玩笑),弄懂後有淡淡的成就感,喝一口茶,深藏功與名的那種,開心。