![汇编语言及应用程序设计_第1页](http://file4.renrendoc.com/view/e44343e05d03f74c36415c172b9a74db/e44343e05d03f74c36415c172b9a74db1.gif)
![汇编语言及应用程序设计_第2页](http://file4.renrendoc.com/view/e44343e05d03f74c36415c172b9a74db/e44343e05d03f74c36415c172b9a74db2.gif)
![汇编语言及应用程序设计_第3页](http://file4.renrendoc.com/view/e44343e05d03f74c36415c172b9a74db/e44343e05d03f74c36415c172b9a74db3.gif)
![汇编语言及应用程序设计_第4页](http://file4.renrendoc.com/view/e44343e05d03f74c36415c172b9a74db/e44343e05d03f74c36415c172b9a74db4.gif)
![汇编语言及应用程序设计_第5页](http://file4.renrendoc.com/view/e44343e05d03f74c36415c172b9a74db/e44343e05d03f74c36415c172b9a74db5.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇编语言及应用程序设计第一页,共六十二页,2022年,8月28日
9.1伪指令
伪指令是对汇编过程起控制作用,但本身并没有对应的机器代码的指令。一、汇编起始指令ORG
指令格式为:ORGnn
该指令的作用是指明后面的程序或数据块的起始地址,它总是出现在每段源程序或数据块的开始。式中,nn为16位地址,汇编时nn确定了此语句后面第一条指令或第一个数据的地址,此后的源程序或数据块就依次连续存放在以后的地址内,直到遇到另一个ORG指令为止。第二页,共六十二页,2022年,8月28日例:ORG2000HMOVSP,#60HMOVR0,#2FHMOVR2,#0FFHORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址是2000H,即存储器地址目标程序
2000H7581602003H782F2005H7AFF注意:一般要求ORG定义空间地址由小到大,且地址不能重叠。第三页,共六十二页,2022年,8月28日
二、定义字节指令DB
指令格式:
<标号:>DB<项或项表>其中:项或项表是指一个字节,数或字符串,或以引括起来的ASCII码字符串(一个字符用ASCII
码表示,就相当于一个字节)。功能:把项或项表的数值(字符则用它的ASCII码)存入从标号开始的连续单元中。第四页,共六十二页,2022年,8月28日例:ORG1000HSEG1:DB53H,74H,78H,‘1’,‘2’SEG2:DB23H,‘DAY’END则:(1000H)=53H
(1001H)=74H
(1002H)=78H
(1003H)=31H数字1的ASCII码(1004H)=32H数字2的ASCII码(1005H)=23H
(1006H)=34H
(1007H)=41H‘DAY’的ASCII码(1008H)=59H
第五页,共六十二页,2022年,8月28日
三、定义字指令DW
指令格式:
<标号:>DW<项或项表>其中:
DW的基本含义与DB相同,但DB一般用于定
8位数据(一个字节),而DW则定义16位数据,即一个字(规定为两个字节,即一个字为
16位二进制数)。注意:在执行汇编程序时,机器会自动按高位字节在前,低位字节在后的格式排列(与程序中的地址规定一致),DW伪指令常用来建立地址表。第六页,共六十二页,2022年,8月28日四、预留存储区DS
指令格式:
<标号:>DS<表达式>功能:由标号指定单元开始,定义一个存储区,以备源程序使用,存储区预留的存储单元数由表达式的值决定。例如:ORG3C40HTEMP:DS10
即由3C40H地址开始保留连续的10个存储单元的存储区。
第七页,共六十二页,2022年,8月28日
五、标号指令EQU
指令格式:
<标号:>EQUnn或表达式
功能:将语句操作数的值赋予本语句的标号,故又称为等值指令。注意:由EQU等值的字符名称必须先赋值后使用,且在同一程序中,用EQU伪指令对标号赋值后,该标号的值在整个程序中不能改变。
第八页,共六十二页,2022年,8月28日例:PA8155EQU8001H
即给标号PA8155赋值为8001H。使用等值指令可给程序的编制、调试、修改带来方便,如果在程序中要多次使用到某一地址,由
EQU指令将其赋值给一个字符名称,一旦需要对其进行变动,只要改变EQU命令后面的数字即可,而不需要对程序中涉及到该地址的所有指令逐句进行修改。第九页,共六十二页,2022年,8月28日
六、源程序结束END
指令格式:
<标号:>END<表达式>
功能:是一个结束语句,告诉汇编程序段已结束注意:该语句必须放在整个程序(包括伪指令)之后,若END语句出现在代码块中间,则汇编语言将不汇编END后面的语句。
第十页,共六十二页,2022年,8月28日9.2汇编语言源程序的汇编过程自动编排目标程序中的指令存放地址把源程序翻译成机器码分析源程序语法,若出错,给出错误信息输出目标程序及源程序文件列表第十一页,共六十二页,2022年,8月28日
9.3MCS-51汇编语言使用程序举例9.3.1简单程序设计9.3.2分支程序设计9.3.3运算程序设计9.3.4循环程序设计9.3.5代码转换程序设计9.3.6逻辑操作程序设计9.3.7查表程序设计
第十二页,共六十二页,2022年,8月28日9.3.1简单程序设计
例1两个无符号双字节数相加。
设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入
40H和41H单元中。第十三页,共六十二页,2022年,8月28日程序如下:START:CLRC;将Cy清零
MOVR0,#41H;将被加数地址送数据指针R0MOVR1,#51H;将加数地址送数据指针R1AD1:MOVA,@R0;被加数低字节的内容送入AADDA,@R1;两个低字节相加
MOV@R0,A;低字节的和存入被加数低字
DECR0;指向被加数高位字节
DECR1;指向加数高位字节
MOVA,@R0;被加数高位字节送入AADDCA,@R1;两个高位字节带Cy相加
MOV@R0,A;高位字节的和送被加数高位字
RET第十四页,共六十二页,2022年,8月28日
例2将两个半字节数合并成一个一字节数。设内部RAM40H#,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中。第十五页,共六十二页,2022年,8月28日程序如下:START:MOVR1,#40H;设置R1为数据指针MOVA,@R1;取出第一个单元中的内容ANLA,#0FH;取第一个数的低半字节SWAPA ;移至高半字节INCR1;修改数据指针XCHA,@R1;取第二个单元中的内容ANLA,#0FH;取第二个数的低半字节ORLA,@R1;拼字MOV50H,A;存放结果RET第十六页,共六十二页,2022年,8月28日9.3.2分支程序设计图9.1分支结构框图(a)单分支流程;(b)多分支流程
第十七页,共六十二页,2022年,8月28日例3x,y均为8位二进制数,设x存入R0,y存入R1,求解:y=syn(x)图9.2第十八页,共六十二页,2022年,8月28日程序如下:
START:CJNER0,#00H,SUL1;R0中的数与00比较不等转移
MOVR1,#00H;相等,R1←0SJMPSUL2SUL1:JCNEG;两数不等,若(R0)<0,转向NEGMOVR1,#01H;(R0)>0,则R1←01HSJMPSUL2NEG:MOVR1,#0FFH;(R0)<0,则R1←0FFHSUL2:RET第十九页,共六十二页,2022年,8月28日例4比较两个无符号数的大小。设外部RAM的存储单元ST1和ST2中存放两个不带符号的二进制数,找出其中的大数存入外部RAM中的ST3单元中。
图9.3第二十页,共六十二页,2022年,8月28日程序如下: ORG1000HST1 EQU2000HST2EQU2100HST3EQU2200HSTART:CLRC ;清零Cy MOVDPTR,#ST1;第一个数的指针MOVXA,@DPTR;取第一个数MOVR2,A;保存MOVDPTR,#ST2;第二个数的指针MOVXA,@DPTR;取第二个数CLRC第二十一页,共六十二页,2022年,8月28日SUBBA,R2;两数比较JNCBIG2;若第二个数大,则转XCHA,R2;第一个数大BIG1:MOVDPTR,#ST3MOVX@DPTR,A;存大数RETBIG2:MOVXA,@DPTR;第二个数大SJMPBIG1RET第二十二页,共六十二页,2022年,8月28日9.3.3运算程序设计一、加、减法程序例5将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减(假设被减数大于减数)。设被减数指针为R0,减数指针为R1,差数放回被减数单元,R5存放字节个数,则程序如下:
第二十三页,共六十二页,2022年,8月28日SUB:MOVR0,#40H MOVR1,#50H MOVR5,#10 CLRCSUB1:MOVA,@R0 SUBBA,@R1 MOV@R0,A INCR0 INCR1 DJNZR5,SUB1 RET第二十四页,共六十二页,2022年,8月28日二、乘法运算程序
在计算机中,常将乘法采用移位和加法来实现。例6将(R2R3)和(R6R7)中双字节无符号数相乘,结果存入R4R5R6R7。此乘法可以采用部分积右移的方法来实现,其程序框图如图4.6所示,程序如下:
NMUL:MOVR4,#0;初始化 MOVR5,#0 CLRC MOVR0,#16第二十五页,共六十二页,2022年,8月28日NMUL1:MOVA,R4;CyR4R5R6R7右移一位 RRCA MOVR4,A MOVA,R5 RRCA MOVR5,A MOVA,R6 RRCA MOVR6,A MOVA,R7 RRC MOVR7,A JNCNMUL2;C为移出乘数的最低位 MOVA,R5;(R4R5)+(R6F7)→(R4R5)
第二十六页,共六十二页,2022年,8月28日ADDA,R3MOVR5,AMOVA,R4ADDCA,R2MOVR4,ANMUL2:DJNZR0,NMUL1;循环16位MOVA,R4;最后结果再移一位RRCAMOVR4,AMOVA,R5RRCAMOVR5,AMOVA,R6第二十七页,共六十二页,2022年,8月28日RRCAMOVR6,AMOVA,R7RRCAMOVR7,ARET第二十八页,共六十二页,2022年,8月28日图9.4NMUL程序框图第二十九页,共六十二页,2022年,8月28日
三、除法运算程序除法是乘法的逆运算,用移位、相减的方法来完成。首先比较被除数的高位字与除数,如被除数高位大于除数,则商为1,并从被除数中减去除数,形成一个部分余数;否则商位为0,不执行减法。然后把新的部分余数左移一位,并与除数再次进行比较。循环此步骤,直到被除数的所有位都处理完为止,一般商的字长为n,则需循环n次。一般计算机中,被除数均为双倍位,即如果除数和商为双字节,则被除数为四字节。如果在除法中发生商大于规定字节,称为溢出。在进行除法前,应该检查是否会产生溢出。一般可在进行除法前,先比较被除数的高位与除数,如被除数高位大于除数,则溢出,置溢出标志,不执行除法。第三十页,共六十二页,2022年,8月28日图9.5除法程序的流程第三十一页,共六十二页,2022年,8月28日
例7将(R4R5R6R7)除以(R2R3),商放在(R6R7)中,余数放在(R4R5)中。NDIV:MOVA,R5;判商是否产生溢出 CLRC SUBBA,R3 MOVA,R4 SUBBA,R2 JNCNDIV1;溢出,转溢出处理 MOVB,#16;无溢出,执行除法第三十二页,共六十二页,2022年,8月28日NDIV2:CLRC;被除数左移一位,低位送0MOVA,R7RLCAMOVR7,AMOVA,R6RLCAMOVR6,AMOVA,R5RLCAMOVR5,AXCHA,R4RLCAXCHA,R4第三十三页,共六十二页,2022年,8月28日MOVF0,C;保护移出的最高位CLRCSUBBA,R3;部分余数与除数比较MOVR1,AMOVA,R4SUBBA,R2JBF0,NDIV3;移出的高位为1,肯定够减JCNDIV4;否则,(Cy)=0才够减NDIV3:MOVR4,A;回送减法结果MOVA,R1MOVR5,AINCR7;商上1第三十四页,共六十二页,2022年,8月28日NDIV4:DJNZB,NDIV2;循环次数减1,若不为零则循环CLRF0;正常执行无溢出F0=0RETNDIV1:SETBF0;溢出F0=1RET第三十五页,共六十二页,2022年,8月28日9.3.4循环程序设计一、单重循环
图9.6第三十六页,共六十二页,2022年,8月28日循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。第三十七页,共六十二页,2022年,8月28日
例8设在内部RAM的BLOCK单元开始处有长度为LEN个的无符号数据块,试编一个求和程序,并将和存入内部RAM的SUM单元(设和不超过8位)。BLOCKEQU20HLENEQU30HSUMEQU40HSTART:CLRA;清累加器AMOVR2,#LEN;数据块长度送R2MOVR1,#BLOCK;数据块首址送R1LOOP:ADDA,@R1;循环加法INCR1;修改地址指针DJNZR2,LOOP;修改计数器并判断MOVSUM,A;存和RET第三十八页,共六十二页,2022年,8月28日
二、多重循环
多重循环程序,即在一个循环体中又包含了其它的循环程序,使用多重循环时,必须注意:(1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。(2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。(3)内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。
第三十九页,共六十二页,2022年,8月28日
例9在外部RAM中,BLOCK开始的单元中有一无符号数据块,其个数为LEN个字节。试将这些无符号数按递减次序重新排列,并存入原存储区。
ORG1000HSTART:MOVDPTR,#BLOCK;置地址指针MOVP2,DPH;P2作地址指针高字节MOVR7,#LEN;置外循环计数初值DECR7;比较与交换n-1次
第四十页,共六十二页,2022年,8月28日LOOP0:CLRF0;交换标志清0MOVR0,DPL;MOVR1,DPL;置相邻两数地址指针低字节INCR1MOVR6,R7;置内循环计数器初值LOOP1:MOVXA,@R0;取数MOVB,A;暂存MOVXA,@R1;取下一个数CJNEA,B,NEXT;相邻两数比较,不等转SJMPNOCHA;相等不交换
第四十一页,共六十二页,2022年,8月28日NEXT:JCNOCHA;Cy=1,则前者大于后者,不必交换SETBF0;否则,置交换标志MOVX@R0,A;XCHA,B;两数交换,大者在前,小者在后MOVX@R1,A;NOCHA:INCR0INCR1;修改指针DJNZR6,LOOP1;内循环未完,则继续JNBF0,EXIT;若从未交换,则结束DJNZR7,LOOP0;外循环未完,则继续EXIT:RET第四十二页,共六十二页,2022年,8月28日图9.7第四十三页,共六十二页,2022年,8月28日9.3.5代码转换程序设计例104位二进制数转化为ASCII代码分析:从ASCII编码表可知,若4位二进制数小于10,则此二进制数加上30H即变成相应的ASCII码;若大于10(包括等于10),则应加37H方可。入口:转换前4位二进制数存R2出口:转换后的ASCII码存R2第四十四页,共六十二页,2022年,8月28日源程序如下:
ORG2000HASCB1:MOVA,R2;ANLA,#0FH;取出四位二进制数
PUSHA;压入堆栈
CLRCSUBBA,#0AH;POPA;弹回A中
JCLOOP;该数小于10去LOOPADDA,#07H;否则加07HLOOP:ADDA,#30H;加30HMOVR2,A;转换之ASCII码送R2中
RET;返回主程序第四十五页,共六十二页,2022年,8月28日
例11设4位BCD码依次存放在内存RAM中40H~43H单元的低4位,高4位都为0,要求将其转换为二进制数,结果存入R2R3中。分析:一个十进制数可表示为:Dn×10n+Dn-1×10n-1+…+D0×100=(…((Dn×10+Dn-1)×10+Dn-2)×10+…)+D0当n=3时,上式可表示为:((D3×10+D2)×10+D1)×10+D0
第四十六页,共六十二页,2022年,8月28日BCDHEX:MOVR0,#40H;R0指向最高位地址MOVR1,#03;计数值送R1MOVR2,#0;存放结果的高位清零MOVA,@R0MOVR3,ALOOP:MOVA,R3MOVB,#10MULABMOVR3,A;(R3)×10的低8位送R3MOVA,BXCHA,R2;(R3)×10的高8位暂存R2MOVB,#10第四十七页,共六十二页,2022年,8月28日MULABADDA,R2MOVR2,A;R2×10+(R3×10)高8位送R2INCR0;取下一个BCD数MOVA,R3ADDA,@R0MOVR3,AMOVA,R2ADDCA,#0;加低字节来的进位MOVR2,ADJNZR1,LOOPRET第四十八页,共六十二页,2022年,8月28日9.3.6逻辑操作程序设计一.逻辑“与”函数的程序模拟例12:某控制用的计算机在执行初始化程序后,需要接收到:(1)准备就绪信号为逻辑“1”;(2)主回路工作正常信号为逻辑“1”;(3)启动开关闭信号为逻辑“1”;方可执行主程序,否则进行循环检测,等待条件的满足。第四十九页,共六十二页,2022年,8月28日设该三个信号由P1口的P1.2、P1.4、P1.6位输入,分别称作D2、D4、D6,则当D2=D4=D6=1时,逻辑函数f=D2.D4.D6=1,方执行主程序,否则踏步等待。实现这一要求的流程如图9.8所示:图9.8逻辑“与”模拟流程图第五十页,共六十二页,2022年,8月28日“与”函数的模拟程序片断如下:
AND1:MOVA,P1;取状态字:D7D0ANLA,#54H;送屏蔽字:01010100CJNEA,#54H,AND1;比较跳转,若f=1,
执行主程序
MAIN否则f=0,循环检测第五十一页,共六十二页,2022年,8月28日二.逻辑“或”函数的程序模拟例13:在报警程序中,只要主电路工作异常,或者过压,或者过流,或者过载,都应当及时发出声光报警信号。
设过压、过流、过载信号分别由P1口的P1.0、P1.3、P1.6输入分别称作D0、D3、D6,则当D0=D3=D6=0时,逻辑函数f=D0+D3+D6=0,连续循环检测,否则发出报警信号。第五十二页,共六十二页,2022年,8月28日“或”函数f=D0+D3+D6的模拟程序片断如下:
OR10:MOVA,P1;取状态字:D7D0ANLA,#49H;送屏蔽字:01001001JZA,OR10;比较跳转,若f=1,
发出报警信号
DONE:否则f=0,循环检测第五十三页,共六十二页,2022年,8月28日三.任意逻辑函数的程序模拟步骤:先把给定逻辑函数化为最小化“与-或”表达式然后画出实现该函数程序模拟的流程图编写模拟程序第五十四页,共六十二页,2022年,8月28日例14求其模拟程序。设变量均由P1口输入,连接如下:将最小化F2最小化为:以原变量化简:以反变量化简:
第五十五页,共六十二页,2022年,8月28日图9.9F2函数程序模拟流程图F2函数程序模拟流程图如图9.9所示:第五十六页,共六十二页,2022年,8月28日编写源程序片断如下:以原变量编程:F2MOVA,P1;取状态字
ANLA,#09H;送屏蔽字
XRLA,#08H;比较
JZBRAN1;F2=1去BRAN1MOVA,P1;
ANL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版数学七年级上册3.3《解一元一次方程二》听评课记录3
- 新版湘教版秋八年级数学上册第五章二次根式课题二次根式的混合运算听评课记录
- 苏科版数学七年级下册听评课记录11.5用一元一次不等式解决问题
- 湘教版数学九年级上册《小结练习》听评课记录8
- 湘教版数学七年级上册2.1《用字母表示数》听评课记录1
- s版语文三年级下册听评课记录
- 小学二年级口算题应用题
- 五年级下册数学解方程、口算、应用题总汇
- 人教版七年级数学下册 听评课记录 9.1.2 第1课时《不等式的性质》
- 华师大版数学八年级上册《立方根》听评课记录3
- 《农机化促进法解读》课件
- 最高法院示范文本发布版3.4民事起诉状答辩状示范文本
- 2023-2024学年度上期七年级英语期末试题
- 2024年英语高考全国各地完形填空试题及解析
- 2024至2030年中国餐饮管理及无线自助点单系统数据监测研究报告
- 2024年燃气轮机值班员技能鉴定理论知识考试题库-下(多选、判断题)
- 2024年服装门店批发管理系统软件项目可行性研究报告
- 交通法规课件
- (优化版)高中地理新课程标准【2024年修订版】
- 《Python程序设计》课件-1:Python简介与应用领域
- 各类心理量表大全
评论
0/150
提交评论