预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共77页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第4章汇编语言程序设计教学目标4.1单片机汇编语言概述机器语言汇编语言 地址汇编程序高级语言独立于机器,可移植性强结构化设计,程序清晰,但是占用存储空间大指令性语句使CPU执行一个具体的操作。 伪指令不要求计算机做任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助进行汇编的一些指令。11用来指定程序或数据的起始位置; 给出一些连续存放数据的地址; 为中间运算结果保留一部分存储空间; 为源程序中的符号和标号赋值; 表示源程序结束等等。 不同版本的汇编语言,伪指令的符号和含义可能有所不同,但基本用法是相似的。伪指令列表141516书:131页。编程好习惯之一:上下对齐! ORG0500H AA EQUR1 BB EQU10H DELAYEQU07E6H MOVR0,BB;R0←(10H) MOVA,AA ;A←R1 ······················· LCALLDELAY;调07E6H子程序该伪指令的功能与EQU类似,可以将DATA右边表达式的值赋给左边的字符名称。表达式可以是常数、地址标号或表达式,但不可以是一个汇编符号(如R1等)。19 ORG2000H TAB1:DB30H,8AH,73 DB01011010B,‘5’,‘A’21ORG1500H TAB2:DW1234H,80H,10 23ORG1000H SPC:DS20H DB30H,8FH254.2源程序的设计步骤和汇编27284.2源程序的设计步骤和汇编4.2源程序的设计步骤和汇编4.3.1简单程序设计 4.3.2分支程序设计 4.3.3散转程序设计 4.3.4循环程序设计 4.3.5查表程序设计 4.3.6子程序设计和参数传递LJMPMAIN例1两个无符号双字节数相加。 设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入40H和41H单元中。 ORG0000H LJMPMAIN ORG0100H MAIN:CLRC;将Cy清零 MOVR0,#41H;将被加数地址送数据指针R0 MOVR1,#51H;将加数地址送数据指针R1 AD1:MOVA,@R0;被加数低字节的内容送入A ADDA,@R1;两个低字节相加 MOV@R0,A;低字节的和存入被加数低字节中 DECR0;指向被加数高位字节 DECR1;指向加数高位字节 MOVA,@R0;被加数高位字节送入A ADDCA,@R1;两个高位字节带Cy相加 MOV@R0,A;高位字节的和送被加数高位字节 SJMP$ END例2将两个半字节数合并成一个一字节数。 设内部RAM40H,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中(从40H单元取的数放在高4位,从41H单元取的数放在低4位)。 ORG0000H LJMPSTART ORG0100H START:MOV R1,#40H;设置R1为数据指针 MOV A,@R1 ;取出第一个单元中的内容 ANL A,#0FH ;取第一个数的低半字节 SWAP A ;移至高半字节 INC R1 ;修改数据指针 XCH A,@R1 ;取第二个单元中的内容 ANL A,#0FH ;取第二个数的低半字节 ORL A,@R1 ;拼字 MOV 50H,A ;存放结果 SJMP$ END 分支结构框图 (a)单分支流程(b)多分支流程- ORG2000H START:MOVA,30H ;A←X JZ LP2;X=0转移 JNBACC.7,LP1;X>0转移 MOVA,#0FFH;X<0则Y=-1 SJMPLP2 LP1:MOVA,#01;X>0则Y=1 LP2:MOV31H,A;31H←Y END散转程序是分支程序的一种,它可根据运算结果或输入数据将程序转入不同的分支。4.3.3散转程序设计 ORG0100H MOVA,R3;R3→A RLA;A←A×2 MOVDPTR,#TAB;表首地址送DPTR JMP@A+DPTR;根据A值转移 ·········· TAB:AJMPROUT00;当(R3)=0时转ROUT00执行 AJMPROUT01;当(R3)=1时转ROUT01执行 ·········· AJMPROUT127;当(R3)=127时转ROUT127执行 ROUT00:········ ROUT01:········ ·········· ROUT127:········ END4.3.4循环程序设计4.3.3循环程序设计例工作单元清零。 在应用系统程序设计时,有时经常需要将存储器中部分地址单元作为工作单元,存放程序执行的中间值或执行结果,工作单元清零工作常常放