(6) 执行DJNZ PSW,0BCH后,PC值=?
PC=203FH
4. 已知SP=25H,PC=2345H,(24H)=12H,(25H)=34H。问此时执行RET指令
以后,SP=?PC=?
执行RET指令以后,SP=23H PC=3412H 5. 若SP=25H,PC=2345H,标号LABEL所在的地址为3455H,问执行长调用指
令LCALL LABLE后,堆栈指针和堆栈的内容发生什么变化?PC的值等于什么?
堆栈指针SP=27H;堆栈的内容发生变化(26H)=48H,(27H)=23H;PC的值等于3455H 6. 上题中的LCALL指令能否直接换成ACALL指令,为什么?如果使用ACALL指
令,则可调用的地址范围是什么?
LCALL指令不能直接换成ACALL指令,因为超出了转移范围,如果使用ACALL指令,
则可调用的地址范围是2K
四、编写程序
1. 试编写程序,将内部RAM的20H,21H,22H,三个连续单元的内容依次存入2FH,2EH和2DH单元。 MOV 20H,2FH
MOV 21H,2EH MOV 22H,2DH
2. 试编写程序能够将内部RAM中32H~30H的内容左移1位,即:
CY 32H 31H 30H 0
CLR C MOV A,30H RLC A MOV 30H,A MOV A,31H RLC A MOV 31H,A
MOV A,32H RLC A MOV 32H,A
3. 编写程序,若累加器A的内容分别满足以下条件时,则程序转至LABEL存贮单
元。设A中存的是无符号数。
(1) A≥10
CLR C
SUBB A,#10H JNC LABEL (2) A>10
(3) A≤10
9
4. 利用查表技术将累加器A中的一位BCD码转换为相应的十进制数的七段字型码,
结果送P1口输出。0~9的七段码分别是:3FH、05H、5BH、4FH、55H、5DH、7DH、07H、TFH、5FH。
MOV DPTR,#TAB MOVC A,@A+DPTR MOV P1,A
TAB:DB 3FH、05H、5BH、4FH、55H、5DH、7DH、07H、TFH、5FH
习题四
一、简答题
1.什么叫“伪指令”?伪指令与指令有什么区别?
2.MCS-51系列单片机汇编语言有哪些伪指令?它们的用途是什么?汇编语言的格式是怎样的?
3.汇编语言程序设计分哪几个步骤?
4.列出画程序流程图的各种图形符号,并说明用途。 5.分析下述程序的功能。
X DATA 30H
Y DATA 32H
MOV A,X
JNB
ACC.7,TRUE
CPL A
ADD A,#01H
TRUE:MOV Y,A
本程序的功能是求片内RAM地址为30H单元中数的补码后送32H单元
二、计算题
1.下列程序执行后,按要求回答问题。 (1) ORG 2000H
MOV A,#00H
MOV MOV PUSH PUSH
B,#01H SP,#10H ACC B
RET
结果:SP= 10H ,PC= 0201H 。 (2) 运行前:CY=0,AC=0,OV=0,P=0。
MOV MOV ADD
A,#77H B,#34H A,B
DA A
结果: A= 11H ,CY= 1 。
(3) 运行前:CY=0,AC=0,OV=0,P=0。 MOV A,#07H
10
MOV B,#02H
MUL AB
结果:A= 0EH ,B= 00H ,OV= 0 ,P= 1 。 (4) MOV R0,#10H MOV 10H,#20H
MOV MOV
@R0,#30H A,R0
结果:A= 10H ,R0= 10H ,(10H)= 30H 。
2.下列程序段汇编后,从3000H开始的各有关存储器单元的内容将是什么? ORG 3000H
TAB1: EQU 3234H TAB2: EQU 4000H
DB DW
‘START’
TAB1,TAB2,9000H
从3000H开始的各有关存储器单元的内容是‘S’ 、‘T’、‘A’ 、‘R’、 ‘T’、 32H、
34H、40H、00H、90H 、00H
三、应用题
1.编写程序将内部RAM 30H中的压缩BCD码转换为ASCII码,并存入31H和32H单元中。
MOV A,30H ANL A,#0FH ADD A,#30H MOV 31H,A MOV A,30H SWAP A ANL A,#0FH ADD A,#30H
MOV 32H,A SJMP $
2.若晶振为6MHz,试编制一个延时5ms的子程序。 MOV R0,#5 LP1:MOV R1,#124 LP2:NOP
NOP
DJNZ R1,LP2 DJNZ R0,LP1 RET
(((1+1+2)*124+1+2)*5+1+2)*2μs=4996μs
3.试编制一段程序,其功能是在P1.0输出周期大约为6MS,占空比为2:1的脉冲(设fose=12MHz)。
START: SETB P1.0
ACALL YS ACALL YS CPL P1.0
11
ACALL YS
SJMP START
Ys: MOV R0,#6 LP1: MOV R1,#249 LP2: NOP
NOP
DJNZ R1,LP2 DJNZ R0,LP1 RET
4.编程将片内20H单元开始的30个数传送到片外RAM3000H开始的单元中。
MOV R0,#20H MOV DTPR,#3000H MOV R1,#30 LP: MOV A,@R0
MOVX @DPTR,A INC R0 INC DPTR DJNZ R1 SJMP $
5.在片外2000H开始的单元中有100个有符号数,试编程统计其中正数、负数、零的个数的程序
MOV R0,#100
MOV DPTR,#2000H HUI: MOVX A,@DPTR
CJNE A,#00H,PT1
INC R1 JMP SSS
PT1: JNB ACC.7 ZHEN
INC R3 JMP SSS ZHEN:INC R2 SSS: INC DPTR
DJNZ R0,HUI SJMP $
6. 试设计数据块传送程序,将起始地址为0200H的100个连续单元中的内容送到以2000H为首址的区域中去。
MOV R7,#100 MOV P2,#20H MOV R0,#00H
MOV DTPR,#0200H
LOOP: MOVX A,@DPTR
MOVX @R0,A INC R0 INC DPTR
12