DEBUG全過程跟蹤!

最近剛剛接觸彙編,建議大家和我一樣能通過DEBUG更好的理解代碼.這樣不但能調試程序,而且使你對內存以及寄存器也能夠隨時掌握他的內容,更有助於你鞏固反彙編出的指令的作用!

就不多寫了直接來個簡單點的,因爲主要是針對和我一樣的初學者,代碼量太大未必是件好事(對於理解起來)

代碼如下:     X*16+Y結果存放到ZZZ

dseg segment
xxx  dw 1234h
yyy  dw 5678h
zzz  dd ?
dseg ends

cseg segment
     assume cs:cseg,ds:dseg
start: mov ax,dseg
       mov ds,ax
       mov ax,xxx
       xor dx,dx
       mov ax,xxx
       mov dx,16
       mul dx
       add ax,yyy
       adc dx,0
       mov word ptr zzz,ax
       mov word ptr zzz+2,dx
       mov ah,4ch
       int 21h
       cseg ends
       end start

先DEBUG加載一下程序EXE .反彙編一下看看到底彙編程序彙編出什麼樣的代碼 並-R來查看一下當前的各個寄存器的內容 如圖:

我們可以看到數據段的地址被分配爲13C5

下面開始我們-T來跟蹤一下: 如圖

單步跟蹤,通過給DS賦值 DS的內容在MOV DS,AX後變爲13C5

XXX也被彙編成DS:[0000],也就是我們在DESG中定義的 他的值爲1234H    MOV後AX變爲1234H

XOR後DX的內容變爲0 主要爲擴展成32位的結果

繼續跟蹤如圖:

因爲*16   之前DX已經爲16 所以MUL後低字在AX裏 ,高字在DX裏

加上5678H 彙編後爲DS:[0002]   加如AX   爲防止進位 在跟一個ADC把結果低字存到DS:[0004],高字存到DS:[0006]

下面我門來看一下數據段的內存值:如圖

在這裏DOS調用就先不看了,所以直接來-D看一看內存低字79B8 和高字0001都以存到相應內存!

在學習彙編的過程中是有寫枯燥,但希望大家不要總看書,不實踐,這樣你的學習效果不一定很好,如果你還沒能力寫一些程序可以象我這樣來調試一下程序,有助於你對程序的理解.這比你看書靠腦子琢磨要好的多.就寫到這.

轉貼請著名出處.

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章