如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
第4章MCS-51汇编语言设计主要内容§4-1汇编语言的基本概念一.程序设计语言1.机器语言2.汇编语言汇编语言的汇编(1)人工编译(2)机器汇编Medwin汇编环境示例源程序的汇编结果实例3.高级语言二.汇编语言的格式1.汇编语言的指令类型2.汇编语言的指令格式(4分段)1、标号字段2、操作码字段:不能空缺§4-2汇编语言源程序的汇编1.伪指令(1)ORG定义起始地址(2)END定义汇编结束(3)EQU标号赋值(4)DB定义字节(5)DW定义字(5)DW定义字§4-3汇编语言设计实例程序流程符号1.顺序结构程序练习练习答案2.R1中存有一非压缩的BCD码,请编程将其转换为ASCII码,存入外RAM1000H单元中。解:BTAS:MOVA,R1ORLA,#30HMOVDPTR,#1000HMOVX@DPTR,ARET3.存放在40H单元的压缩BCD码转换为ASCII码,并存入内存RAM的31H,30HORG2000HSTART:MOVA,40HANLA,#0FH;屏蔽高四位ADDA,#30H;转换成ASCII码MOV30H,AMOVA,40HSWAPA;高低四位互换ANLA,#0FH;保留高位BCD码ORLA,#30H;转换成ASCII码MOV31H,A2.子程序设计(1)子程序结构(2)子程序的参数传递(2)子程序的参数传递a.利用寄存器(R0~R7和A)传递参数主程序用PUSH指令将入口参数压入堆栈,进入子程序后通过POP指令间接访问堆栈中的参数。子程序可用堆栈将出口参数传递给主程序。注意:ACALL、LCALL指令断点地址自动进栈,RET指令自动弹出断点地址。数据区清零,起始地址放在70H,被清零单元个数放在71HORG0100HMain:MOVSP,#5FHMOV70H,#40HMOV71H,#10HPUSH70HPUSH71HLCALLZeroSJMP$ZERO:POPDPHPOPDPLPOP07H;R7POP00H;R0CLRALOOP:MOV@R0,AINCR0DJNZ,R7,LOOPPUSHDPLPUSHDPHRETEND输出字符较多的打印子程序,遇00H停止打印ORG0000HMain:MOVSP,#6FHLCALLPRINTDB‘THISISAN’DB’EXAMPLE’DB0AH,0DH,00HNEXT:……例比较两个数据串是否完全相等,若完全相等,A=0;否则A=FFH。3.查表程序设计MOVCA,@A+DPTR数据表头地址存入DPTR要查得的数在表中相对表头的偏移量送入A,可在64KB内查表MOVCA,@A+PC用传送指令把所查数据的项数送入累加器A;使用ADDA,#data,修正A,data值=查表指令和数据表格间的字节数;data=数据表头地址-PC当前值=数据表头地址-(查表指令PC值+1)用指令MOVCA,@A+PC完成查表例根据A的值查表找出对应的ASCII码例根据R2中的值查表找出对应的值例(教材p81例4-6)@A+DPTR全部加到DPTR中,令A=0R2R3+)DPHDPLDPHDPL4.分支结构程序设计用条件转移语句实现二分支用CJNE实现三分支用JMP@A+DPTR实现多分支(1)用条件语句实现二分支例:求补码,双字节原码放在30H和31H,补码存放在32H和33HMOVA,30HJNBACC.7,NN;判断原码符号S:ANLA,#7FH;求原码负数绝对值CPLA;求原码的补码(模-1-原码负数绝对值)MOV32H,AMOVA,31HCPLAADDA,#1HMOV33H,AMOVA,32HADDCA,#0HMOV32H,AAJMPNEGTNN:MOV32H,AMOV33H,31HNEGT:SJMP$END(2)用CJNE实现三分支例:编程实现CJNER0,#0,MP1MOVR1,#0SJMPMP3MP1:MOVA,R0JNBACC.7,MP2MOVR1,#0FFHSJMPMP3MP2:MOVR1,#01HMP3:SJMP$END例:教材p90例4-13多路分支程序根据R2值,转入不同的处理程序5.循环程序设计循环程序的结构计数循环结构示意图条件循环结构示意图例:数据块求和参考源程序例:寻找最大值参考源程序6.码制转换程序(1)二进制与BCD的转换例:二进制=>ASCII(教材4-21)例ASCII=>二进制(教材例4-23)课堂练习课堂练习1参考程序课堂练习2参考程序课堂练习3参考程序