好文档 - 专业文书写作范文服务资料分享网站

第四章汇编语言程序设计基础

天下 分享 时间: 加入收藏 我要投稿 点赞

┇ 2. END(END of assembly)汇编终止命令 汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有一条END命令,且位于程序的最后。 3.DB(Define Byte)定义字节命令 在程序存储器的连续单元中定义字节数据。 ORG 2000H DB 30H,40H,24,“C”,“B” 汇编后: (2000H)=30H (2001H)=40H (2002H)=18H(10进制数24) (2003H)=43H(字符“C”的ASCII码) (2004H)=42H(字符“B”的ASCII码) DB功能是从指定单元开始定义(存储)若干个字节,10进制数自然转换成16进制数,字母按ASCII码存储。 4.DW(Define Word)定义数据字命令 从指定的地址开始,在程序存储器的连续单元中定义16位的数据字。例如: ORG 2000H DW 1246H,7BH,10 汇编后: (2000H)=12H ;第1个字 (2001H)=46H (2002H)=00H ;第2个字 (2003H)=7BH (2004H)=00H ;第3个字(2005H)=0AH (2005H)=0AH 5.EQU(EQUate)赋值命令 用于给标号赋值。赋值以后,其标号值在整个程序有效。例如:

TEST EQU 2000H 表示标号TEST=2000H,在汇编时,凡是遇到标号TEST时,均以2000H来代替。 4.1.4 汇编语言程序设计步骤 (1)分析问题,确定算法 (2)根据算法,画出程序框图 (3)分配内存工作区及有关端口地址 (4)编写程序 养成在程序的适当位置上加上注释的好习惯。 (5)上机调试 编写完毕的程序,必须“汇编”成机器代码,才能调试和运行,调试与硬件有关程序还要借助于仿真开发工具并与硬件连接。 4.2 汇编语言源程序的汇编 汇编语言源程序 “翻译”成机器代码(指令代码)的过程称为“汇编”。汇编可分为手工汇编和机器汇编两类: 4.2.1 手工汇编 人工查表翻译指令。但遇到的相对转移指令的偏移量的计算,要根据转移的目标地址计算偏移量,不但麻烦,且容易出错。 4.2.2 机器汇编 用编辑软件进行源程序的编辑。编辑完成后,生成一个ASCII码文件,扩展名为“.ASM”。然后在微计算机上运行汇编程序,把汇编语言源程序翻译成机器代码。 交叉汇编—汇编后的机器代码是在另一台计算机(这里是单片机)上运行。 MCS-51单片机的应用程序的完成,应经过三个步骤; (1)在微计算机上,运行编辑程序进行源程序的输入 和编辑; (2)对源程序进行交叉汇编得到机器代码; (3)通过微计算机的串行口(或并行口)把机器代码传送到用户样机(或在线仿真器)进行程序的调试和运行。 第(1)步,只需在微计算机上使用通用的编辑软件即可完成。

第(2)步的交叉汇编所用的汇编程序可在购买单片机的仿真开发工具时,由厂商提供。 第(3)步骤的实现要借助于单片机仿真开发工具进行。 反汇编——分析现成产品的程序,要将二进制的机器代码语言程序翻译成汇编语言源程序。 例4-2 下面是一段源程序的汇编结果,读者可通过查第3章的表3-3至表3-7 ,进行手工汇编,来验证下面的汇编结果是否正确。 见表4-1(P75) 4.3 汇编语言实用程序设计 4.3.1 汇编语言程序的基本结构形式 常 顺采用以下几种基本结构:序结构、分支结构和循环结构,再加上广泛使用的子程序和中断服务子程序。 1.顺序结构 2.分支结构 程序中含有转移指令, 无条件分支,有条件分支。 有条件分支又分为:单分支结构和多分支结构。 3.循环结构 4.子程序 5.中断服务子程序 4.3.2 子程序的设计 一、子程序设计原则和应注意的问题 一种能完成某一特定任务的程序段。其资源要为所有调用程序共享。因此,子程序在结构上应具有独立性和通用性,在编写子程序时应注意以下问题: 1.子程序的第一条指令的地址称为子程序的入口地址。该指令前必须有标号。 2.主程序调用子程序 两条子程序调用指令:

(1)绝对调用指令:ACALL addr11 (2)长调用指令:LCALL addr16 3.注意设置堆栈指针和现场保护 4.最后一条指令必须是RET指令 5.子程序可以嵌套,即子程序可以调用子程序 6.在子程序调用时,还要注意参数传递的问题 二、 子程序的基本结构 MAIN: ┇ ;MAIN为主程序或调用程序标号 ┇ LCALL SUB ;调用子程序SUB ┇ ┇ SUB:PUSH PSW ;现场保护 ; PUSH ACC 子程序处理程序段 POP ACC ;现场恢复 POP PSW ; RET ;最后一条指令必须为RET 例4-3 单字节有符号数的加减法子程序(自己阅读) 本例中参数传递是通过累加器A完成的,主程序将被转换的数送到A中,子程序将A中的有符号数求补后存于A中,主程序再将结果放回原来的单元。 例4-4 4位BCD码的减法程序(自己阅读) 主程序通过地址寄存器R0和R1将参加运算的BCD码的地址传递给子程序,子程序则通过累加器将差传递给主程序。 4.3.3 查表程序设计 数据补偿、修正、计算、转换等各种功能,具有程序简单、执行速度快等优

点。 查表就是根据自变量x,在表格中寻找y,使y=f(x)。 执行查表指令时,发出读程序存储器选通脉冲/PSEN。在MCS-51的指令系统中,给用户提供了两条极为有用的查表指令: ⑴ MOVC A,@A+DPTR ⑵ MOVC A,@A+PC 指令“MOVC A,@A+DPTR”完成把A中的内容作为一个无符号数与DPTR中的内容相加,所得结果为某一程序 存储单元的地址,然后把该地址单元中的内容送到累加器A中。 指令“MOVC A,@A+PC”以PC作为基址寄存器,PC的内容和A的内容作为无符号数,相加后所得的数作为某一程序存储器单元的地址,根据地址取出程序存储器相应单元中的内容送到累加器A中。 指令执行完,PC的内容不发生变化,仍指向查表指令的下一条指令。优点在于预处理较少且不影响其它特殊功能寄存器的值,所以不必保护其它特殊功能寄存器的原先值。缺点在于该表格只能存放在这条指令的地址X3X2X1X0以下的00~FFH之中。表格所在的程序空间受到了限制。 例4-5 子程序的功能为:根据累加器A中的数x(0~9之间)查x的平方表y,根据x的值查出相应的平方y。x和y均为单字节数。 地 址 子程序 Y3Y2Y1Y0 ADD A,#01H Y3Y2Y1Y0+2 MOVC A,@A+PC Y3Y2Y1Y0+3 RET Y3Y2Y1Y0+4 DB 00H,01H,04H,09H,10H DB 19H,24H,31H,40H,51H 第1条指令 ADD A,#01H 的作用是加上偏移量,可以根据A的内容查出X对应的平方。 MOVC A,@+DPTR 这条指令的应用范围较为广泛,一般情况下,大多使用该指令,使用该指令时不必计算偏移量,使用该指令的优点是表格可以设在64K程序存储器空间内的任何地方,而不像 MOVC A,@A+PC那样只设在PC下面的256个单元中,使用较方便。

第四章汇编语言程序设计基础

┇2.END(ENDofassembly)汇编终止命令汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有一条END命令,且位于程序的最后。3.DB(DefineByte)定义字节命令在程序存储器的连续单元中定义字节数据。ORG2000HDB30H,40H,24,“C”,“B”汇编后:(200
推荐度:
点击下载文档文档为doc格式
1gdqm9md5q6j6mw9sjhs44p5c1cp2i00dxs
领取福利

微信扫码领取福利

微信扫码分享