微机原理练习-控制转移类指令
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理练习 - 控制转移类指令
一、低难度:
等待P1.0出现低电平
JNB P1.0,$
JB P1.0,$
原地等待
SJMP $
A减一非0转到L,否则转到L0
DJNZ A,L
SJMP L0
If A>0 then goto L else goto L1
JZ L1
JB ACC.0,L1
SJMP L
If A>=0 then goto L else goto L1
JB ACC.7,L1
SJMP L
If A<0 then goto L else goto L1
JB ACC.7,L
SJMP L1
If A<=0 then goto L else goto L1
JZ L
JB ACC.0,L
SJMP L1
If A=0 then goto L else goto L1
JZ L
SJMP L1
If A<>0(<>为不等) then goto L else goto L1
JZ L1
SJMP L
二、中难度:
用判断进位方法处理高字节,进行@R0(2):=@R0(2)+@R1(2) 当标志Flag=1时执行一次子程序Sub
A取绝对值
JNB ACC.7,L
CPL A
INC A
如果A>=数80H则减去数80H
CLR ACC.7
将RAM00H~FFH清为0
MOV R0,#0
L:MOV @R0,#0
INC R0
CJNE R0,#00H,L
RAM30H~3FH->RAM20H~2FH
Dec Dptr
MOV A,DPL
JNZ L
DEC DPH
L:DEC DPL
Inc R67
CJNE R7,#0FFH,L
INC R6
L:INC R7
Inc @R0(2)
INC R0
INC @R0
CJNE @R0,#0,L
DEC R0
INC @R0
L:
Dec @R0(2)
INC R0
DEC @R0
CJNE @R0,#0FFH,L
DEC R0
DEC @R0
L:
Djnz Dptr,L
MOV A,DPH
JNZ L
MOV A,DPL
DEC A
CJNE A,#0,L
RAM30H~3FH按字节左移一次
RAM30H~3FH->RAM38H~47H
If A=0 则 B=2 否则B=4
MOV B,#4
CJNE A,#0,L
MOV B,#2
当A<0,=0或>0时,B分别等于0,1,2
MOV B,#1
JZ L
MOV B,#0
JB ACC.7,L
MOV B,#2
按照A中的索引值,对应转移到Sub0,Sub1,...
RL A
MOV DPTR,#TAB
JMP @A+DPTR
TAB:AJMP SUB0
AJMP SUB1
三、高难度(指令不限):
利用栈构造Jmp @Dptr
子程序ClrAllRam:将RAM00H~FFH赋值为A的值
不用CALL类指令实现CALL操作
不用RET指令实现RET操作
子程序中使用调用前入栈的数据,编写子程序。主程序示例:
PUSH ACC
PUSH B
ACALL StackToP1
将子程序后的数据送到30H开始的RAM中,,编写子程序。主程序示例:ACALL DatToBuf
DB '123456789',0