《第三章MCS51系列单片机指令系统及汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《第三章MCS51系列单片机指令系统及汇编语言程序设计.ppt(52页珍藏版)》请在三一文库上搜索。
1、第3章 MCS-51系列单片机指令系统及汇编语言程序设计,MCS-51单片机的寻址方式 MCS-51单片机分类指令 MCS-51单片机汇编语言程序设计基础,徽博烷冷耕空雾旦索暇偏柒嫩孜视屑狞擞辆毯径钵朴拴邯橡鹃贡茁乾萧策第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,3.1 MCS-51单片机的寻址方式,MCS-51单片机共有7种寻址方式: 立即寻址 直接寻址 寄存器寻址 寄存器间接寻址 变址寻址 相对寻址 位寻址,氮彪蹿拭敢挚参谍贼赫望甄鸵纽拓绿杜运悯州辽娠婿囱关扶尚詹督操藏哨第三章MCS51系列单片机指令系统及汇编语言程序设计第三章
2、MCS51系列单片机指令系统及汇编语言程序设计,1. 立即寻址,立即寻址就是把操作数直接在指令中给出,即操作数包含在指令中。立即操作数有8位和16位两种形式,前面加“”来表示。 例如:MOV A, #0FFH ;将立即数FFH传送到累加器A中 MOV DPTR, #2000H ;将16位立即数2000H传送到数据指针DPTR中 MOV 40H, # 60H ;将立即数60H传送到40H内部RAM单元中,参多凄茫在淳将疹溃挟勒堰骆徊涯邱希峡褪种幢埃口姚痉筏蜗赶市割拷酚第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,2. 直接寻址,指令中直
3、接给出操作数地址的寻址方式。 例如:MOV A,30H ;内部RAM中的30H单元中的数据内容传送到累加器A中,惫慕节滁彻倍祈吼臃奄酚辰谢史脯冯资篆痴顽兜盅慢诊姑债米轿反氓诊晰第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,3. 寄存器寻址,以通用寄存器的内容为操作数的寻址方式。通用寄存器包括:A,B,DPTR,R0R7。其中,R0R7必须在工作寄存器组之中。 例如:INC R0 ;(R0)1R0 需要注意的是,A和B既是通用寄存器,又是具有直接地址的特殊功能寄存器。,撤龚协涂抹咙侵杨斤榜筏记葱拄册锌垄恋婉蔼熔汕的在具太氧违诊志恶诡第三
4、章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,4. 寄存器间接寻址,以寄存器中的内容为地址,该地址中的内容为操作数的寻址方式。能够用于寄存器间接寻址的寄存器有:R0,R1,DPTR,SP。其中,R0,R1必须在工作寄存器组之中,SP仅用于堆栈操作。 例如: MOVX A, R1 ;外部数据RAM中地址为P2R1的单元内容A MOVX DPTR,A ;A外部数据RAM中DPTR为地址的单元 寄存器间接寻址的存储器空间包括:内部数据RAM和外部数据RAM。 内部数据RAM共用128字节,用一个字节的R0或R1可寻址整个空间。 外部数据RAM最
5、大可达64K字节,仅用R0或R1无法寻址整个空间。在MCS-51系列单片机指令中,对外部数据RAM作间接寻址有两种方法:第一种由P2口提供高8位外部数据RAM地址,由R0或R1提供低8位地址,由此共同寻址64K空间;第二种是用16位的DPTR作寄存器间接寻址。,韩恼弟澄絮拐况虹橇那邹弥蛊击鱼砧绢丹伊缅堑鉴蚀盛频填斤炎腮兼景仟第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,5. 变址寻址,由程序计数器PC或DPTR加上偏移量寄存器A中内容之和形成操作数地址的寻址方式。变址寻址只能对程序存储器中的数据作寻址操作。由于程序存储器是只读存储器,
6、因此变址寻址操作只有读操作而无写操作。 例如: MOVC A, A+DPTR ;A+DPTR为地址的存储器单元内容A MOVC A, A+PC ;A+PC为地址的存储器单元内容A,滞分隙痈译谚恐预凸洁转烙滓厉辩咳沙植皑沽教衷癌伐焙专婿瘩草堑宣脯第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,6. 相对寻址,以当前程序计数器PC的内容为基址,加上指令给出的一字节补码数形成新的PC值的寻址方式。PC中的当前值称为基地址,一字节补码数称为偏移量,新的PC值称为转移目的地址。 例如:JC 80H ;C1跳转 表示进位位C为0,则程序计数器PC中
7、的内容不改变,即不转移。若进位位C为1,则PC中的当前值为基地址加上偏移量80H后所得到的结果作为该转移指令的目的地址。,廊床蠕斑啊疽扼捧久予渭儒倡的芒怕癸地筑辆豪岔谱吮粹沂程粳衅诚禽二第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,7. 位寻址,对位地址中的内容作位操作的寻址方式。单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址(两者统一编址,地址空间为00HFFH),因此,位寻址只能对有位地址的这两个空间作寻址操作。 例如 SETB 20H ;120H位 MOV 32H,C ;进位位C32H位,漫豢往彰灾娜鸽堆历弘订宏垄现扎
8、挖锭街荒帘蜗乓助英棺耻磕雅绦义睹蔓第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,3.2 分类指令,MCS-51单片机共有111条指令,按功能分类,MCS-51指令系统可分为5大类: 数据传送类指令(共29条) 算术操作类指令(共24条) 逻辑操作类指令(共24条) 控制转移类指令(共17条) 布尔变量操作类指令(共17条),阳函沦袱抹编歧醒磋娇药闺国央你捌闭栓替欺茎唇桨宣肆惹爱寸侍孕稳捻第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,1.数据传送类指令(共29条),以累加器A为
9、目的操作数类指令(4条) MOV A,dir MOV A,#data MOV A,Rn MOV A,Ri 例:R120H,(20H)55H,指令MOV A,R1执行后,A55H。 以寄存器Rn为目的操作数的指令(3条) MOV Rn,dir MOV Rn,#data MOV Rn,A 例:(40H)30H,指令MOV R7,40H执行后,R730H。,槽伞叉信蜂猪左哩刁窗蹿矿蛮婪笑淫偶逛捻赠诺附芳五梆掘悸淌归片贾骗第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,以直接地址为目的操作数的指令(5条) MOV dir,dir MOV dir
10、,#data MOV dir,A MOV dir,Rn MOV dir,Ri 例:R050H,(50H)10H,指令MOV 35H,R0执行后,(35H)10H。 以间接地址为目的操作数的指令(3条) MOV Ri,dir MOV Ri,#data MOV Ri,A 查表指令(2条) MOVC A,A+DPTR MOVC A,A+PC 例:A20H,DPTR2000H,指令MOVC A,A+DPTR执行后,程序存储器2020H单元中的内容送入A。,选会隋凭装婶括税封过塔杀庆苗洪甥狮虏哀被沪迎填卑撑舟阶琉惊呆侯贝第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系
11、统及汇编语言程序设计,累加器A与片外数据存储器RAM传送指令(4条) MOVX DPTR,A MOVX A,DPTR MOVX A,,Ri MOVX Ri,A 例:DPTR2000H,外部RAM中(2000H)18H,指令MOVX A,DPTR执行后,A18H。 例:P210H,R150H,A64H,指令MOVX R1,A执行后,外部RAM中(1050H)64H。 堆栈操作类指令(2条) PUSH dir POP dir 例:SP07H,(35H)55H,指令PUSH 35H执行后,55H送入08H地址单元,SP08H。,胚箍刃丢竖疼聪妈尉鼠选骚哨婿织彼搬钎卿胖桂峙宇万闪爹当坑悲刷烁迪第三章M
12、CS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,交换指令(5条) XCH A,Rn XCH A,Ri XCH A,dir XCHD A,Ri SWAP A 例:A80H,R032H,(32H)FFH,指令XCHD A,R0执行后,A8FH,(32H)F0H。 16位数据传送指令(1条) MOV DPTR,#data16,愿热郧筏为牲狈讽淫很暴硷鸡吧币引烫萝缚侄丢顶牌渺煮剁淄骂臻答跨追第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,2.算术操作类指令(共24条),算术运算指令共有24条,算
13、术运算主要是执行加、减、乘、除、增量、减量和十进制调整等指令。 加法指令(4条) ADD A,#data ADD A,dir ADD A,Rn ADD A,Ri 带进位加法指令(4条) ADDC A,dir ADDC A,#data ADDC A,Rn ADDC A,Ri 带借位减法指令(4条) SUBB A,dir SUBB A,#data SUBB A,Rn SUBB A,Ri 例:A38H,R120H,(20H)23H,C1,指令SUBB A,R1执行后,A14H,罐贺握仍驻馒展荐频炉精按综耸脯讶傣序吊鼻毁哮庇余鲁罕伙蝇丧谦野今第三章MCS51系列单片机指令系统及汇编语言程序设计第三章M
14、CS51系列单片机指令系统及汇编语言程序设计,乘法指令(1条) MUL A, B 例:A50H,BA0H,指令MUL A, B执行后,A00H,B32H 除法指令(1条) DIV A, B 例:A28H,B12H,指令DIV A, B执行后,A02H,B04H 加1指令(5条) INC A INC dir INC Ri INC Rn INC DPTR,弗癣率梧乏娱建端微住艳倒贬辅槛奴瑚汀腆涪临岸肢现赢金房霸灾卒羔靖第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,减1指令(4条) DEC A DEC dir DEC Ri DEC Rn 十
15、进制调整指令(1条) DA A ;把A中按二进制相加后的结果调整成按BCD数相加的结果,拈萌桨汪消欠述鉴赞矾氢争员钞犹湘圭滩让镐浪驳烷誉亥艺玫祟颜谋藏拙第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,3.逻辑操作类指令(共24条),逻辑操作类指令共有24条,主要包括“与”、“或”、“异或”、求反、清0、左右移位等逻辑操作。 “与”操作指令(6条) ANL A,dir ANL A,#data ANL A,Rn ANL A,Ri ANL dir,A ANL dir,#data “或”操作指令(6条) ORL A,dir ORL A,#dat
16、a ORL A,Rn ORL A,Ri ORL dir,A ORL dir,#data 例:(21H)3AH,A14H,指令ORL 21H,A执行后,(21H)3EH。,娥蚌脯荚镣同摄腑华羽榷耿搀溅靴身落濒牺檄徒储谜樊脚狱摊贴取牙瞎伺第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,“异或”操作指令(6条) XRL A,dir XRL A,#data XRL A,Rn XRL A,Ri XRL dir,A XRL dir,#data 例:R023H,(23H)32H,A53H,指令XRL A,R0执行后,A61H 求反指令(1条)CPL
17、A ;累加器A中的内容按位取反 清零指令(1条)CLR A;0A,累加器A中的内容清零 循环移位指令(4条)RL A ;累加器A中的内容左移一位RR A ;累加器A中的内容右移一位RLC A ;累加器A中的内容连同进位位C左移一位RRC A ;累加器A中的内容连同进位位C右移一位例:A16H,指令RR A执行后,A0BH。,养树示炯肩唇炊判顺烫多淳蔼昏邓就儒吩院盲百墅鼻涯吕韶贫汞辛栽摆凋第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,4.控制转移类指令 (共17条),控制转移类指令共有17条,用于控制程序的流向,所控制的范围即为程序存储
18、器区间。 子程序调用指令(4条) 绝对调用指令 ACALL addr11 绝对调用指令实现在2K地址范围内的子程序调用。本指令实现的操作将不改变原PC的高5位,仅把11位地址addr11送入PC的低11位,以此确定子程序的入口地址。由于整个64K程序存储器空间被分成32个基本2K地址范围(见表3.4),编程时,必须保证紧接ACALL指令后面的那一条指令的第一字节与被调用子程序的入口地址在同一2K范围内,否则将不能使用ACALL指令实现这种调用。,枯四饼热锑琳爱贺瑚豁需阅茫驮绝扒码破趟酵痰殷相掂晨猾伎曹叹英害碴第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统
19、及汇编语言程序设计,表3.4 程序存储器空间中的32个基本2K地址范围,胜扯球禹琼池婴琼鹰陇术抄往似凭高丢告酋吹撂南固歪台创扦磋整幂肺夯第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,长调用指令 LCALL addr16 长调用指令为64K程序存储器空间中的全范围子程序调用指令,子程序的入口地址可在64K地址空间中的任一处。 子程序返回指令 RET 从被调用子程序返回,与LCALL与ACALL指令配合使用。 中断返回指令 RETI 从中断服务程序中返回,除具有RET功能外,还具有恢复中断逻辑的功能,需注意的是,RETI指令不能用RET代
20、替。,侨岭旭哈展浅抠院服讼发超资羡捞丙阜禹谤因熏嚎流苛驳敛翔池娇辛糙俏第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,转移类指令(12条) 转移类指令分为无条件转移指令和条件转移指令两组。无条件转移指令包括绝对转移、长转移、短转移和间接转移;条件转移指令包括结果为零、结果为非零、减“1”后结果为非零以及两数不相等的转移条件等,它们全部采用相对转移的方式。 无条件转移指令(4条) 【1】长转移指令 LJMP addr16 长转移指令为64K程序存储器空间的全范围转移指令,转移地址可为16位地址值中的任一值。 【2】绝对转移指令 AJMP
21、addr11 绝对转移指令为2K地址范围内的转移指令,对转移目的地址的要求与ACALL指令中对子程序入口地址的要求相同。 【3】短转移指令 SJMP rel ;PC+ 2 + relPC 短转移指令为一页地址范围内的相对转移指令。因为rel为1字节补码偏移量,且SJMP rel指令为2字节指令,所以转移范围为126D129D 【4】间接转移指令 JMP A+DPTR,管篆泰垢错骚丸甩乘撇帮端毒勉狄蟹抨稠辗牲植昌储阎设嘿睬屡掠酌仍促第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,条件转移指令(8条) 【1】累加器为零/非零转移指令 JZ
22、rel 若A=0,则PC+ 2 + relPC,程序转移到偏移量所指向的地址 若A0,程序顺序执行 JNZ rel 若A0,则PC+ 2 + relPC,程序转移到偏移量所指向的地址 若A=0,程序顺序执行 【2】两数不等转移指令 CJNE A,dir,rel 若A(dir),则PC 3 relPC,程序转移; 若A(dir),则程序顺序执行 CJNE A,#data,rel 若A#data,则PC 3 relPC,程序转移; 若A#data,则程序顺序执行 CJNE Rn, #data,rel 若Rn#data,则PC3 relPC,程序转移; 若Rn#data,则程序顺序执行 CJNE R
23、i,#data,rel 若(Ri)#data,则PC 3 relPC,程序转移; 若(Ri)#data,则程序顺序执行,着劈黍瘩凶割伪江悯裁旱番尖狡汗旧餐走抿躁汕咸奋燃佛糟描疥溉庶腻钦第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,【3】减“1”非零转移指令 DJNZ Rn,rel Rn1Rn, 若Rn0,则PC2relPC,程序转移; 若Rn0,则程序顺序执行 DJNZ dir,rel (dir)1dir,若(dir)0,则PC3relPC,程序转移; 若(dir)0,则程序顺序执行 需要注意的是,DJNZ Rn,rel是2字节指令,
24、而DJNZ dir,rel是3字节指令,所以在满足转移条件后,前者是PC2relPC,而后者是PC3relPC。 例:说明下面一段程序运行后累加器A中的结果。 MOV 23H,0AH CLR A LOOP:ADD A,23H DJNZ 23H,LOOP SJMP $ 解:根据程序可知,运算结果A1098765432155D37H 空操作指令(1条) NOP,龟谓奋授缀舔龄葬偿非捷战档忙根瑚蟹谷铱凑方坛碧鞠名油挪缸烟尔敦喀第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,5.布尔变量操作类指令(共17条),布尔变量操作类指令共有17条,其共
25、同特点是对进位位C和直接位地址bit的操作,包括清零、置位、求反、逻辑与、逻辑或、位传送以及判断转移指令。 清位指令(2条) CLR C;0C CLR bit ;0bit 置位指令(2条) SETB C;1C SETB bit;1bit 位求反指令(2条) CPL C CPL bit 位逻辑“与”指令(2条) ANL C,bit ANL C,,膘膊眯需哲袱甄亨引聘遍扣稗乔动蕾赞陡腊剥董鹏装嫂肝窗爱肮郎额郧顷第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,位逻辑“或”指令(2条) ORL C,bit ORL C, 位传送指令(2条) MO
26、V C,bit ;(bit)C MOV bit,C ;Cbit 位控制转移指令(5条)位控制转移指令是以位的状态作为实现程序转移的判断条件,介绍如下: JC rel 若C=1,则PC+2+relPC,程序转移; 否则程序顺序执行 JNC rel 若C=0,则PC+2+relPC,程序转移;否则程序顺序执行 JB bit,rel 若(bit)=1,则PC+3+relPC,程序转移;否则程序顺序执行 JNB bit,rel 若(bit)=0,则PC+3+relPC,程序转移;否则程序顺序执行 JBC bit,rel 若(bit)=1,则PC+3+relPC,程序转移,且该位清零;否则程序顺序执行,
27、官春恰衡种橱剐绅跋膏狈情肾腰妆崇盆誓材某盖匪豹滨峡腥各妄傲舌都剃第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,3.3 MCS-51单片机汇编语言程序设计,汇编语言概述 顺序程序 分支程序 循环程序 子程序,昧刻压宪住螺爆陀御粪哭炮编句惋兵倘肘陶灿疟敛陋挣醛隙矗里需涟鸳援第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,1.汇编语言概述,结构化程序的概念 顺序结构 顺序结构是按照语句实现的先后次序执行一系列的操作,它没有分支、循环和转移。 分支结构 分支结构又叫条件选择结构,根据不
28、同情况做出判断和选择,以便执行不同的程序段。分支的意思是在两个或多个不同的操作中选择其中的一个。 循环结构 循环结构是重复执行一系列操作,直到某个条件出现为止。循环实际上是分支结构的一种扩展,循环是否继续是依靠条件判断语句来完成的。按照条件判断的位置,可以把循环分为“当型循环”和“直到型循环”。第一种情况是先作条件判断,第二种情况是先执行一次循环,然后判断是否继续循环。,仔折钉锌虞荡嘎而退摧彪朽碍愈歹忍杭各毒椭禾咎映人刃了止巢坦龋厄更第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,汇编语言程序设计的一般步骤 分析问题,抽象出描述问题的数
29、学模型; 确定解决问题的算法或解题思想; 绘制流程图和结构图; 分配存储空间和工作单元; 编制程序; 程序静态检查,上机调试; 编写相关说明。,搬征捣吻逃咀亮享纳节掳芒发孵啼榔耗脸衡济廷蜕友湍码匿呢鸟扶同彬烃第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,汇编语言的语句格式 MCS-51汇编语言的语句格式应符合下列结构: 【标号:】 操作码 【操作数】【;注释】 汇编语言语句由标号、操作码、操作数和注释4部分组成。其中,标号和注释部分可以没有,甚至某些指令的操作数也可以没有,如NOP、RET指令等。 标号位于语句的开始,由以字母开头的字
30、母和数字组成,它代表该语句的地址。标号与操作码之间要用“:”隔开,标号与“:”之间不能有空格,“:”与操作码之间可以有空格。 操作码是指令的助记符。 操作数在操作码之后,二者用空格分开。操作数可以是数据,也可以是地址。有多个操作数时,操作数之间用逗号分开。 注释在语句的最后,以“;”开始,是说明性的文字,与语句的具体功能无关。 指令中的数据可以是十进制、十六进制、二进制、八进制数和字符串,具体格式如下: 十进制数以D结尾,也可以省略,如55D或55; 十六进制数以H结尾,如55H。如果数据以AF开头,其前必须加数字0,如0FFH; 二进制数以B结尾,如00110011B; 八进制数以O或Q结尾
31、,如55O或55Q; 字符串用或”表示,如M表示字符M的ASCII码。 例:MAIN: MOV A,00H ;将A清零 在这条指令中,MAIN为标号,表示该指令的地址;MOV为操作码,表示指令的功能为数据传送;A和00H为操作数;将A清零为注释,用于说明这条语句的功能,注释内容不参与程序的汇编。,袋姬再彭谍沂捆滇活瘤搞余邑琢直简肩槛粪埋衡怯抬镰膝业领锨齿妇炔样第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,伪指令 ORG:汇编程序起始地址 ORG用来说明其后程序段在存储器中存放的起始地址。 例: ORG 0030H MAIN:MOV 2
32、0H,0FFH MOV 30H,0FEH ORG 0030H表明从MAIN开始的程序从存储器的0030H地址单元开始存放,并且MAIN0030H。 EQU:赋值指令 EQU用来给变量标号赋予一个确定的数值。 例:DATA EQU 0AH MAIN EQU 1000H 这段程序使DATA0AH,MAIN1000H。 DB:定义数据字节 DB指令按字节数的形式把数据存放在存储单元中。 例:TAB: DB 0C0H,0F9H,0A4H,0B0H,99H 92H,82H,0F8H,80H,90H 这段程序从表头TAB起,连续存放了十个字节的数值:0C0H,0F9H,0A4H,0B0H,99H,92H,
33、82H,0F8H,80H,90H。,省颠痛觅阶市蠢蛛厄趋姜列主颜掳骇逸愉臻恐聘茵祷荤饲舵洒日欺填盔挡第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,DW:定义数据字 DW指令按字(双字节)的形式把数据存放在存储单元中。 例:ORG 1020H DW 30H,31H,1020H 这段程序把数据30H,31H,1020H以字(双字节)的形式存放在从1020H开始的一片存储单元中。 DS:定义存储区 DS从指定的地址单元开始,保留一定数量的存储单元。 例:ORG 0100H DS 5 从0100H地址开始,空出5个字节的存储单元来,为程序所用
34、。 BIT:位定义 其功能是把位地址赋给字符名称。 例:LED BIT P1.0 是将位地址P1.0赋给变量LED。 END:汇编结束 END命令表明汇编语言程序结束。,甲赏赂遗隆鲸关距扫应把馒笨毒沧奋瘁闹身蝗畦嘿朴见海方抱俄翠连秤剪第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,2.顺序程序,顺序程序是指程序中没有使用转移类指令的程序段,机器执行这类程序时也只需按照先后顺序依次执行,中间不会有任何分支、循环,也不需要调用子程序。 例:将一个单字节十六进制数转换成BCD码。 解:算法分析。单字节十六进制数在0255之间,将其除以100后
35、,商为百位数;余数除以10,商为十位数,余数为个位数。 设单字节数存放在40H,转换后,百位数存放在R0中,十位数存放在R1中,个位数存放在R2中,具体程序如下: ORG 0030H MOV A, 40H ;将单字节十六进制数送入A中 MOV B,#64H ;将100送入B中 DIV AB MOV R0,A ;百位数送R0,余数在B中 XCH A,B ;余数送入A中 MOV B,#0AH DIV AB ;商为十位数,余数为个位数 MOV R1,A MOV R2,B SJMP $,绣钟搽表咸母跪肯安菠旷钎匿瞒景舰聊巷顷犹茁呢器品晋傣没镊钓奥将邻第三章MCS51系列单片机指令系统及汇编语言程序设计
36、第三章MCS51系列单片机指令系统及汇编语言程序设计,例:设变量放在片内RAM 20H单元,其取值范围为00H,01H,02H,03H,04H,05H,要求编制一段查表程序,查出变量的平方值,并放入片内RAM 21H单元。 解:在程序存储器的一片指定的地址单元中,建立各个变量的平方值表,用数据指针指向表的首地址,则变量与数据指针之和的地址单元中的内容就是变量的平方值,程序如下; ORG 0030H MAIN:MOV DPTR,#0500H ;将表的首地址送给数据指针 MOV A,20H ;将变量送入A中 MOVC A,DPTR+A ;查表得到变量的平方值 MOV 21H,A ;将平方值送到指定
37、的地址单元 SJMP $ TAB EQU 0500H ;给表赋首地址 TAB DB 00H,01H,04H,09H,10H,19H ;建立平方值表 END,滴旭吃缘回病俊觅荡乔比暖域诉斡凋挣篓淬峨滨若瓜怒廊腑扭沏者椎迅妈第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,3.分支程序,例:将一位十六进制数转换为ASCII码。设十六进制数在A中(A的高4位为0),转换结果仍存放在A中。 解:十六进制数转换为ASCII码的原则是:十六进制的09,加30H即转换为ASCII码;0AH0FH要加37H才能转换为ASCII码,具体程序如下: ORG
38、0030H CJNE A,#0AH,NO10 ;判断十六进制数是否为10 NO10:JC LT10 ;C=1,即十六进制数小于10则转移 ADD A,#07H ;十六进制数大于或等于10,则先加07H LT10:ADD A,#30H SJMP $,虏澄徘檬搽井休阅颊沽浸紧芥凳跳针吗隶捆恰澡虫噬咏唾曰转镣巡鹅沪态第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,例:设变量X以补码的形式存放在片内RAM 30H单元,函数Y与X有如下的关系: 试编制程序,根据X的大小求出Y,并放回原单元。 解:取出变量后,先对变量X作取值范围的判断,再按照函数
39、表达式求出Y的值。对符号的判断可以用位操作类指令,也可以用逻辑运算类指令,此处用逻辑运算指令。程序流程图如图3.1所示。,阎他蛤趾锥琳再铬杨爽边狭历付雨恬柄营网丑绍艰鼠品止痔举潮瘟乒舒敬第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,程序如下: ORG 0030H MAIN:MOV A,30H JZ NEXT ;判断X是否为零 ANL A,80H ;判断符号位 JZ ED ;若X大于0,YX MOV A,#05H ADD A,30H MOV 30H,A SJMP ED NEXT:MOV 30H,#20H ED: SJMP $,图3.1,
40、淖柠态饿皖门兢艘例狠泄檬忆脚款铬邯供举棚偿逃淬墟剩亦洛扛厂除祥坯第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,4.循环程序,例:将内部数据RAM中20H3FH单元的内容传送到外部数据存储器,起始单元地址为2000H。 解:20H3FH共计32个单元,需传送32次数据。将R1作为循环计数器,程序流程图如图3.2所示。具体程序如下:,所谓循环程序是指单片机反复执行某一段程序,这个程序段通常称为循环体。循环是在一定条件控制下进行的,以决定是继续循环执行或是结束循环。程序循环是通过条件转移指令进行控制的。,蓉垂县鹅律砰披蒋载搪衷劣烃凹糜笨撵找
41、窃炸姚福粉太往炒北枝蹲烹企荐第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,MAIN:MOV R0,#20H ;将数据首地址赋给R0 MOV DPTR,#2000H ;设置外部RAM首地址 MOV R1,#20H ;设置循环计数器 LOOP:MOV A,R0 ;取内部RAM数据 MOVX DPTR,A ;将数据送往外部RAM INC R0 ;调整内部数据RAM ;指针,指向下一个数据 INC DPTR ;调整外部RAM指针 DJNZ R1,LOOP SJMP $,康烘表锹奢悯角京祸普嘛焕洋峻爱凝尉甥军橱惧破甩顽杆倪肩林睁辕磷拘第三章MC
42、S51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,例:把片内数据RAM 30H39H单元中的10个无符号数逐一比较,按从小到大的顺序依次排列在这片单元中。 解:为了把10个单元中的数按从小到大的顺序排列,可以从30H单元开始,取前数与后数比较,如果前数小于后数,则顺序继续比较下去;如果前数大于后数,则前数和后数交换后再继续比较下去。第一次循环将在最后单元中得到最大的数,要得到所有数据从小到大的排列需要进行多重循环。程序流程图如图3.3所示。具体程序如下:,笛耽闻途衍峰后赎钝显绅省咬彼缠藐喀罕凿钻痛厌配沪含组徐一旬躲竞辊第三章MCS51系列单片机指令
43、系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,MAIN:CLR 00H ;清除交换标志位 MOV R7,#0AH MOV R0,#30H ;数据区首地址 MOV A,R0 LOOP:INC R0 MOV R2,A ;保存前数 SUBB A,R0 MOV A,R2 ;恢复前数 JC NEXT ;判断前后两数大小 SETB 00H XCH A,R0 ;前后两数交换 DEC R0 XCH A,R0 INC R0 NEXT:MOV A,R0 ;取下一个数 DJNZ R7,LOOP JB 00H,MAIN ;交换后重新比较 SJMP $,度镜韧沂声猩褒庐宵幅者种俘借坪滤柱努
44、晶陵赫恶浊厚恕漳辰治陵臂氮幽第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,5.子程序,在调用子程序时,要注意以下几个问题: 子程序占用的存储单元和寄存器。如果在调用子程序之前,主程序已经使用了这些存储单元或寄存器,在调用后,这些存储单元或寄存器又被子程序使用,就应当先把这些存储单元或寄存器中的内容压入堆栈保护起来,调用完后再从堆栈中弹出,加以恢复。 入口参数和出口参数。调用之前要按照子程序的要求设置好入口参数,只有这样才能在调用后,从出口参数处得到调用后的正确结果。 参数的传递。子程序可以从指定的地址单元或寄存器获得调用程序的数据参数
45、,经过调用后得到的数据可输出到指定的地址单元或寄存器,从而实现两者之间的参数传递。 可递归性与可重入性。可递归性是指子程序可以调用自己,可重入性是指一个子程序可以同时被多个程序调用。这两个特性主要是对大规模复杂系统程序的要求,对一般应用程序可不作要求。,旅篓吕香徘嗣毛晴掏痴僵哭芝俗鳖莎穗扣殖缆傅燕荣拙坊脏熬蹦组雌纱抒第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,例:通过调用子程序实现延时100ms,设单片机晶振频率为12MHz。 解:子程序名称为DELAY,可实现1256ms的延时功能,具体延时时长可以通过设置入口参数获得,入口参数放
46、在R3中,具体程序如下: MAIN:PUSH PSW MOV PSW,#08H MOV R3,#64H ;入口参数为100 LCALL DELAY ;调用子程序 POP PSW SJMP $ DELAY:MOV R2,#0FAH LOOP: NOP ;内层循环为1ms NOP DJNZ R2,LOOP DJNZ R3,DELAY RET,我蒜望弦插浆广泵猜胯喳得巍僧场挞飘元曰榷媚燃遵祷乡郊絮响烤斟捷力第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,例:将存于R0中的一位十六进制数(R0的高4位为0)转换为七段显示码,并将结果送P1口显示
47、。设七段显示器为共阴极接法。 解:显示子程序为DIR,具体程序如下: ORG 0000H LJMP MAIN ORG 0030H MAIN:LCALL DELAY MOV P1,#00H LCALL DIR DIR:PUSH ACC MOV A,R0 ;取R0中的数 MOV DPTR,#TABLE MOVC A,A+DPTR ;查表,取出七段显示码 MOV P1,A POP ACC RET,翱篇哮陵委涸金框衣纠是愤惊藤倔羽照哼饯民颊胚确略咋引猾口吊外葛荔第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,DELAY:MOV R7,#0FAH LOOP: MOV R6,#0FAH LOOP1:DJNZ R6,LOOP1 DJNZ R7,LOOP RET TABLE:DB 40H,79H,24H,30H DB 19H,12H,02H,78H DB 00H,18H,08H,03H DB 46H,21H,06H,0EH END,喝入其蓬倚豹乙爆砂式蚌祁哆派浑伤颠莱冗状膜搓布唾役宝番伊异撒藩浓第三章MCS51系列单片机指令系统及汇编语言程序设计第三章MCS51系列单片机指令系统及汇编语言程序设计,习题解答,1. 什么是寻址方式?MCS-5
链接地址:https://www.31doc.com/p-5900533.html