教程--Debug汇编入门
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
教程--Debug汇编入门
教程-- Debug汇编入门
2 第1课
这一课很简单,用汇编来计算2+3 等于多少
1. 打开debug.exe程序:
开始菜单: "开始"→"运行(R)"
输入: debug
回车后打开debug.exe 程序
2. debug.exe 是一个DOS界面的程序,
输入: aa0
回车
输入: mov dx,2
回车
输入: add dx,3
回车
回车
输入: t=a0
回车
输入: t
3. 你必须按我所说的去做,当然如果你很厉害可以不那样做, 我给那些操作编个号:
步骤1:输入: aa0
步骤2:回车
步骤3:输入: mov dx,2
步骤4:回车
步骤5:输入: add dx,3
步骤6:回车
步骤7:回车
步骤8:输入: t=a0
步骤9:回车
步骤10:输入: t
要注意步骤6和步骤7都是回车,就是连着回了两次车,
现在来看一下屏幕信息,你们对照一下,看对不对:
-aa0
0B08:00A0 mov dx,2
0B08:00A3 add dx,3
0B08:00A6
-t=a0
AX=0000 BX=0000 CX=0000 DX=0002 SP=FFEC BP=0000 SI=0000 DI=0000 DS=0B08 ES=0B08 SS=0B08 CS=0B08 IP=00A3 NV UP EI PL NZ NA PO NC 0B08:00A3 83C203ADD DX,+03
-t
AX=0000 BX=0000 CX=0000 DX=0005 SP=FFEC BP=0000 SI=0000 DI=0000 DS=0B08 ES=0B08 SS=0B08 CS=0B08 IP=00A6 NV UP EI PL NZ NA PO NC 0B08:00A6 6F DB6F 需要说明的是你显示的可能和我显示的有点区别,
我显示屏上的那些0B08,你的显示可能并不是这个,而是另外一个值,
4. 查看显示结果
我们都知道3+2=5,可这个5显示在什么地方呢?
在步骤10里, 输入: t 然后回车,可以看到显示一大堆东西,
你仔细找找显示的信息,找到DX这个东西,它是这样的: DX=0005 0005就是计算的结果,当然,它总是用4位数来表示的,所以前面
有三个0, 0005就是5,前面的三个0没用的,占个位置而已
5. 验证
当然一次不足以说明DX=0005中的0005就是计算结果,也许是一种巧合呢, 你可以试试其它的数字,看对不对
6. 进制:
"开始"→"运行",输入:debug,回车后打开debug.exe 程序
然后按下面的步骤操作:
步骤1:输入: aa0
步骤2:回车
步骤3:输入: mov dx,7
步骤4:回车
步骤5:输入: add dx,8
步骤6:回车
步骤7:回车
步骤8:输入: t=a0
步骤9:回车
步骤10:输入: t
步骤11: 回车
你猜猜计算结果会是多少呢?我现在是7+8,我想当然的认为是15, 那就是: DX=0015 ,可真的是这样吗,执行完步骤11后,看看步骤11 输出的信息,找到DX的值,非常奇怪的竟然是DX=000F
000F是十六进制的,十六进制的F就是十进制的15,明白000F是十六
进制就行了
6. 进制:
"开始"→"运行",输入:debug,回车后打开debug.exe 程序
然后按下面的步骤操作:
步骤1:输入: aa0
步骤2:回车
步骤3:输入: mov dx,11
步骤4:回车
步骤5:输入: add dx,3
步骤6:回车
步骤7:回车
步骤8:输入: t=a0
步骤9:回车
步骤10:输入: t
步骤11: 回车
你猜猜计算结果会是多少呢?我现在是11+3,我想当然的认为是14, 不过有了前一个7+8的例子的经验,我知道要把它转换成16进制度, 14的16进制是E,所以应该显示: DX=000E
然而,我发现显示的竟然是: DX=0014
其实在这样的汇编程序里,所有的数字都是十六进制的,
上面的11是十六进制的11,3也是十六进制的3,
所以如果用十进制来算:十六进制的11用10进制来表示是17,
17+3=20,然后把20转换成十六进制是14,
当然也可以直接做十六进制的加法:
11
+ 3
--------
14
只要记住是逢16进1就行了,如十六进制的17+5:
17
+ 5
--------
1C
9 debug.exe的命令符
看一下:
步骤1:输入: aa0
步骤2:回车
步骤3:输入: mov dx,11
步骤4:回车
步骤5:输入: add dx,3
步骤6:回车
步骤7:回车
步骤8:输入: t=a0
步骤9:回车
步骤10:输入: t
步骤11: 回车
上面的11个步骤里,哪些是汇编代码呢?
汇编代码只有两行:
mov dx,11
add dx,3
那aa0和t是作什么用的?
aa0和t是debug.exe的两个命令符
想必大家对DOS命令不陌生吧,比如: ping 127.0.0.1
这就是一个大家再熟悉不过的ping命令符,它接了一个IP地址参数,
当然你还可以接其他的参数, 如: ping 127.0.0.1
a是debug.exe的命令符,a的作用就是进入汇编编辑状态,aa0后面的a0
是a的参数,你可以写成a a0或者a a0,和aa0是同一个意思,
那这个参数a0是什么意思呢?
当输入aa0回车后,看到下一行显示:
0B08:00A0
一个冒号隔开两个十六进制的数,前面那个可能不是0B08,不同的计算机
可能不同,但后面的一定是00A0,00A0就是参数a0,
你可以在打开debug.exe后输入: a100 ,就会看到:
0B08:0100
那t这个命令拿来作什么的?
当执行完步骤7后,结束了汇编指令编辑,回到了debug.exe的命令符状态, 编辑汇编指令就好比绘制工程蓝图,而t 就是把工程蓝图交给施工队去施工, t=a0,那=a0是什么意思,t这个命令可以接参数,等号后面的a0就是参数,
表示从地址a0开始执行, 那地址a0在哪里呢?
0B08:00A0
地址a0就是冒号后面的00A0,
你看看00A0 后面的是什么汇编指令:
0B08:00A0 mov dx,11
00A0后面的指令是mov dx,11
所以就从mov dx,11开始执行,
但是得明白t 是单步执行的, 单步的意思是每次只执行一条汇编指令,
所以输入t=a0 并回车后,计算机就执行mov dx,11
执行完这条指令后就停止了,
接着你再输入t 然后回车, 计算机就执行下一条汇编指令add dx,3 就这么简单
10 测试
上面学了debug.exe 的两个命令符a 和t
还学了两个汇编指令mov 和add
这四个东西可以组合成几百几千、无数种用法,你们尽量多测试,
测试不同的用法,也可以试些奇怪的用法,如ta0 命令符...
11 负数
1.运行下面汇编指令:
mov dx,8
add dx,-4
运行结果显示: DX=00004
这样写够简单了,没什么疑问吧。