汇编程序的编写及调试.doc

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编程序的编写及调试

汇编程序的编写及调试 [原创]汇编程序的编写及调试 文章标题:[原创]汇编程序的编写及调试顶部 kvew 发布于:2006-05-0301:40 [楼主][原创]汇编程序的编写及调试 文章作者:kvew 信息来源:邪恶八进制信息安全团队() 注意:本文首发安全矩阵(/bbs)后由原创作者友情提交到邪恶八进制信息安全团队 最近刚刚接触汇编,写的程序也很简单,诸如经典的入门程序helloworld,简单的两数相加等。今天试着写了个排序的程序,对于各位大虾肯定是不值一提了,在这里也只是记录一下个人编写和使用debug调试汇编程序的过程。文中出现的错误对于汇编初学者也算是常见的错误了。 对于初学汇编的朋友来说,如果稍有其他程序设计背景,对汇编指令的用法应该是很容易入门的。本文题目为《汇编程序的编写与调试》,其实主要还是介绍一下如何使用debug这个工具进行调试,在调试的过程中提及一下编写汇编程序应该注意的地方。好了,闲话少说,看看最初的程序: 首先介绍一下程序的思路:比较相邻两个数的大小,前一个比后一个大,则交换位置,这样把最大的放到最后,然后把第二大的放到倒数第二的位置,这样一直下来,就把整个数组按从小到大的顺序排列好了。 程序本身不值得一提,仅仅借此描述下如何使用debug进行调试 -------------------------------------------------------------------- DATASEGMENT X DB5,1,3 DATA ENDS --------------------- STACK SEGMENT STACK DB100DUP(?) STACK ENDS --------------------- CODE SEGMENT ASSUMECS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVCX,2 ;X中只有3个数,外部循环2次 LEADI,X MOVSI,DI ;DI为X第一个元素地址 ADDSI,1 ;SI+1为第二个元素地址 PUSHSI ;保存这两个地址,外部第二轮循环同样是从开始比较 PUSHDI LP: MOVBX,CX ;BX控制内部循环次数 LP1: MOVAX,DI CMPAX,SI ;比较DI和SI指向的元素的大小 JL LP2 ;DI指的数比SI小,跳到L4 XCHGAX,SI ;比SI大,交换它们中的内容 XCHGAX,DI DECBX ;比过一次后,BX减1 CMPBX,0 JZ LP3 ;如果BX为0了,说明内部的循环结束 MOVDI,SI ;如果BX不为0,SI和DI都移向下一个元素 ADDSI,1 JMPLP1 ;跳到前面继续比较 LP2: DEC BX CMP BX,0 JZ LP3 ADD SI,1 ADD DI,1 JMP LP1 LP3: POP DI ;取出先前保存的首地址,进行下一次外部循环 POP SI LOOPLP MOV AH,2 ;准备打印结果 MOV CX,3 LEA BX,X ;把X的地址取出来,放到BX寄存器中 LP4: MOV DL,BX ;这个循环用来打印出结果 INT 21H INC BX LOOPLP4 MOVAH,4CH INT21H CODE ENDS END START ------------------------------------------------------------------------ 好,保存为px.asm,然后masmpx.asm,看看出现什么情况: 有一个warningerrors px.asm(65):warningA4031:Operandtypesmustmatch 在程序的第65行,操作数的类型不匹配,也就是这句 LP4: MOV DL,BX 很显然,BX是个16位的寄存器,而DL是个8位寄存器,显然这个操作是非法的,汇编中要求源操作数和目的操作数的类型一定要匹配,当然在后面的学习中会有不匹配的使用场合,这里就不涉及了。那么怎么改呢,把BX改成BL吗?显然不是,这里的意思是将BX保存的地址(X的地址)中的数送到DL中,这是个间接寻址方式,应该写为 LP4: MOVDL,[BX] 好了,我们再masmpx.asm,提示没有错误没有警告,顺利生成了盼望已久的.exe文件,运行看看结果对不对,怎么打印的是梅花笑脸和心型图案呢?有问题,那就拿出我们的工具debug吧

文档评论(0)

f8r9t5c + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档