有人如何读懂汇编语言或者Debug吗

 上传我的文档
 下载
 收藏
粉丝量:14
该文档贡献者很忙,什么也没留下。
 下载此文档
汇编语言上机实验和Debug命令使用
下载积分:1000
内容提示:汇编语言上机实验和Debug命令使用
文档格式:DOC|
浏览次数:158|
上传日期: 09:13:17|
文档星级:
全文阅读已结束,如果下载本文需要使用
 1000 积分
下载此文档
该用户还上传了这些文档
汇编语言上机实验和Debug命令使用
关注微信公众号他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)汇编语言debug常用命令_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
汇编语言debug常用命令
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
还剩31页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢汇编语言调试DEBUG命令详解
汇编语言作为一道独特的风景,一直扮演着很重要的角色.我简单介绍下汇编语言调试程序DEBUG命令,要灵活运用还要靠自己不断的实践.
1、显示命令D
&&① D [地址]
&&② D [范围]
如不指定范围,一次显示8行&16个字节。
&&&&-D&&;默认段寄存器为DS,当前偏移地址
&&&&-D DS:100 / -D CS:200
&&&&-D 200:100
&&&&-D 200;200为偏移地址,默认段寄存器DS
&&&&-D DS:100 110/ -D 100 L 10
2.修改命令E
&&&&&&&① E 地址&&;从指定地址开始,修改(或连续修改)存储单元内容。DEBUG首先显示指定单元内容,如要修改,可输入新数据;空格键显示下一个单元内容并可修改,减号键显示上一个单元内容并可修改;如不修改,可直接按空格键或减号键;回车键结束命令。
&&&&&&&② E 地址 数据表;从指定的地址开始用数据表给定的数据修改存储单元。
&&&&-E DS:100 F3 &AB& 8D。
3.添充命令F
&&&&&&&F 范围 数据表;
&&&&将数据表写入指定范围的存储单元;数据个数多,忽略多出的数据,个数少,则重复使用数据表。
&&&&-F DS:0 L5 01,02,03,04,05
&&&&-F DS:0 L5 01 02 03 04 05(空格分隔)
&&&&-F DS:0 L5&&FF ;5个字节重复使用FF
4.显示修改寄存器命令R
&&&&&&&R;★显示所有寄存器和标志位状态;
&&&&&&&&&&&&&★显示当前CS:IP指向的指令。
&&&&&&&显示标志时使用的符号:
&&&&&&&标志&&&&&&&&&&&&&&&&&&&标志=1&&&&&&&&&标志=0
&&&&&&& OF&&&&&&&&&&&&&&&&&&&&&&OV&&&&&&&&&&&&&&&&NV
&&&&&&& DF&&&&&&&&&&&&&&&&&&&&&&DN&&&&&&&&&&&&&&&&UP
&&&&&&& IF&&&&&&&&&&&&&&&&&&&&&&&EI&&&&&&&&&&&&&&&&&&DI
&&&&&&& SF&&&&&&&&&&&&&&&&&&&&&&NG&&&&&&&&&&&&&&&&PL
&&&&&&& ZF&&&&&&&&&&&&&&&&&&&&&&ZR&&&&&&&&&&&&&&&&NZ
&&&&&&& AF&&&&&&&&&&&&&&&&&&&&&&AC&&&&&&&&&&&&&&&&NA
&&&&&&& PF&&&&&&&&&&&&&&&&&&&&&&PE&&&&&&&&&&&&&&&&&PO
&&&&&&& CF&&&&&&&&&&&&&&&&&&&&&&CY&&&&&&&&&&&&&&&&NC
5.汇编命令A
&&&&&&&A [地址];从指定的地址开始输入符号指令;如省略地址,则接着上一个A命令的最后一个单元开始;若第一次使用A命令省略地址,则从当前CS:IP开始(通常是CS:100)。
&&&&&&&注释:①在DEBUG下编写简单程序即使用A命令。
&&&&&&&②每条指令后要按回车。
&&&&&&&③不输入指令按回车,或按Ctrl+C结束汇编。
&&&&&&&④支持所有8086符号硬指令,伪指令只支持DB、DW,不支持各类符号名。
6.反汇编命令U
&&&&&&&① U [地址];从指定地址开始反汇编32个字节的机器指令;省略地址时,则接着上一个U命令的最后一个单元开始;若第一次使用U命令省略地址,则从当前CS:IP开始(通常是CS:100)。
&&&&&&&② U 范围;对指定范围的单元进行反汇编。
&&&&-U100
&&&&-U100L10
7.运行程序命令G
&&&&&&&① G;从CS:IP指向的指令开始执行程序,直到程序结束或遇到INT 3。
&&&&&&&② G=地址;从指定地址开始执行程序,直到程序结束或遇到INT 3。
&&&&&&&③ G 断点1[,断点2,&断点10];从CS:IP指向的指令开始执行程序,直到遇到断点。
&&&&&&&④G=地址&&断点1[,断点2,&断点10]
&&&&-G ;从CS:IP指向的指令开始执行程序。
&&&&-G=100 ;从指定地址开始执行程序。
&&&&-G=100 105 110 120
8.跟踪命令(单步执行命令)T
&&&&&&&① T;从当前IP开始执行一条指令。
&&&&&&&② T 数值;从当前IP开始执行多条指令。
&&&&&&&② T =地址;
&&&&&&&③ T =地址&&数值;
&&&&-T5 / -T=100&&&5
9.跟踪执行并跳过子程序命令P
&&&&&&&P [=地址] [数值];类似T命令,但跳过子程序和中断服务程序。
10.退出DEBUG命令Q
&&&&&&&Q;返回DOS环境。
11.命名命令N
&&&&&&&N 文件标示符;指定文件,以便用W命令在磁盘上生成该文件,或者用L命令从磁盘装入该文件。
&&&&&&&-N&&MY_PRO.COM
&&&&&&&&写盘:在当前盘当前目录生成指定文件。
&&&&&&&&读盘:在当前盘当前目录读取指定文件。
&&&&- N A:\ USER \ MY_PRO.COM
12.装入命令L
&&&&&&&① L [地址];装入N命令指定的文件,默认的内存地址为CS:100。
&&&&&&&&&&-N&&MY_PRO.COM
&&&&&&&&&&-L
&&&&&&&② L 地址 驱动器号 扇区号 扇区数;将某驱动器的若干扇区(最多80H个)装入内存;
&&&&&&&&&&0=A,1=B,2=C&&;默认的段地址为CS。
&&&&&&&&&-L DS:200&&2&&0&&1
13.写盘命令W
&&&&&&&① W [地址];将指定地址开始的内存数据写入磁盘,生成N命令指定的文件;默认的内存地址为
CS:100;写盘的字节数由BX(高位字)和CX(低位字)决定,可执行程序写盘时,文件扩展名应指定.COM。
&&&&&&&&&-N&&MY_PRO.COM
&&&&&&&&&-W
&&&&&&&② W 地址 驱动器号 扇区号 扇区数;将内存数据写入磁盘的若干扇区(最多80H);默认的段地址为CS。
&&&&&-W&&DS:0&&2&&0&&1
&&&&注释:写磁盘扇区要慎用
14.其他命令
&&&&&&&(1)比较命令C
&&&&&&&&&C 范围 地址;将指定范围内的内容与以指定地址为起点的内容相比较。
&&&&&&&(2)16进制数计算命令H
&&&&&&&&&H 数1,数2(H 数1 数2);同时计算两个数字的和与差。
&&&&&&&(3)查找命令S
&&&&&&&&&S 范围 数据;在指定范围内查找指定数据。
&&&&&&& (4)输入命令I
&&&&&&&&&I 端口地址;输入一个字节并显示。
&&&&&&&&(5)输出命令O
&&&&&&&&&O 端口地址 字节数据;输出到指定的端口。
&&&&&&&(6)传送命令M
&&&&&&&&&M 范围 地址;将指定范围的内容传送到以指定地址为起点的存储单元。
&&最后修改于
请各位遵纪守法并注意语言文明在Windows下使用debug练习汇编编程 - 为程序员服务
在Windows下使用debug练习汇编编程
最近在学《微机原理》这门课,老师在课上讲了一大堆的汇编指令,听着脑袋都是晕的。如果能够实际的运行一下这些代码,或许对于理解这些指令有些帮助。有些同学可能也知道,使用C语言编程,需要一个编译器,不同平台的C语言都有不同的编译器,那么练习汇编的程序是不是也要去下载一个汇编器呢?确实,Windows平台下也有好几种汇编器:Borland公司的TASM,Microsoft公司的MASM,还有开源的NASM,不过,这些汇编器都有自带的一些伪指令和汇编程序的格式,如果一开始就使用他们,可能无法专注于汇编指令的学习,还要去学习怎么使用不同的汇编器。
其实,Windows平台下自带了一个简单的汇编器——debug。本来,debug是程序员用来除错的,不过,它也可以汇编一些简单的汇编指令。使用它可以完全不用考虑宏汇编的一些伪指令,专注于汇编指令的执行。
debug的用法
debug是一个命令行程序,所以我们必须在命令提示符下使用,首先打开命令提示符(我一般使用运行命令输入cmd就可以了,你也可以进入开始菜单-附件-命令提示符 来运行它。)
(我以Windows XP为例,Win7 下面也是类似的)
输入 debug 回车
这时,你可以看到一个以-开头的提示符,光标在这里闪,你可以输入一些 debug的命令了。
常用的debug命令
直接敲入?号,可以查看debug的帮助,提供了一些可用命令的列表。
a后面接地址,也就是说从地址addr处开始汇编一段小代码,如果不接地址,默认是汇编到 CS:0100这个地址,COM文件规定,必须从0100开始。
显示单个寄存器或多个寄存器的内容,并提供修改的功能。例如:我输入r bx 就可以读出当前bx的内容,然后它会给一个:提示符,你可以输入新的值,或者是直接回车不修改内容。 如果reg为空则显示所有寄存器的内容和当前CS:IP地址处的汇编代码。
退出,退出debug。
u startaddr endaddr
反汇编指令,反汇编从startaddr到 endaddr的代码。
执行程序,后面可以加地址,就可以单步执行,如果没有接任何数,则是从 CS:IP 开始执行。
上面讲的是一些用的比较多的debug命令,更多的可以查找debug的帮助。
开始用 debug 写汇编程序。
进入debug的提示符后,我们可以直接输入a命令,开始写我们的代码。
从图中 可以看到 前面的数字就是你当前指令的地址CS:IP。
我们输入下面这段程序看看:
mov ah, 02
运行结果如上图,打印出了一个笑脸。上面的代码是什么意思呢?下面 我一行一行的解释。
mov ah, 02 将02 送到 ah,这里是为了调用后面的int 21的中断程序,02是DOS系统里面的打印函数的功能号,你只要知道这句是调用打印函数就可以了。
将1 送到 dl寄存器,这个寄存器所存的数值将被打印出来。你将字符的ASCII码值送入dl,调用int 21h之后,这个字符就能打印出来了。
有一点要注意,debug里面的数字都是16进制的,但是在这里不要加h的后缀。
int 21h 调用DOS系统的21号中断,这里的h后缀可加可不加。
返回DOS系统。这句在debug的环境里可加可不加。
下面,再来写一个打印出所有ASCII码的小程序,代码如下图:
大家可以自己运行看看结果。
我们还可以把它保存成一个.com的可执行文件。
首先使用debug 的name命令,将文件命名为ascii.com:(下面命令前面的短横代表debug里面的提示符,不必输入)
- n ascii.com
然后修改cx寄存器的值,这个寄存器里的值要修改为上面那个程序的大小,怎么看那个程序的大小呢? 看前面的地址,是从CS:0100到CS:010F可知,程序的大小为FH 个字节,于是输入以下代码:
修改之后,使用w命令保存文件:
执行后会显示Writing 0000F bytes 。在debug运行的目录下就会出现一个ascii.com文件,以后只要把它复制到其他地方执行,就能打印出所有ASCII码值了。
使用debug 练习书上的示例指令
下面用一个指令的示例来讲讲如果使用debug 练习这个指令。
XCHG dest, src
交换指令可以实现字节的交换,也可以实现字的交换。代码实例如下:
mov ax, 52
mov bx, 41
xchg ax, bx
接下 我们可以使用debug的r读取 ax和 bx的值
接着使用g 单步运行:
单步运行过程中会打印出所有寄存器的值,你可以发现寄存器值的变化。
看了上面的之后,我相信你应该能使用debug练习各个8086汇编指令的运行,观察各种指令运行后的结果了。注意的是,debug里面只能直接执行8086的指令,无法使用宏汇编、伪代码。而且也只支持写一些简单的.com文件,学到后面还是要使用各种宏汇编器(比如MASM、NASM .etc)。使用宏汇编器则需要了解那个汇编器特有的语法,如果定义段,如何定义宏,什么的。这些不同的汇编器都有不同的规定,而8086指令都是一样的(如果你是用Intel的语法,实际上在Linux系统中,8086经常使用一种AT&T的语法,与Intel的稍有不同)。
最近在学《微机原理》这门课,老师在课上讲了一大堆的汇编指令,听着脑袋都是晕的。如果能够实际的运行一下这些代码,或许对于理解这些指令有些帮助。有些同学可能也知道,使用C语言编程,需要一个编译器,不同平台的C语言都有不同的编译器,那么练习汇编的程序是不是也要去下载一个汇编器呢?确实,Windows平台下也有好几种汇编器:Borland公司的TASM,Microsoft公司的MASM,还有开源的NASM,不过,这些汇编器都有自带的一些伪指令和汇编程序的格式,如果一开始就使用他们,可能无法专注于汇编指令的学习,还要去学习怎么使用不同的汇编器。
其实,Windows平台下自带了一个简单的汇编器——debug。本来,debug是程序员用来除错的,不过,它也可以汇编一些简单的汇编指令。使用它可以完全不用考虑宏汇编的一些伪指令,专注于汇编指令的执行。
debug的用法
debug是一个命令行程序,所以我们必须在命令提示符下使用,首先打开命令提示符(我一般使用运行命令输入cmd就可以了,你也可以进入开始菜单-附件-命令提示符 来运行它。)
(我以Windows XP为例,Win7 下面也是类似的)
输入 debug 回车
这时,你可以看到一个以-开头的提示符,光标在这里闪,你可以输入一些 debug的命令了。
常用的debug命令
直接敲入?号,可以查看debug的帮助,提供了一些可用命令的列表。
a后面接地址,也就是说从地址addr处开始汇编一段小代码,如果不接地址,默认是汇编到 CS:0100这个地址,COM文件规定,必须从0100开始。
显示单个寄存器或多个寄存器的内容,并提供修改的功能。例如:我输入r bx 就可以读出当前bx的内容,然后它会给一个:提示符,你可以输入新的值,或者是直接回车不修改内容。 如果reg为空则显示所有寄存器的内容和当前CS:IP地址处的汇编代码。
退出,退出debug。
u startaddr endaddr
反汇编指令,反汇编从startaddr到 endaddr的代码。
执行程序,后面可以加地址,就可以单步执行,如果没有接任何数,则是从 CS:IP 开始执行。
上面讲的是一些用的比较多的debug命令,更多的可以查找debug的帮助。
开始用 debug 写汇编程序。
进入debug的提示符后,我们可以直接输入a命令,开始写我们的代码。
从图中 可以看到 前面的数字就是你当前指令的地址CS:IP。
我们输入下面这段程序看看:
mov ah, 02
运行结果如上图,打印出了一个笑脸。上面的代码是什么意思呢?下面 我一行一行的解释。
mov ah, 02 将02 送到 ah,这里是为了调用后面的int 21的中断程序,02是DOS系统里面的打印函数的功能号,你只要知道这句是调用打印函数就可以了。
将1 送到 dl寄存器,这个寄存器所存的数值将被打印出来。你将字符的ASCII码值送入dl,调用int 21h之后,这个字符就能打印出来了。
有一点要注意,debug里面的数字都是16进制的,但是在这里不要加h的后缀。
int 21h 调用DOS系统的21号中断,这里的h后缀可加可不加。
返回DOS系统。这句在debug的环境里可加可不加。
下面,再来写一个打印出所有ASCII码的小程序,代码如下图:
大家可以自己运行看看结果。
我们还可以把它保存成一个.com的可执行文件。
首先使用debug 的name命令,将文件命名为ascii.com:(下面命令前面的短横代表debug里面的提示符,不必输入)
- n ascii.com
然后修改cx寄存器的值,这个寄存器里的值要修改为上面那个程序的大小,怎么看那个程序的大小呢? 看前面的地址,是从CS:0100到CS:010F可知,程序的大小为FH 个字节,于是输入以下代码:
修改之后,使用w命令保存文件:
执行后会显示Writing 0000F bytes 。在debug运行的目录下就会出现一个ascii.com文件,以后只要把它复制到其他地方执行,就能打印出所有ASCII码值了。
使用debug 练习书上的示例指令
下面用一个指令的示例来讲讲如果使用debug 练习这个指令。
XCHG dest, src
交换指令可以实现字节的交换,也可以实现字的交换。代码实例如下:
mov ax, 52
mov bx, 41
xchg ax, bx
接下 我们可以使用debug的r读取 ax和 bx的值
接着使用g 单步运行:
单步运行过程中会打印出所有寄存器的值,你可以发现寄存器值的变化。
看了上面的之后,我相信你应该能使用debug练习各个8086汇编指令的运行,观察各种指令运行后的结果了。注意的是,debug里面只能直接执行8086的指令,无法使用宏汇编、伪代码。而且也只支持写一些简单的.com文件,学到后面还是要使用各种宏汇编器(比如MASM、NASM .etc)。使用宏汇编器则需要了解那个汇编器特有的语法,如果定义段,如何定义宏,什么的。这些不同的汇编器都有不同的规定,而8086指令都是一样的(如果你是用Intel的语法,实际上在Linux系统中,8086经常使用一种AT&T的语法,与Intel的稍有不同)。
原文地址:, 感谢原作者分享。
您可能感兴趣的代码}

我要回帖

更多关于 如何读懂别人的汇编 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信