您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 基于Proteus和Keil-C(第2版)[林立-张俊亮]第3章
MOVA,#12H;立即数12H→ASETBP1.0;P1.0←1CJNEA,R0,START;若A≠R0,转STARTCJNEA,R0,START;若A≠R0,转STARTADDA,#10H;A+10H→ACRLA;A←0RET;子程序返回MOVA,#12H;move(传送)SETBP1.0;setbit(置位)CJNEA,R0,START;compareandjumpifnotequal(比较跳转)第3章单片机的汇编语言与程序设计简记符号简记符号的意义(在@符号之后)第3章单片机的汇编语言与程序设计简记符号的使用练习具体实例#dataADDA,R5#data16MOVDPTR,#1305RnMOVA,#35HSUBBA,@R0RidirectACALL3FFHaddr16LJMP12A0Haddr11MOVA,25HJCSTARTrelbitCLR20H简记符号简记符号表MOVA,PSWdirectSJMP10HrelADDA,RnMOVDPTR,#data16MOVA,#dataSUBBA,@RiACALLaddr11LJMPaddr16MOVA,directJCrelCLRbitMOVA,directSJMPrel指令助记符格式第3章单片机的汇编语言与程序设计(1)直接寻址INCPSW;指令原形INCdirectMOVA,0D0H;指令原形MOVA,direct例如:——以片内RAM字节地址的形式(direct)表示操作数的存在方式汇编语言中十六进制数的区别:1、地址——高4位值若9,高位前加0,以区别语句标号2、常数——高位前加#,以区别地址例如:SJMPAB;AB是语句标号(代表rel)MOVA,0AB;AB是十六进制数(代表地址)MOVA,#0AB;AB是十六进制数(代表常数)(2)寄存器寻址第3章单片机的汇编语言与程序设计——以通用寄存器的形式表示操作数的存在方式通用寄存器:A、B、C、Rn、DPTR例如:MOVA,R1;指令原形MOVA,RnAC(3)寄存器间接寻址第3章单片机的汇编语言与程序设计间址寄存器:Ri和DPTRMOVA,@R0;指令原形MOVA,@RiA←(Rn)(以间址寄存器中存储数据为操作数的地址)例如:——以@+间址寄存器名的形式表示操作数的存在方式第3章单片机的汇编语言与程序设计MOVA,#0E2H;指令原形MOVA,#dataADDCA,#20H;指令原形ADDCA,#data(4)立即寻址——以立即数的形式(#data或#data16)表示操作数的存在方式例如:第3章单片机的汇编语言与程序设计(5)变址寻址MOVCA,@A+DPTR;A←(A+DPTR)例如:——以@偏移量寄存器+变址寄存器的形式表示操作数的存在方式偏移量寄存器:A变址寄存器:DPTR或PC第3章单片机的汇编语言与程序设计MOVC,07H;指令原形MOVC,bitORL20H.7,C;指令原形ORLbit,CSETBP1.0;指令原形SETBbit(6)位寻址具有位地址的单元:低128字节RAM中的可位寻址区(位地址0~7FH);SFR中可位寻址的单元(位地址80H~FFH)例如:——以位地址的形式(bit)表示操作数的存在方式第3章单片机的汇编语言与程序设计(7)相对寻址rel一般用语句标号代替——以偏移量的形式(rel)表示操作数的存在方式相对寻址主要用于实现控制转移功能例如:SJMP10H;指令原形SJMPrel例如:CJNEA,30H,LP;指令原形CJNEA,direct,rel例如:PC目的=PC当前+relrel=PC目的-PC当前……….…….0122H0123H0124HxxHxxHxxH80H10HROM0133H第3章单片机的汇编语言与程序设计例3.2:已知片内RAM38H单元中的数为12H,试分析如下程序段并指出其功能注意:片内RAM38H单元中数不能直接传送到外部RAM的1818H单元,必须经过累加器A的转传。功能:将片内RAM38H单元中的数12H传送到片外RAM的1818H单元中。MOVR0,#38HMOVDPTR,#1818HMOVA,@R0MOVX@DPTR,A;Rn←data;DPTR←data16;A←(Ri);(DPTR)←AR0=#38HDPTR=#1818HA←38H=#12H1818H=#12H能否直接将(DPTR)←(R0),即MOVX@DPTR,@R0第3章单片机的汇编语言与程序设计例3.3:试分析如下程序段并指出其功能MOVDPTR,#120HMOVA,#5MOVCA,@A+DPTRMOV30H,A;30H←A功能:将ROM125H地址中的数取出送到片内RAM的30H单元中。意义:DPTR作为数据块的首地址,A作为偏移量,DPTR+A作为数据指针,将事先存放在ROM数据块中的数据提取出来——查表。;DPTR←#120H;A←125H;A←#5能否推广到MOVXA,@A+DPTR第3章单片机的汇编语言与程序设计设ROM120H地址开始的10个单元中存放有整数0~9的平方值,则下述程序可实现0~9任意数x的平方值查表,且结果存入片内RAM的y单元功能。ROM地址数值0129H810128H640127H490126H360125H250124H160123H090122H040121H010120H00MOVR0,#y;y是RAM地址MOVDPTR,#120H;数据块首地址MOVA,#x;0≤x≤9MOVCA,@A+DPTRMOV@R0,A;结果送RAM地址例3.3’:数据块首地址第3章单片机的汇编语言与程序设计例3.4:已知0~9的ASCII码为30H~39H。若片内RAM70H中有一个在0~9范围内的数,试编程把它转换为相应的ASCII码。解:利用半字节交换指令把0~9装配成相应的ASCII码。MOVR0,#70H;R0←#70HMOVA,#30H;A←#30HXCHDA,@R0;A中形成ASCII码MOV@R0,A;ASCII码送回70H单元0-3第3章单片机的汇编语言与程序设计例3.6:试解读如下程序并说明其功能MOVA,#34HADDA,#0E7HMOV40H,AMOVA,#12HADDCA,#0FHMOV41H,A;A←#34H;A←#34H+#0E7H;40H←A;A←#12H;A←#12H+#0FH+C;41H←A;A=#1BH,C=#1;40H=#1BH功能:实现两个16位数(1234H与0FE7H)的加法运算,并将结果221BH存入片内RAM40H-41H单元。做法:先对低8位相加,结果存入40H单元;再对高8位带进位相加,结果存入片内RAM41H和40H单元中。;A=#22H,C=#0;41H=#22H第3章单片机的汇编语言与程序设计例3.7:试解读如下程序并说明其功能CLRCMOVA,#34HSUBBA,#0E7HMOV40H,AMOVA,#12HSUBBA,#0FHMOV41H,A;CY位清零;A←#34H;A←#34H-#0E7H-C;40H←A;A←#12H;A←#12H-#0FH-C;41H←A;A=#4D,C=#1;40H=#4D功能:实现两个16位数(1234H与0FE7H)的减法运算,并将结果24DH存入片内RAM41H单元。做法:先清理CY位,然后对低8位带借位相减,结果存入40H单元;再对高8位带借位相减,结果存入41H单元。;A=#02H,C=#0;41H=#02H第3章单片机的汇编语言与程序设计例3.8:试解读如下程序并说明其功能MOVA,#17HMOVB,#68HMULABMOV30H,AMOV31H,B;A←#17H;B←#68H;A×B→BA;30H←A;31H←B;B=#9;A=#58H;30H←#58H;31H←#09H功能:实现两个8位数(17H与68H)的乘法运算,并将乘积958H的高8位和低8位分别存入片内RAM31H和30H单元。第3章单片机的汇编语言与程序设计例3.9:编程将内存M1单元中数字0~9的ASCII码变为相应数字的BCD码。解:由于0~9的ASCII码为30H~39H,故只要将0~9数字ASCII码的高4位变为0,低4位不变就是其BCD码。方法2:MOVA,#0HXCHDA,M1MOVM1,A方法1:MOVA,M1SUBBA,#30HMOVM1,A方法3:ANLM1,#0FH;#00001111B逻辑与的特性:x∧0=0(清零);x∧1=x(屏蔽)第3章单片机的汇编语言与程序设计例3.10:试解读如下程序并说明其功能。ANLA,#0FHANLP1,#0F0HORLP1,A功能:把累加器A的低4位送入P1口的低4位,而P1口的高4位保持不变(实现了一次数据组合);A←A∧00001111B;P1←P1∧11110000B;P1←P1∨A逻辑或的特性:x∨0=x(屏蔽);x∨1=1(置位);A=#0000xxxxB;P1=#XXXX0000B;P1=#XXXXxxxxB逻辑与的特性:x∧0=0(清零);x∧1=x(屏蔽)第3章单片机的汇编语言与程序设计例3.11:试解读如下程序并说明其功能。MOVA,40HCPLAINCAMOV40H,A功能:对片内RAM40H单元中的数取反加1(求补运算),结果仍送回40H单元。;A←40H;A←/A;A←A+1;40H←A第3章单片机的汇编语言与程序设计MOVA,30HCJNEA,40H,NOEQUSETB7FHSJMPFINISHNOEQU:JCSMALLMOV50H,AMOV51H,40HSJMPFINISHSMALL:MOV50H,40HMOV51H,AFINISH:SJMP$;A←30H;若A≠40H,转NOEQU;7FH位←#1;PC←PCFINISH;若CY=1,则PC←PCSMALL;50H←A;51H←40H;PC←PCFINISH;50H←40H;51H←A;PC=PC当前例3.14:以下程序可实现比较跳转功能:比较30H和40H中两个无符号数的大小,将大数存入50H,小数存入51H,若两数相等则使7FH位置1。试分析这一功能的实现过程。思路:先判断比较双方是否相等,随后再利用C判断不相等时的关系。举例15:试解读如下程序并说明其功能。MOVR0,#20HMOVR1,#50HMOVR3,#0AHMOVP2,#0LAB:MOVA,@R0MOVX@R1,AINCR0INCR1DJNZR3,LAB……功能:将存放在片内RAM20H单元开始的10个数连续传送到片外RAM0050H单元开始的地址处。;片内RAM数据块首地址指针;片外RAM数据块首地址指针;循环计数器;高8位地址由P2提供;利用A做中间交换单元;数据传送到片外RAM指定单元;R0指针加1刷新;R1指针加1刷新;R3减1,判断循环是否结束第3章单片机的汇编语言与程序设计总延时量:(2μs×125+1μs+2μs)×200+1μs=50.601ms例3.16:试分析如下延时子程序可实现的延时量DEL50:MOVR7,#200DEL1:MOVR6,#125DEL2:DJNZR6,DEL2DJNZR7,DEL1RET;循环125次;循环200次………ACALLDEL50;调用延时子程序………使用:已知晶振为12MHz时,指令DJNZ耗时为2μs,指令MOV为1μs子程序名用语句标号表示;返回语句1.给出每条指令执行后的结果MOV23H,#30HMOV12H,#34HMOVR0,#23HMOVR7,12HMOVR1,#12HMOVA,@R0MOV34H,@R1MOV45H,34HMOVDPTR,#6712HMOV12H,DPHMOVR0,DPLMOVA,@R0;(23H)=30H;(12H)=34H;R0=23HXXXXXXXXXXXXXXXXXXDPHDPL45H34H23H12HR7R1R0XXXXXXXX3034XXXX23XXXXXXXX3034341223671234343034341223671234343067341212;R7=34H;R1=12H;A=30H;(
本文标题:基于Proteus和Keil-C(第2版)[林立-张俊亮]第3章
链接地址:https://www.777doc.com/doc-8530386 .html