6 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。 MOV R1,A MOV A,@R1 MOV @R0,P1 MOV P2,P1 MOV 10H,A
;R1=40H ;A=10H ;(40H)=0CAH P2=0CAH (10H)=10H
MOV 20H,10H (20H)=10H
结果:(20H)=10H、(10H)=10H、(40H)=0CAH、P2=0CAH和P1=0CAH
7.已知(A)=02H,(R1)=7FH,(DPTR)=2FFCH,片内RAM(7FH)=70H,片外RAM(2FFEH)=11H,ROM(2FFEH)=64H,试分别写出以下各条指令执行后目标单元的内容。
(1)MOV A,@R1
结果:累加器A等于70H
结果:片外RAM(2FFCH)单元等于02H 结果: 累加器A等于64H
结果:累加器A等于00H,片内RAM(7FH)单元等于72H
(2)MOVX @DPTR,A (3)MOVC A,@A+DPTR (4)XCHD A,@R1
8.已知:(A)=78H,(R1)=78H,(B)=04H,CY=1,片内RAM(78H)=0DDH,(80H)=6CH,试分别写出下列指令执行后目标单元的结果和相应标志位的值。
(1)ADD A,@R1
;累加器A等于55H,CY等于1
(2)SUBB A,#77H ;累加器A等于00H,CY等于0 (3)MUL AB 于0
(4)DIV AB
;累加器A等于E0H,B寄存器等于01H,CY等于1,OV等
;累加器A等于1EH,B寄存器等于00H,CY、OV等于0
(5)ANL 78H,#78H ;片内RAM(78H)单元等于58H (6)ORL A,#0FH (7)XRL 80H,A
;累加器A等于7FH ;片内RAM(80H)等于14H
9.设(A)=83H,(R0)=17H,(17H)=34H,分析当执行完下面指令段后累加器A、R0、17H单元的内容。
ANL A,#17H ORL 17H,A XRL A,@R0 CPL A
;A=03H ;(17H)=37H ;A=34H
;A=CBH
结果:A=CBH,(R0)=17H,(17H)=37H
错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
10.写出完成下列要求的指令。
(1)累加器A的低2位清零,其余位不变。
ANL A,#11111100B
7
(2)累加器A的高2位置“1”,其余位不变。
ORL A,#11000000B
(3)累加器的高4位取反,其余位不变。
XRL A,#11110000B
(4)累加器第0位、2位、4位、6位取反,其余位不变。
XRL A,#01010101B
11.说明LJMP指令与AJMP指令的区别?
答:LJMP指令后面提供的是16位目标地址,所以可以转移到64KB程序存储器的任意位置,缺点是:执行时间长,字节数多。
AJMP指令后带的是11位直接地址,执行时,先将程序指针PC的值加2(该指令长度为2字节),然后把指令中的11位地址addr11送给程序指针PC的低11位,而程序指针的高5位不变,只能在当前2K范围内转移。
12.设当前指令CJNE A,#12H,10H的地址是0FFEH,若累加器A的值为10H,则该指令执行后的PC值为多少?若累加器A的值为12H呢?
答:指令执行后的PC值为1011H,若累加器A的值为12H,则指令执行后的PC值为1001H。
13.用位处理指令实现P1.4=P1.0?(P1.1?P1.2)?/P1.3的逻辑功能。
程序: MOV ORL ANL ORL MOV
C,P1.1 C,P1.2 C,P1.0 C,/P1.3 P1.4,C
14.下列程序段汇编后,从1000H单元开始的单元内容是什么? ORG 1000H
TAB: DB 12H,34H
DS 3
DW 5567H,87H
8 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
答:(1000H)=12H,(1001H)=34H,(1002H)=00H,(1003H)=00,(1004H)=00,(1005H)=67H,(1006H)=55H,(1007H)=87H,(1008H)=00H
15.试编一段程序,将片内RAM的20H、21H、22H单元的内容依次存入片外RAM的20H、21H、22H中。
程序: MOV R0,#20H MOV R2,#03H LOOP:MOV A,@R0
MOVX INC DJNZ SJMP
@R0,A
R0
R2,LOOP $
16.编程实现将片外RAM的2000H~2030H单元的内容,全部搬到片内RAM的20H单元开始位置,并将源位置清零。
程序: MOV R0,#20H MOV DPTR,#2000H MOV R2,#30H LOOP:
MOVX
A,@DPTR
MOV @R0,A MOV MOVX INC
A,#00 @DPTR,A R0 R2,LOOP $
DPTR
INC
DJNZ SJMP
17.编程将片外RAM的1000H单元开始的100个字节数据相加,结果放于R7R6中。 程序:
MOV DPTR,#1000H MOV R2,#100
错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
MOV R7,#00 MOV R6,#00 LOOP:
ADD MOV MOV ADDC MOV INC DJNZ SJMP
MOVX A,R6 R6,A A,R7 A,#0 R7,A
DPTR A,@DPTR
9
R2,LOOP $
18.编程实现R4R3?R2,结果放于R7R6R5中。 程序:
ORG 0100H
MUL1:MOV A,R2
MOV B,R3
MUL AB ;R2?R3,结果的低字节直接存入积的R5 MOV R5,A ;结果的高字节存入R6中暂存起来 MOV R6,B
MUL2:MOV A,R2
MOV B,R4
MUL AB ;R2?R4,结果的低字节与R6相加后,再存入R6中 ADD A,R6 MOV R6,A
MOV A,B ;结果的高字节加上进位位后存入R7中 ADDC A,#00 MOV R7,A SJMP
$
10 错误!使用“开始”选项卡将 标题 1,部分标题 1 应用于要在此处显示的文字。
19.编程实现把片内RAM的20H单元的0位、1位,21H单元的2位、3位,22H单元的4位、5位,23H单元的6位、7位,按原位置关系拼装在一起放于R2中。
程序:
MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV MOV
C,20H.0 A.0,C C,20H.1 A.1,C C,21H.2 A.2,C C,21H.3 A.3,C C,22H.4 A.4,C C,22H.5 A.5,C C,23H.6 A.6,C C,23H.7 A.7,C R2,A
20.用查表的方法实现一位十六进制数转换成ASCII。
程序:(设一位十六进制数放在R2中,轮换的ASCII也放于R2中) C16STASC:MOV DPTR,#TAB
MOV MOVC MOV RET
A,R2 A,@A+DPTR R2,A
TAB:DB 30H,31H,32H,33H,34H,35H,36H,37H
DB 38H,391H,41H,42H,43H,44H,45H,46H