单片机程序分析.docx
《单片机程序分析.docx》由会员分享,可在线阅读,更多相关《单片机程序分析.docx(22页珍藏版)》请在冰点文库上搜索。
单片机程序分析
有一长度为10字节的字符串寄存在8031单片机内部RAM中,其首地址为40H。
要求将该字符串中每一个字符加偶校验位。
(以挪用子程序的方式来实现。
)
源程序如下:
ORG1000H
MOVR0,#40H
MOVR7,#10
NEXT:
MOVA,①
ACALLSEPA
MOV@R0,A
INCR0
DJNZ②,NEXT
SJMP$
SEPA:
ADDA,#00H
③,SRET
ORLA,④
SRET:
⑤
1@R0②R7③JNB④#80H⑤RET
4设内部RAM(30H)=5AH,(5AH)=40H,(40H)=00H,端口P1=7FH,问执行以下指令后,各有关存储单元(即R0,R1,A,B,P1,30H,40H及5AH单元)的内容如何?
(8分)
MOVR0,#30H;R0=30H
MOVA,@R0;A=5AH
MOVR1,A;R1=5AH
MOVB,R1;B=5AH
MOV@R1,P1;(5AH)=7FH
MOVA,P1;A=7FH
MOV40H,#20H;(40H)=20H
MOV30H,40H;(30H)=20H
解:
每一条指令执行后的结果如注释字段所标。
最后结果为:
R0=30H,R1=5AH,A=7FH,B=5AH,P1=7FH,(30H)=20H,(40H)=20H,(5AH)=7FH。
四、程序阅读与分析题
一、试阅读下面的程序,指出该程序终止后累加器ACC和寄放器TH0的值,并说明该程序完成了如何的功能。
ORG0000H
MOVSP,#60H
MOVA,#10H
MOVTH0,#20H
PUSHACC
PUSHTH0
POPACC
POPTH0
END
答:
利用堆栈互换了ACC和TH0的内容,(A)=20H,(TH0)=10H
二、程序段如下,试说明其功能。
MOVR0,#50H
MOVR1,#60H
MOVA,@R0
ADDA,@R1
MOV@R0,A
INCR0
INCR1
MOVA,@R0
ADDCA,@R1
MOV@R0,A
MOV00H,C
答:
双字节无符号数加法。
被加数寄存在内部RAM的51H、50H单元,加数寄存在内部RAM的61H、60H单元,相加的结果寄存在内部RAM的51H、50H单元,进位寄存在位寻址区的00H位中。
五、综合应用题
3、设80C51单片机晶振频率为6MHz,按时器T0工作于方式1。
要求80C51以中断方式工作并在引脚输出周期为500微秒的方波。
试:
计算初值、编写含有初始化功能的主程序和完成方波输出的中断效劳程序。
答:
机械周期为2微秒。
定不时刻250微秒。
需要计数N=125
初值为65536-125=65411=FF83H,因此(TH0)=FFH,(TL0)=83H
工作方式设置:
00000001B,即(TMOD)=01H
主程序:
中断效劳程序:
(整体结构!
)
MOVTMOD,#01HMOVTH0,#0FFH
MOVTH0,0FFHMOVTL0,#83H
MOVTL0,#83HCPL
SETBEARETI
SETBET0
SETBTR0
SJMP$
四、读程序(每题4分,共20分)
1.执行以下程序段中第一条指令后,
(1)()=__0__()=__0___,()=____0_____;执行第二条指令后,
(2)()=_____1____,()=_____1____,()=______1___.
ANLP1,#73H
ORLP1,#38H
2.以下程序段执行后,(A)=__0DH_______,(B)=_____11H____.
MOVA,#0FBH
MOVB,#12H
DIVAB
3.以下程序段执行后,(R0)=____7EH_____,(7EH)=__FFH_______,(7FH)=____3FH_____.
MOVR0,#7FH
MOV7EH,#0
MOV7FH,#40H
DEC@R0
DECR0
DEC@R0
4.已知(SP)=09H,(DPTR)=4567H,在执行以下指令后,(SP)=___0BH______,内部RAM(0AH)=____67H_____,(0BH)=___45H______
PUSHDPL
PUSHDPH
5.以下程序中注释的数字为执行该指令所需的机械周期数,假设单片机的晶振频率为6MHz,问执行以下程序需要多少时刻
MOVR3,#100;1
LOOP:
NOP;1
NOP
NOP
DJNZR3,LOOP;2
RET;2
解:
一个机械周期为2μs
执行程序所需时刻T=2μs*(5×100+3)=1006μs≈1ms
五、编程题(每题4分,共20分)
1.请利用位操作指令,实现以下逻辑操作:
=∧∨∧
解:
.先进行与操作,再进行或操作程序如下:
MOVC,
ANLC,P2,0
MOV12H,C
MOV,C,A
ANLC,
ORLC,12H
MOV,C
RET
2.在外部RAM首地址为TABLE的数据表中有10个字节数据,请编程将每一个字节的最高位无条件地置1.
解:
MOVR2,#10
MOVDPRT,#TABLE
LOOP:
MOVXA,@DPRT;取一数
ORLA,#80H;最高位置1
MOVX@DPTR,A;写回原地址
1NCDPTR;处置下一单元
DJNZR2,LOOP
RET
3.已知内部RAM30H单元开始寄存20H个数据,将其传送到外部RAM的0000H单元开始的存储区,请编程实现。
解:
MOVR0,#30H
MOVR1,#00H
MOVR2,#20H
LOOP:
MOVA,@R0;取数
MOVX@R1,A;存数
1NCR0
1NCR1
DJNZR2,LOOP
RET
4.已知8个无符号数之和存于R3R4,求其平均值,结果仍存于R3R4中,请编程实现(R3为高字节)。
解:
利用移位指令作除8操作,程序如下:
MOVR2,#3
LOOP:
CLRC
MOVA,R3
RRCA;高字节除以2,末位移入C,高位补0
MOVR3,A;暂存高字节
MOVA,R4
RRCA;低字节除以2,高字节末位移入低字节高位
MOVR3,A
DJNZR2,LOOP
RET
5.两个字符串别离寄存在首地址为42H和52H的内部RAM中,字符串长度放在41H单元,请编程比较两个字符串。
假设相等,那么把数字00H送40H单元,不然把0FFH送40H单元。
解:
有一个字节不等,整个字符串不相等,所有字节相等,两字串才相等
MOVR0,#42H
MOVR1,#52H
LOOP:
MOVA,@R0
CLRC;不相等,FFH→40H
SUBBA,@R1
JNZLOOP1;相等时,比较下一字节
INCR0
INCR1
DJNZ41H,LOOP
MOV40H,#0;所有字符均相等,那么两字串相等。
RET
LOOP1:
MOV40H,#0FFH
RET三.计算题(22分)
1.(A)=3BH,执行ANLA,#9EH指令后,(A)=(CY)=
2.JNZREL为2B指令,放于1308H,转移目标地址是134AH,求偏移量REL=
3.假设(A)=C3H,(R0)=AAH,执行ADDA,R0后,(A)=(CY)=
(OV)=(AC)=
4.假设(A)=50H,(B)=A0H,执行MULAB后,(A)=(B)=(CY)=
(OV)=
5.SJMP0E7H为2B指令,放于F010H,目标地址=
四.阅读并分析程序(28分)
1.2506HM5:
MOVSP,#58H
2509HMOV10H,#0FH
250CHMOV11H,#0BH
250FHACALLXHD;PC+2
PC,
MOV20H,11H
2514HM5A:
SJMPM5A
XHD:
PUSH10H
PUSH11H
POP10H
POP11H
RET
问:
(1)执行POP10H后堆栈内容?
(2)执行M5A:
SJMPM5A后,(SP)=(20H)=
2.A程序存储空间表格如下:
地址
2000H
2001H
2002H
2003H
。
。
。
。
。
内容
3FH
06H
5BH
4FH
。
。
。
。
。
已知:
片内RAM的20H中为01H,执行以下程序后(30H)=
MOVA,20H
INCA
MOVDPTR,#2000H
MOVCA,@A+DPTR
CPLA
MOV30H,A
SJMP$
3.(R0)=4BH,(A)=84H,片内RAM(4BH)=7FH,(40)=20H
MOVA,@R0
MOV@R0,40H
MOV40H,A
MOVR0,#35H
问执行程序后,R0=A=4BH=40H=
4.若PSW=00,执行以下程序后,PSW的列位状态如何?
MOVA,#0FBH
MOVPSW,#10H
ADDA,#7FH
CY
AC
OV
P
OF
RS1
五.程序填空(10分)
1.数据块传送,将RAM从30H开始的持续32个单元的内容传递给片内RAM从60H开始的持续32个单元。
ORG1000H
MOVR7,_____
MOVR0,#30H
MOVR1,#60H
LOOP:
MOVA,@R0
MOV_____,A
INCR0
INCR1
DJNZR7,_____
SJMP$
END
2.将4个单字节数放片内30H~~33H,它们求和结果放在片内40H,41H单元。
ORG1000H
MOVR7,#04H
MOVR0,30H
CLRA
MOV41H,A
LOOP:
ADDA,@R0
JNCNEXT
INC_____
NEXT:
INC_____
DJNZR7,LOOP
MOV40H,A
SJMP$
END
3.RAM中40H单元内存有一个十六进制数,把那个数转换为BCD码的十进制数,BCD码的十位和个位放在累加器A中,百位放在R2中。
ORG2200H
MOVA,_____
MOVB,#64H
DIVAB
MOVR2,A
MOVA,_____
XCHA,B
DIVAB
SWAP_____
ORLA,B
SJMP$
END
4.编程序将片内40H-46H单元内容的高4位清零,维持低4位不变。
ORG1000H
MOVR7,#07H
MOVR0,_____
LOOP:
MOVA,@R0
ANLA,_____
MOV@R0,A
INCR0
DJNZR7,LOOP
SJMP$
END
三.计算题:
(22分)
(1)(A)=1AH(CY)=不受阻碍
(2)REL=40H
(3)(A)=6DH(CY)=1(OV)=1(AC)=0
(4)(A)=00H(B)=32H(CY)=总为0(OV)=1
(5)目标地址=EFF9H
四:
阅读并分析程序(28分)
(1)1)执行POP10H后堆栈内容?
(SP)=5AH
2)执行M5A:
SJMPM5A后,(SP)=58H(20H)=0FH
(2)(30H)=5BH
(3)R0=35HA=7FH4BH=20H40H=7FH
(4)
CYACOVPOFRS1
110101
五、程序填空(10分)
1._#20H___R1____LOOP____
2.__41H_____R0___
3.__40H____#0AH______A___
4._#40H______#0FH___
四、分析程序并写出结果:
(共4题,每题5分)
1.已知(R0)=20H,(20H)=10H,(P0)=30H,(R2)=20H,执行如下程序段后(40H)=
MOV@R0,#11H
MOVA,R2
ADDA,20H
MOVPSW,#80H
SUBBA,P0
XRLA,#45H
MOV40H,A
2.已知(R0)=20H,(20H)=36H,(21H)=17H,(36H)=34H,执行进程如下:
MOVA,@R0
MOVR0,A
MOVA,@R0
ADDA,21H
ORLA,#21H
RLA
MOVR2,A
RET
那么执行终止(R0)=(R2)=
3.执行下面一段程序;
MOVSP,#60H
MOVA,#10H
MOVB,#01H
PUSHA
PUSHB
POPA
POPB
A,B的内容是:
(A)=(B)=
4.设在31H单元存有#23H,执行下面程序:
MOVA,31H
ANLA,#0FH
MOV41H,A
MOVA,31H
ANLA,#0F0H
SWAPA
MOV42H,A
则(41H)=(42H)=
1.(20H)←11H
(A)←20H
(A)←(A)+(20)
(CY)=1
(A)-(P0)-(CY)→(A)即(A)←00H
(A)+45H→(A)即(A)←45H
(40H)←45H
2.(A)←((R0))(A)=36H
(R0)←(A)(R0)←36H
(A)←((R0))(A)←34H
(A)←(A)+(21H)34H+17H=4BH
(A)←(A)21H4BH21H=6BH
(A)←D6H
(R2)←D6H
(R0)=36H(R2)=D6H
3.(A)=01H(B)=10H
4.(41H)=03H(42H)=02H
有一长度为10字节的字符串寄存在8031单片机内部RAM中,其首地址为40H。
要求将该字符串中每一个字符加偶校验位。
(以挪用子程序的方式来实现。
)
源程序如下:
ORG1000H
MOVR0,#40H
MOVR7,#10
NEXT:
MOVA,①
ACALLSEPA
MOV@R0,A
INCR0
DJNZ②,NEXT
SJMP$
SEPA:
ADDA,#00H
③,SRET
ORLA,④
SRET:
⑤
1@R0②R7③JNB④#80H⑤RET
1.执行以下程序段后,(P1)=_______。
9BH
MOVP1,#5DH
CPL
CPL
CLR
SETB
1、设(A)=38H,R0=28H,(28H)=18H,执行以下程序后,(A)=0E7H
ORLA,#27H
ANLA,28H
XCHDA,@R0
CPLA
2、设(A)=38H,(20H)=49H,PSW=00H,(B)=02H,填写以下中间结果。
SETBC
ADDCA,20H(A)=82H(CY)=0(AC)=1
RLCA(A)=04H(CY)=1(P)=1
MULAB(A)=08H(B)=00H(OV)=0
2.执行以下程序段后,(A)=_______,(CY)=____。
(A)=8BH(或B)(CY)=不阻碍
MOVA,#C5H
RLA
3.以下程序段执行后,(R0)=_______,(7EH)=____,(7FH)=_______。
MOVR0,#7EH
MOV7EH,#0FFH
MOV7FH,#40H
1NC@R0
1NCR0
1NC@R0(R0)=7FH(7EH)=00H(7FH)=41H
4.已知(SP)=60H,子程序SUBTRN的首地址为0345H,现执行位于0123H的ACALLSUBTRN双字节指令后,(PC)=___,(61H)=_______,(62H)=____。
.(PC)=0345H(61H)=25H(62H)=01H
5.阅读以下程序,说明其功能。
(data)×10操作
MOVR0,#data
MOVA,@R0
RLA
MOVR1,A
RLA
RLA
ADDA,R1
MOV@R0,A
RET
二、分析程序并写出结果:
(每题5分,共20分)
1.已知(R0)=20H,(20H)=10H,(P0)=30H,(R2)=20H,执行如下程序段后
MOV@R0,#11H
MOVA,R2
ADDA,20H
MOVPSW,#80H;含义?
SUBBA,P0
MOV40H,A
结果是:
(40H)=
(20H)←11H
(A)←20H
(A)←(A)+(20)
(CY)=1
(A)-(P0)-(CY)→(A)即(A)←00H
(A)+45H→(A)即(A)←45H
(40H)←45H
2.已知(R0)=20H,(20H)=36H,(21H)=17H,(36H)=34H,执行进程如下:
MOVA,@R0
MOVR0,A
MOVA,@R0
ADDA,21H
ANLA,#21H;与
RLA;左移
MOVR2,A
那么执行终止(R0)=36H(R2)=D6H
说明以下伪操作的作用
ORG2000H(概念地址起点为2000H)
LIMITEQU200(LIMIT等值于200)
HBD2EQUHBDTW(HBD2等值于HBDTW)
JATB:
DW2200H(概念字,标号JATB处持续寄存两个字节:
0022)
2)通过汇编后,以下各条语句的标号应取什么值?
ORG2800H
TABLE:
DS0EH(2800H~280EH保留)
WORD:
DB‘WORKER’,15,0A(280FH:
57H4FH52H4BH45H52H15H0AH)
FANGEQU100H(伪指令不占内存)
ONEEQU3400H(伪指令不占内存)
BEGIN:
LDA,R0(程序开始的地址:
2817H)
3)说明执行如下指令后,寄放器A、中的内容。
MOVA,#78H
SWAPA
ANLA,#0FH(A=07H)
1说明以下程序的功能
1CLRA
MOVR0,#30H
LOOP0:
CJNE@R0,#00H,LOOP1
INCA
LOOP1:
INCR0
CJNER0,#3FH,LOOP0
HERE:
SJMPHERE
结果A中的内容是什么?
(是30H~3EH中0的个数)
②MOVSP,#30H
PUSH50H
POP40H
该程序起什么作用?
(将50H单元的内容传送到40H单元)
③设A的内容为BCD码68H,执行以下指令:
A中结果是什么?
ADDA,#09H;A中内容=(77H)仍是(71H)
DAA
1、内部RAM数据及P1口数据如以下图所示,试分析下段指令执行后的结果。
MOVA,#03H;A=03H
SWAPA;A=30H
MOVR0,A;A=30H;R0=30H
MOVA,@R0;A=50H
ANLA,#F0H;A=50H
MOVR1,A;R1=50H
MOVB,@R1;B=10H
MOV@R1,P1;R1=50H;(50H)=E6H
MOVP2,P1;P2=E6H
CPL;P1=F6H
ORLC,;C=1
上段指令执行后:
(10H)=00H;(30H)=50H;(50H)=E6H;
P1=F6H;P2=E6H。
3、简述80C51的寻址方式?
各涉及哪些存储器空间?
答:
当即数寻址:
程序存储器ROM。
直接寻址:
片内RAM低128B和特殊功能寄放器。
寄放器寻址:
R0~R7,A,B,C,DPTR
寄放器间接寻址:
片内RAM低128B,片外RAM。
变址寻址:
程序存储器64KB。
相对寻址:
程序存储器256B范围。
位寻址:
片内RAM的20H~2FH字节地址,部份特殊功能寄放器。
4、简述程序状态字寄放器PSW中列位的含义。
答:
程序状态字寄放器PSW:
程序状态字寄放器PSW:
是一个8位寄放器,用来寄存当前指令执行后操作结果的某些特点,以便为下一条指令的执行提供依据。
概念格式如下。
其中,CY:
进借位标志;AC:
辅助进借位标志;F0:
软件标志;OV:
溢出标志;F1:
用户标志位;P:
奇偶校验标志;RS1、RS0:
工作寄放器组选择(如表所示)。
五、简述单片机系统扩展的大体原那么和实现方式。
答:
(1)以P0口线作地址/数据总线
P0口作系统的低8位地址线。
在实际应历时,先把低8位地址送锁存锁存器暂存,然后再由地址锁存器给系统提供低8位地址,而把P0口作为数据线利用。
(2)以P2口线作高位地址总线
在实际应用中,高位地址线并非固定为8位,需要几位就从P2口中引出几条口线。
(3)操纵信号线
①利用ALE作用地址锁存的选通信号,以实现低8位地址的锁存;
②以信号作为扩展程序存储器的读选通信号;
③以信号作为内、外程序存储器的选择信号;
④以和作为扩展数据存储器和I/O端口的读/写选通信号。
执行MOVX指令时,这两个信号别离自动有效。
3、符号函数
,设变量X存于VAR单元中,函数值y存于FUNC单元中,要求编写按上述函数式给y赋值得程序。
解:
ORG1000H
VAR:
DATA30H
FUNC:
DATA31H
MOVA,VAR
JZCOMP
JNB,POSI
MOVA,#0FFH
SJMPCOMP
POSI:
MOVA,#1
COMP:
MOVFUNC,A
SJMP$