第4章 用debug编写汇编程序08
- 格式:ppt
- 大小:223.50 KB
- 文档页数:31


教程--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回车输入: t3. 你必须按我所说的去做,当然如果你很厉害可以不那样做, 我给那些操作编个号:步骤1:输入: aa0步骤2:回车步骤3:输入: mov dx,2步骤4:回车步骤5:输入: add dx,3步骤6:回车步骤7:回车步骤8:输入: t=a0步骤9:回车步骤10:输入: t要注意步骤6和步骤7都是回车,就是连着回了两次车,现在来看一下屏幕信息,你们对照一下,看对不对:-aa00B08:00A0 mov dx,20B08:00A3 add dx,30B08:00A6-t=a0AX=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-tAX=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=000F000F是十六进制的,十六进制的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--------1C9 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,11add dx,3那aa0和t是作什么用的?aa0和t是debug.exe的两个命令符想必大家对DOS命令不陌生吧,比如: ping 127.0.0.1这就是一个大家再熟悉不过的ping命令符,它接了一个IP地址参数,当然你还可以接其他的参数, 如: ping 127.0.0.1a是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,1100A0后面的指令是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,8add dx,-4运行结果显示: DX=00004这样写够简单了,没什么疑问吧。
汇编实验报告(-)调试程序DEBUG的使用《汇编语言程序设计》实验报告实验一调试程序DEBUG 的使用一、实验目的通过实验掌握下列知识:1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。
二、内容及步骤1.DEBUG 命令使用表 1.1 DEBUG命令****命令的使用中注意:****①字母不分大小写;②②只使用16 进制数,没有后缀字母;③分隔符(空格或逗号)只在两个数值之间是必须的,命令和参数间可无分隔符;④每个命令只有按了回车键后才有效,可以用Ctrl+Break中止命令的执行;⑤命令如果不符合Debug 的规则,则将以“error”提示,并用“^”指示错误位置。
许多命令的参数是主存逻辑地址,形式是“段基地址: 偏移地址”。
其中,段基地址可以是段寄存器或数值;偏移地址是数值。
如果不输入段地址,则采用默认值,可以是缺省段寄存器值。
如果没有提供偏移地址,则通常就是当前偏移地址。
1、开机后,切换到命令提示符窗口下,出现提示符后键入命令DEBUG, 进入调试环境,显示提示符 '- '。
2、用命令 F 200 220 'AB' 将'AB'的两个ASCII码循环填入内存。
注:第一个参数200是当前段的起始偏移地址,第二个参数220是终了偏移地址,第三个参数‘AB’是被填入的数值,若不给出第二个参数则填入128(8行)个字节。
3、用命令 D200 观察内存中的十六进制码及屏幕右边的ASCII字符。
图1-1 Fill、Dump命令调用对主存操作的命令还支持地址范围这种参数,它的形式是:“开始地址结束地址”(结束地址不能具有段地址),或者是:“开始地址L 字节长度”。
D(Dump)命令显示主存单元的内容,它的格式如下(分号后的部分用于解释命令功能,不是命令本身):D [地址] ;显示当前或指定开始地址的主存内容D [范围] ;显示指定范围的主存内容图1-2 D命令调用左边部分是主存逻辑地址,中间是连续16 个字节的主存内容(16进制数,以字节为单位),右边部分是这16个字节内容的ASCII字符显示,不可显示字符用点“.”表示。
实验预备知识汇编程序的建立与调试一、汇编程序的建立1. 使用工具(1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文件;(2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件-目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表;(3)Link连接程序,对使用的目标文件和库文件进行连接,生成.exe文件,同时调试用.map-地址映像文件;如果源程序无语法错误,上述三步将生成可运行的.exe文件,如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存在错误,需要进行调试。
(4)Debug调试程序,对.exe文件进行调试,修改,直到程序正确。
图3 目标程序生成步骤图2. 编程过程(1)用文本编辑软件,编写扩展名为.asm的源文程序文件。
(2)用汇编程序对编好的源文件进行汇编。
命令行:masm [*.asm] ↙如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。
使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。
*.obj-目标文件,用于连接生成可执行文件;*.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于调试;*.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。
(3)目标文件的连接命令行:link [*.obj] [*.obj] [*.lib] ↙连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。
*.map-地址映像文件,给出内存地址分配的有关信息。
下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe文件。
⼿把⼿教你汇编Debug关于汇编的第⼀篇⽂章:Hello⼤家好,我是程序员cxuan!我们上篇⽂章了解了⼀下基本的寄存器,这篇⽂章我们来进⾏实际操作⼀下。
原⽂链接:我们以后将会⽤到很多 Debug 命令,这⾥我们先来熟悉⼀下它们。
Debug 是什么Debug 是 Windows / Dos 操作系统提供的⼀种功能。
使⽤ Debug 能让我们⽅便查看 CPU 各种寄存器的值、内存情况,⽅便我们调试指令、跟踪程序的运⾏过程。
接下来我们会⽤到很多 debug 命令,但是使⽤这些命令的前提是,你需要在电脑上安装⼀下 debug,Windows/Mac 都可以安装,获取链接我已经给你找出来了。
阿,忘记说了,我们这⾥使⽤的是Dos box来模拟汇编的操作环境。
传送门(Mac 和 Windows 都是):下载完成后打开 DosBox ,打开之后是这样的。
此时我们输⼊ debug 命令应该提⽰的是因为我们还没有进⾏连接和挂载,此时我们执⾏mount c D:\debug执⾏这条命令时,你需要现在 D 盘下创建⼀个 debug ⽂件夹,然后我们挂载到 debug 下⾯。
并且执⾏C:切换到 C 盘路径下。
此时我们就可以执⾏ debug 命令了。
这⾥需要注意⼀点,我在 Windows 10 系统下搭建 Debug 环境时,在挂载完成后输⼊ debug ,还是提⽰Illegal command:debug,此时你需要再下载⼀个debug.exe ,贴⼼的我也把下载地址给你了。
下载地址:密码:3akd需要下载⾥⾯的debug.exe,然后把它放在你挂载的路径下,这⾥我挂载的路径时 D 盘下的 debug ⽂件夹。
放置完成之后,再输⼊ debug 就可以了。
因为每次打开 Dosbox 都会执⾏上⾯这些命令,真的好烦,那怎么办呢?⼀个简单的办法是在 Dosbox 安装路径下找到打开之后,在末尾键⼊就 OK 了,下次直接打开 Dosbox ,会默认执⾏这三条命令,⾄此,就是我搭建 Dosbox 遇到的所有问题了。