- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)