DEBUG全过程跟踪!

来源:互联网 发布:linux远程连接oracle 编辑:程序博客网 时间:2024/05/02 00:34

最近刚刚接触汇编,建议大家和我一样能通过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都以存到相应内存!

在学习汇编的过程中是有写枯燥,但希望大家不要总看书,不实践,这样你的学习效果不一定很好,如果你还没能力写一些程序可以象我这样来调试一下程序,有助于你对程序的理解.这比你看书靠脑子琢磨要好的多.就写到这.

转贴请著名出处.

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击