- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
宏汇编程序设计(汇编语言的调试运行)
下面介绍两种方法来建立一个汇编语言源程序并且经过编译连接、调试运行。编译程序选择微软的 MASM 5.0。该汇编编译程序是DOS下的老牌编译工具。一、命令行方式:1、源程序的建立???可以使用任何一种文本编辑器(如记事本、写字板等,在DOS下可以使用EDIT来编辑)。在保存文件时不要忘了汇编语言源程序的扩展名应为 .asm。???例:打开上面所说的任何一种文本编辑器,输入下面的汇编代码:?????? (这是一个两数相加的程序,把 BUF 中的10与20相加)??????CODE?? SEGMENT??????????????? ASSUME???CS:CODE, DS:CODE???????????? ORG???100H??????START:???JMP??? BEGIN??????BUF??????DB???? 10,20,???????BEGIN:???PUSH???CS???????????????POP??? DS???????????????MOV??? AL,BUF???????????????ADD????AL,BUF+1???????????????MOV????BUF+2,AL???????????????MOV??? AH,4CH???????????????INT??? 21H??????CODE?????ENDS???????????????END??? START?? 输入完了,把它保存到编译程序masm目录下,如masm在D:盘,这个源文件名为 add.asm,那么就把add.asm保存到D:\masm 目录下。2、编译?? 这一步是对汇编源程序 add.asm进行编译。?? 在DOS状态的提示符d:\masm 下键入? masm add.asm 编译程序就会出现各种提示,然后进行编译,如下所示:?? ( 在出现的每一个提示后回车 )
?? 图中所示 Object filename 是二进制目标文件,Source listing 是列表文件,Cross-reference 是交叉引用文件。由于在提示符后直接回车,所以只产生了一个文件:add.obj(二进制目标文件), 而没有产生NUL.lst(列表文件)和 NUL.crf(交叉引用文件)。对于这几个文件,以后会讲,现在暂时不管它。?? 其中的add.obj将用于连接后生成可执行文件。?? 当源程序正确没有错误时,会出现 0 Warning Error?? 0 Server Error 的信息,表示编译通过。否则,还需要根据提示的错误信息,找出错误后再进行编译。3、连接?? 对生成的二进制目标文件进行连接后可以生成运行文件 add.exe?? 连接操作如下:?? 在DOS的 d:\masm 下键入 link add.obj,出现如下提示:?? ( 在出现的每一个提示后按回车)??
?? 这时生成了add.exe文件。对于出现的 LINK: warning L4021: no stack segment 的提示,意思是没有定义堆栈段,可以不管它。4、调试?? 对于每一个程序,虽然编译连接通过,但是并不能保证在运行时没有逻辑错误或者其它的运行时错误。这时就需要通过调试手段来排除这些错误。在DOS命令行下,可以用Debug来调试。如果会熟练使用Debug调试程序,对于汇编程序的调试是有很大帮助的。(对于Debug的详细用法,以后会讲)?? 在DOS状态下,键入 Debug add.exe 进入Debug 状态,并对add.exe进行调试。如下:??
?? 回车后出现了一个闪动的 ‘-’符号,在这个符号后面可以键入各种Debug命令。?? 键入 U命令( U是反汇编 ,键入这个命令后可以看到add.exe的汇编代码),回车:
?? 可以看到在命令后面的第一条语句是 0B48:0100 EB04????????JMP???? 0106?? 这就是我们编写的汇编源程序里面的 JMP??? BEGIN?? 可以看到 BEGIN 这个符号经过编译后成了偏移地址 0106。下面对这条语句标识一下:? 0B48:????? 0100????? EB04????????JMP???? 0106?? ??? ↑??????? ↑??????? ↑????????????? ↑代码段地址? 偏移地址? 机器码???????? 汇编代码其中汇编代码? JMP 0106 翻译成机器码 就是 EB04。程序最后执行的都是机器码,这里是用十六进制表示的二进制机器码。?? 由图中我们看到只有一条语句 即 JMP 0106 与先前写的源程序对应。而后面的语句是
原创力文档


文档评论(0)