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都以存到相应内存!
在学习汇编的过程中是有写枯燥,但希望大家不要总看书,不实践,这样你的学习效果不一定很好,如果你还没能力写一些程序可以象我这样来调试一下程序,有助于你对程序的理解.这比你看书靠脑子琢磨要好的多.就写到这.
转贴请著名出处.
- DEBUG全过程跟踪!
- 项目开发全过程跟踪
- 项目开发全过程跟踪二
- Qunar全链路跟踪及Debug
- andriod navive debug信息的跟踪方法
- Java如何单步跟踪Debug
- 无法debug断点跟踪JDK源代码
- C#debug跟踪C++DLL源码
- eclipse远程debug的跟踪方式
- eclipse开发php全过程的搭建带debug的配置
- 启动微信 系统重启 debug全过程
- eclipse开发php全过程的搭建带debug的配置
- eclipse开发php全过程的搭建带debug的配置
- eclipse开发php全过程的搭建带debug的配置
- 用Debug函数实现API函数的跟踪
- 用Debug函数实现API函数的跟踪
- 用Debug函数实现API函数的跟踪[转]
- 用Debug函数实现API函数的跟踪
- 春游,烧烤,钓鱼
- 在TOMCAT中部署war
- Unicode 问答集
- 在C#中使用ADO.Net部件来访问Access数据库
- openlaszlo内操作xml
- DEBUG全过程跟踪!
- Function Return Table
- Exists
- 二级dropdown弹出菜单(div+css)
- ExtendedSP
- MM图收 升级至V1.2.0.0
- count(distinct)
- 字符串类型如何转换成日期类型
- aes_cursor