#第3章-MCS-51系列单片机的指令系统和汇编语言程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章MCS一51系列单片机的指令系统
和汇编语言程序
3·1汇编指令
3·1·1请阐明机器语言、汇编语言、高级语言三者的主要区别,进一步说明为什么这三种语言缺一不可。
3·1·2请总结:
(1)汇编语言程序的优缺点和适用场合。
(2)学习微机原理课程时,为什么一定要学汇编语言程序?
3·1·3MCS一51系列单片机的寻址方式有哪儿种?请列表分析各种寻址方式的访问对象和寻址范围。
3·1·4要访问片内RAM,可有哪几种寻址方式?
3·1·5要访问片外RAM,有哪几种寻址方式?
3·1·6要访问ROM,又有哪几种寻址方式?
3·1·7试按寻址方式对MCS一51系列单片机的各指令重新进行归类(一般根据源操作数寻址方式归类,程序转移类指令例外)。
3·1·8试分别针对51子系列和52子系列,说明MOV A,direct指令和MOV A,@Rj 指令的访问范围。
3·1·9传送类指令中哪几个小类是访问RAM的?哪几个小类是访问ROM的?为什么访问ROM的指令那么少?CPU访问ROM多不多?什么时候需要访问ROM?
3·1·10试绘图示明MCS一51系列单片机数据传送类指令可满足的各种传送关系。
3·1·11请选用指令,分别达到下列操作:
(1)将累加器内容送工作寄存器R6.
(2)将累加器内容送片内RAM的7BH单元。
(3)将累加器内容送片外RAM的7BH单元。
(4)将累加器内容送片外RAM的007BH单元。
(5)将ROM007BH单元内容送累加器。
3·1·12 区分下列指令的不同功能:
(l)MOV A,#24H 和MOV A.24H
(2)MOV A,R0和MOV A,@R0
(3)MOV A,@R0和MOVX A,@R0
3·1·13设片内RAM 30H单元的内容为40H;
片内RAM 40H单元的内容为l0H;
片内RAM l0H单元的内容为00H;
(Pl)=0CAH。
请写出下列各指令的机器码和执行下列指令后的结果(指各有关寄存器、RAM单元和端口的内容)。
MOV R0,#30H
MOV A,@R0
MOV RI,A
MOV B,@Rl
MOV @R0,Pl
MOV P3,Pl
MOV l0H,#20H
MOV 30H,l0H
3·1.14 已知:(A)=35H,(R0)=6FH,(Pl)=FCH,(SP)=C0H,试分别写出下列指令的机器码及执行各条指令的结果:
(l)MOV R6,A
(2)MOV @R0,A
(3)MOV A,廿90H
(4)MOV A,90H
(5)MOV 80H,廿81H
(6)MOVX @R0,A
(7)PUSH A
(8)SW AP A
(g)XCH A,R0
3·1.15 已知:(A)=02H,(Rl)=7FH,(DPTR)=2FFCH, 片内RAM(7FH)=70H,片外RAM (FFEH)=llH,ROM (FFEH)=64H,试分别写出下列指令的机器码及执行各条指令的结果。
(l)MOV A,@Rl
(2)MOVX @DPTR,A
(3)MOVC A,@A+DPTR
(4)XCHD A,@Rl
3·1.16 已知:(A)=78H,(Rl)=78H,(B)=04H,C=l,片内RAM (78H)=DDH,片内RAM (80H)=6CH,试分别写出下列指令的机器码及执行各条指令的结果(如涉及标志位,也要写出)。
(l)ADD A,@Rl
(2)ADDC A,78H
(3)SUBB A,#77H
(4)INC Rl
(5)DEC 78H
(6)MUL AB
(7)DIV AB
(8)ANL 78H,#78H
(9)ORL A,#0FH
(10)XRL 80H,A
3·1·17 已知:C=0,累加器和Rl内容分别为无符号数甲和乙,间:执行指令ADDC A,Rl后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?
(1)甲为02H,乙为FFH
(2)甲为02H,乙为F0H
3·1·18 已知:C=0,累加器和Rl内容分别为补码表示的带符号数甲和乙,间:执行指令ADDC A,Rl后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?
(1)甲为78H,乙为05H
(2)甲为88H,乙为FBH
(3)甲为78H,乙为69H
(4)甲为88H,乙为97H
(5)甲为7FH,乙为FEH
(6)甲为7FH,乙为80H
3·1·19 已知:C=0,累加器和Rl内容分别为无符号数甲和乙,间:执行指令STTBB A,Rl 后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?
(1)甲为02H,乙为FFH
(2)甲为FFH,乙为02H
3·1·20 已知:C=0,累加器和Rl内容分别为补码表示的带符号数甲和乙,问:执行指令SUBB A,R1后,进位位、符号位和溢出位将各为何值?累加器的内容为何,该如何读取?
(1)甲为02H,乙为0lH
(2)甲为0lH,乙为02H
(3)甲为FFH,乙为FFH
(4)甲为FEH,乙为FFH
(5)甲为04H,乙为FFH
(6)甲为FFH,乙为04H
(7)甲为7FH,乙为ClH
(8)甲为ClH,乙为7FH
3·1·21请对下列各组数分别计算"和"、"或"、"异或"的结果:
(1)10011010和00001111
(2)11010011和01011010
(3)11001100和00110011
(4)10101010和11111111
3·1·22 为达到下列要求,请说明应采用何种逻辑操作、采用什么操作数。
要求不得改变各未涉及位的内容。
(1)使累加器的最低位置"1"
(2)清除累加器的高4位
(3)使A.2和A.3置"1"
(4)清除A·.3、A.4、A.5、A.6
3·1·93请总结运用"和"、"或"、"异或"指令对字节内容进行修改的各种办法。
3·1·94 写出下列各条指令的机器码,并逐条写出依次执行每一条后的结果和PSw的内容:
(l)CLR A
(2)MOV A,#9BH
(3)MOv B,#0AFH
(4)ADD A,B
3,1·95请详细说明RET和RETI这两条指令的区别。
3·1·96 已知:(A)=0,(Rl)=40H.片内RAM(30H)=0lH,FIRST=2000H,SECOND
=2050H,试分别写出下列指令的机器码及执行各条指令的结果:
(l))FIRST:AIMP SECOND
(2)FIRST:LIMP SECOND
(3)FIRST.SIMP SECOND
(4)FIRST.JZ SECOND
C5)FIRST:CINE A,30H,SECOND
(6)FIRST:LCALL SECOND
(7)SECOND:DJNZ Rl,FIRST
3·1·97 已知:P1.7=1,A.0=0,C=l,FIRST=l000H,SECOND=l020H,试分别写出
下列指令的机器码及执行各条指令的结果:
(l)MOV 26H,C
(2)CPL A.0
(3)CLR Pl.7
(4)ORL C,/P1.7
(5)FIRST:lC SECOND
(6)FIRST:JNB A.0,SECOND
(7)SECOND:JBC Pl.7,FIRST
3·1·28要选用工作寄存器3组,请采用三种不同的指令实现之。
3·1·29列举三种能使累加器A内容清零的指令,并比较其优、缺点。
3·1·30 16位地址共涉及两个字节,请统计在哪些场合按照"先低后高"规则处理,哪些场合却按照"先高后低"规则。
3·1·31分组讨论:
(1)算术操作类指令对标志位的影响。
(2)逻辑操作类指令对字节内容的修改。
(3)程序转移类指令长转移、绝对转移、短转移、绝对转移和相对转移、无条件转移和条件转移的区分;绝对转移指令机器码和转移范围的确定;相对转移指令相对偏移量的计算; 散转指令的查表转移;调用和返主指令的堆栈操作;比较转移指令的格式和功用。
(4)位操作类指令中直接寻址位的表示方式。
3·1·39请统计MCS一51系列单片机有哪些指令可用于数据输入和输出?
3·1·33 请统计MCS一51系列单步机有哪些指令可用于修改并行I/O口端口寄存器的内容?
3·1·34综述MCS一51系列单片机指令系统的特点、所长和所短。
已学Z80的学生,试比较两种指令系统的优、缺点。
3·1·35请按MCS一51系列单片机指令的大类,分别统计其单字节、双字节、三字节指令数和单周期、双周期、四周期指令数。
3·1·36试按图3-1所示的格式,整理出MCS一51系列单片机各种指令的速查表(由机器码的第一字节查指令,或倒查)。
机器码助记符操作码操作数源程序
目标程序汇编指令汇编程序汇编语言
汇编语言程序汇编机器汇编人工汇编
3·1.38经过汇编后,下列各条语句的标号将是什
么数值?
ORG 2000H
TABLE: DS l0
WORD: DS l5,20,25,30
FANG: EQU l000H
BEGIN:MOV A,R0
3·1·39下列程序段经汇编后,从2000H开始的各
有关存储单元的内容将是什么? ORG 2000H
TAB: DS 5
DB 10H, 10
DW 2100H
ORG 2050H
DW TAB
DB "WORK"
3·1·40下列程序段经汇编后,从1000H 开始的各有关存储单元的内容将是什么? ORG l000H
TABl: EQU 1234H
TAB2:EQU 3000H
DB "START"
DW TABl ,TAB2
3·2汇编语言程序
3·2·1综述汇编语言程序的书写格式。
3·2·2要将片内RAM 0FH 单元的内容传送去专用寄存器B ,对OFH 单元的寻址可有三种 办法:
(l)R 寻址 (2)R 间址 (3)direct 寻址
请分别编出相应程序,比较其字节数、机器周期数和优缺点。
3·2·3设 (R0)=7EH, (DPTR)=l0FEH
片内RAM 7E 单元的内容为0FFH
7F 单元的内容为38H
试为下列程序的每条指令注释其执行结果。
INC @R0
INC R0
INC @R0
INC DPTR
INC DPTR
TNC DPTR
3·2·4试编程:引用"和"运算,判断某8位二进制数是奇数还是偶数。
3·2·5试编程:引用"或"运算,使任意8位二进制数
的符号位必为"1"。
3·2·6请思考:引用"异或"运算,怎样可使一带符号
数的符号位改变、数据位不变;怎样可使该数必然变
"0"
3·2·7要选择工作寄存器组,可有几种编程办法?
3·2·8 某压力测试的线性处理程序如下,如A/D 转换器
的输出为02H ,问执行程序后(A )=?
MOV P1,#0FFH
MOV A ,P1
MOVC A ,@A+PC
TAB: DB 00H
DB 00H
DB 01H
DB 02H
;
DB FEH
END
3·2·9 设ROM 、片内RAM 、RAM 各有关单元的内容示如下图,问执行下列程序段后
(A )=?
0000 AJMP
030H
ORG 0030H
0030 MOV R0,#32H
MOV A,@R0
MOV R1,A
MOVX A,@R1
MOVC A,@A+DPTR
3·2·10若在片内RAM 30H单元中有2位压缩的BCD码95H,间执行下列程序后,片内RAM 30H单元的内容是什么?31H、32H的内容又是什么?并写出BCD码十进制调整的过程。
MOV R0,#30H
MOV A,@R0
ANL A,#0FH
MOV R3,A
MOV A,@R0
SWAP A
ANL A,#0FH
ADD A,R3
DA A
MOV @R0,A
MOV R3,A
INC R0
ANL A,#0FH
MOV @R0,A
INC R0
MOV A,R3
ANL A,#0F0H
SWAP A
MOV @R0,A
RET
3·2·11有程序如下:
CLR C
CLR RS1
CLR RS0
MOV A,#38H
MOV R0,A
MOV 29H,R0
SETB RS0
MOV Rl,A
MOV 26H,A
MOV 28H,C
请: (1)区分哪些是位操作指令?哪些是字节操作指令?
(2)写出程序执行后,片内RAM有关单元的内容。
(3)译成机器码。
(4)按汇编语言程序的标准格式书写,要求有各条指令的存放地址和必要的注释。
(5)如f OSC=l2MHz,计算这段程序的执行时间。
3·2·12 试编程:将两个4位二进制数并存于一个字节。
3·2·13 试编程:将存于片内RAM 40H、41H单元中的16位数求补,结果放回原单元(低字节放40H单元)。
3·2·14 试编程:有两双字节压缩的BCD码数相加,设该两待加数分别按先低后高原则存放在30H、31H和40H、41H单元,和要求放回30H、31H单元。
3·2·15 试编程:将累加器A内容低4位送片外RAM 7AH单元,高4位送片外RAM 7BH 单元,7AH、7BH单元的高4位均清零。
3·2·16试编程:将片内RAM 50H、51H单元两个无符号数中较小的数存于60H单元。
3·2·17 试编程:将片内RAM 60H~69H单元中的l0个数相加,和的低8位存入7EH,高8位存入7FH。
3·2·18 试编程:统计从片内RAM 60H单元起所存60个数中"0"的个数,并存入工作寄存器R7。
3·2·19试编程:将ROM中自2000H单元起的100个数,按序移至片外RAM自2080H单元起的内存区间去。
3·2·20 试编程:将ROM中以TAB为初址的32个单元的内容依次传送到片外RAM以00H为初址的区域去(规定用查表指令)。
3·2·21试编写一段子程序,将片外RAM 20H单元中压缩的BCD码转换成共阴的七段笔划信息码,存于片内RAM 20H、21H单元,以待显示(七段笔划信息码的最高位为0)。
3·2·22 请编一将A中内容乘10的程序,要求:
(1)不可用MUL指令
1)乘积≤255 2)乘积﹥255
(2)可用MUL指令
1)乘积≤255 2) 乘积>255
规定乘积放在片内RAM的30H单元或30H、0lH单元。
3·2·23 教材例3·4是按总和仍为两位BCD码、无溢出进行编程的;如有溢出,请重编程序。
3·2·24 设教材例3·6程序中的多字节数为010000H,试剖析程序执行的经过和结果。
3·2·25 教材例3·7如不是两个数、而是n个数,请重编程序。
(如有二数相等,不必建起标志位)。
3·2·26 CJNE指令执行何种操作?上述例3·7示出的程序为什么不用这一指令?如改用这一指令,程序将作何种改动?并请将重编后的汇编语言源程序译成机器码。
3·2·27设晶振为12MHz,请详细剖析(包括计算)下列程序段的性质和用途:
0B0 79 63 DELAY:MOV Rl,#63H
0B2 00 DLl: NOP
0B3 00 NOP
0B4 D9 FC DJNZ Rl,DLl
0B6 22 RET
3·2·28请编写一个能延时1.5ms的子程序,要列出计算。
Tcy=1us。
3·2·29请编写两段子程序,分别用指令延时法和定时器定时l0ms,设晶振为12MHz。
3·2·30设晶振为12MHz,请编写二段子程序,分别用指令延时法和定时器实现30ms延时。
3·2·30设晶振为12MHz,请编写二段子程序,分别用指令延时法和定时器实现30ms延时。
3·2·31某单片机系统:f OSC=l2MHz,定/计0用于20ms定时,定/计
1用于100次计数,定/计0和定/计1均要求重复工作。
问:
(1)外部计数脉冲应从何引脚输入?
(2)试编能达到上述要求的程序。
3·2·32请回答:教材例3·19为什么按"TH0、TL0、TH0"的次序读,却不按"TL0、TH0、TL0"的次序读。
3·2·33阅读下列程序,
(1)说明该程序的功能。
(2)填出所缺的机器码。
(3)试修改程序,使片内RAM的内容达到右下图所示的结果。
7A__ MOV R2,#0AH
__ __ MOV R0,#50H
E4 CLR A
E6 LOOP: MOV @R0,A
08 INC R0
DA__ DJNZ R2,LOOP
DONE:
3·2·34 阅读下列程序,并要求:
(1)说明程序的功能。
(2)写出涉及的寄存器及片内RAM单元的最后结果。
MOV R0,#40H
MOV A,@R0
INC R0
ADD A,@R0
INC R0
MOV @R0,A
CLR A
ADDC A,#0
INC R0
MOV @R0,A
3·2·35 同上题要求,程序如下
MOV A,61H
MOV B,#02H
MUL
AB
ADD A,62H
MOV 63H,A
CLR A
ADDC A,B
MOV 64H,A 3·2·36 同上题要求,程序如下
CLR C
MOV A,R3
RRC A
MOV R3,A
MOV A,R4
RRC A
MOV R4,A 3·2·37 同上题要求,程序如下:
MOV R0,#31H
MOV A,@R0
SWAP A
DEC R0
XCHD A,@R0
MOV 40H.A 3·2·38 同上题要求,程序如下:
MOV R0,#60H
MOV A,#40H
MOV @R0,A
MOVX @R0,A 3·2·39 同上题要求,程序如下:
MOV Rl,#30H
MOVX A,@Rl
MOV @Rl,A
TNC Rl
MOVX A,@Rl
MOV @Rl,A
3·2.40
同上题要求,程序如下:
ORG l000H ABS: MOV R0,#38H
MOV Rl,#48H
MOV R2,#06H LOOP: MOV A,@R0
JNB A,7,NEXT
CPL A
SETB A.7
INC A NEXT: MOV @Rl,A
INC R0
INC Rl
DJNZ R2,LOOP
DONE:
3·2·41 阅读下列程序,写出程序执行后片外RAM 8008H和800AH单元以及DPTR、Rl、A的内容。
ORG 0100H
START: MOV DPTR, #BLK1
MOV R2, #4
MOV R1, #30H
MOV R0, #30H
LOP1: MOVX A, @DPTR
MOV @R1, A
INC DPTR
INC R1
DJNZ R2, LOP1
MOV R2, #4
CLR C
LOP2: MOVX A, @DPTR
ADDC A, @R0
DA A
MOV @R1, A
INC DPTR
INC R0
INC Rl
DJNZ R2, LOP2
MOV R2, # 4
LOPS: MOV A, @R0
MOVX @DPTR.A
INC R0
INC DPTR
DJNZ R2,LOP3
HERE: SJMP HERE
ORG 8000H
BLKl: DB 96H,74H,32H,l6H
BLK2: DB 65H,94H,87H,29H
BLK3: DS 4
END
3·2·42 阅读下列程序,写出程序执行后片外RAM 7008H、700AH 和700FH 单元以及DPTR、Rl的内容。
ORG0 200H
MOV DPTR,#BLOCK
MOV R0,#30H
MOV Rl,#40H
MOV R2,#08H
MOV R3,#00H
MOV R4,#00H
CHODEV: MOVX A,@DPTR
MOV R5,A
ANL A,#0lA
JNZ DD
MOV A,R5
MOV @R0,A
INC R0
INC R3
SJMP NEXT
DD: MOV A,R5
MOV @Rl,A
INC R1
INC R4
NEXT: INC DPTR
DJNZ R2,CHODEV
MOV R0,#30H
MOV Rl,#40H
EVMOV: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R3,EVMOV
ODMOV: MOV A,@Rl
MOVX @DPTR,A
INC R1
INC DPTR
DJNZ R4,ODMOV
HERE: SJMP HERE
ORG 7000H
BLOCK DB 69H,47H,32H,61H
DB 56H,49H,27H,78H
BUFFERl DS 3
BUFFER2 DS 5
3·2·43 阅读下列程序,写出程序执行后片外RAM8003H和8005H单元以及DPTR、R2,R0的内容。
ORG 0200H
START: MOV R0,#30H
MOV Rl,#30H
MOV R2,#2
MOV DTPR,#BUFFER
HETOAS: MOVX A,@DPTR
MOV R3,A
SWAP A
ANL A,#0FH
ADD A,#90H
DA A
ADDC A,#40H
DA A
MOV @Rl,A
INC R1
MOV A,R3
ANL A,#0FH
ADD A,#90H
DA A
ADDC A,#40H
DA A
MOV @Rl,A
INC DPTR
INC R1
DJNZ R2,HETOAS
MOV R2,#4
LOOP: MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R2,LOOP
HERE: SJUMP HERE
ORG 8000H
BUFFER DB 2AH,49H
BLOCK DS 4
END
3·2·44 阅读下列程序,写出程序执行后片外RAM 2002H和200l3H单元以及DPTR、SP、R3的内容。
注意: 本程序在RESET后执行
ORG 0100H
MOV DPTR, #DA T
MOVX A, @DPTR
MOV R0, A
SW AP A
ANL A, #0FH
ACALL BTOA
MOV R4, A
MOV A, R0
ANL A, #0FH
ACALL BTOA
INC DPTR
MOVX A, @DPTR
MOV Rl, A
SW AP A
ANL A, #0FH
ACALL BTOA
MOV R6, A
MOV A, Rl
ANL A, #0FH
ACALL BTOA
MOV R7, A
INC DPTR
MOV A,R4
MOVX @.DPTR,A
INC DPTR
MOV A.R5
MOVX @DPTR,A
INC DPTR
MOV A,R6
MOVX @DPTR,A
INC DPTR
MOV A,R7
MOVX @ DPTR,A HERE: SJMP HERE
ORG 0200H BTOA: MOV R2,#08H
MOV R3,#00H
ORL A.#30H LOP. RLC A
JNC NEXT
INC R3
NEXT: DJNZ R2,LOP
RLC A
PUSH ACC
MOV A,R3
JNB ACC.O,CONT
POP ACC
ORG A,#80H
SJMP GONE CONT: POP ACC GONE: RET
ORG 2000H
DA T: DW 7954H
DW 0000H
END
··共·
3·2·45 阅读下列程序写出程序执行后片外RAM 8000H和8002H单元以及Rl、R3、R4的内容。
ORG 0200H
MOV DPTR,#DAT
MOV R0,#0
MOV Rl,#1
MOV R2.#2
MOVX A,@DPTR
MOV R3,A
INC DPTR
MOVX A,@DPTR
ORL A,R3
JZ HERE
MOV DPTR,#DAT
LOOPl: MOV R3,#8
LOOP2: MOVX A.@DPTR
ANL A,Rl
MOV R4,A
JZ NEXT
TNC R0
NEXT: MOV A.Rl
RL A
MOV Rl.A
DJNZ R3,LOOP2
INC DPTR
DJNZ R2,LOOPl
MOV A,R0
MOVX @DPTR,A
HERE: SJMP HERE
ORG 8000H
DAT: DW 4B9FH
DB 0
END
3·2·46阅读下列程序,设f OSC=l2MHz,请回答:
(1)该程序每隔多少时间执行一次检测程序?是怎样安排达到的?
(2)定/计0及定/计1各在什么情况下溢出?列出您的计算。
(3)为程序作出注释。
0000H LJMP 0030H
;主程序
ORG 0030H
START: CLR Tl
MOV TMOD,#5lH
MOV IE,#8AH
MOV TH0,#0D8H
MOV TL0,#0F0H
MOV THl,#0E8H
MOV TLl,#90H
SETB TR0
SETB TR1
;
;
;中断服务程序
ORG 000BH
LJMP 0080H
ORG 0080H
TOOV: SETB T1
MOV TH0,#0DBH
MOV TL0,#0F0H
CLR T1
RETI
ORG 00lBH
LJMP 0090H
ORG 0090H
T1OV: MOV THl,#0E8H
MOV TLl,#90H
;
; ;此起为检测程序
;
RETI
3·2·47阅读本书实验部分第3章"实验五P0口扩展I/O 口"参考程序中自指令MOV TMOD,#50H起的程序,仔细钻研其中定时器/计数器0、定时器/计数器l、R6、R7的用法,写出您的理解、分析和计算。
3·2·48阅读参考书籍,钻研MCS—51系列单片机在怎样的情况下才能单步执行用户程序?。