当前位置:文档之家› 第三章习题解答1

第三章习题解答1

3. 试编程将片外RAM中40H单元的内容与R0的内容交换。

答:
MOV @R1, #40H
MOVX A, @R1
XCH A, R0
MOVX @R1, A
4. 已知(A)=C9H,(B)=8DH,CY=1,执行指令ADDC A,B后结果如何?执行指令SUBB A,B后结果如何?
答:
执行指令ADDC A,B后(A)=57H,(B)=8DH,CY=1
执行指令SUBB A,B后(A)=3BH,(B)=8DH,CY=0
5. 试编程将片外RAM中30H和31H单元的内容相乘,结果存放在32H和33H单元,高位存放在32H单元。

MOV R1, #30H
MOVX A, @R1
MOV B, A
INC R1
MOVX A, @R1
MUL AB
INC R1
INC R1
MOVX @R1, A
MOV A, B
DEC R1
MOVX @R1, A
6. 试编程将20H单元的2个BCD数拆开,并变成相应的ASCII码存入21H和22H单元。

MOV A, 20H
ANL A, #0FH
ORL A, #30H
MOV 21H, A
MOV A, 20H
ANL A, #0F0H
SWAP A
ORL A, #30H
MOV 22H, A
7. 设在寄存器R3的低4位存有数码0~F中的一个数,试将其转换成ASCII码,并存入片外RAM的2000H单元。

MOV A, R3 ;取4位二进制数
ANL A, #0FH ;屏蔽高4位
PUSH A ;保存A内容到堆栈
CLR C ;清C
SUBB A, #0AH ;(A)-10
POP A ;恢复A内容
JC LOOP ;若C =1,则数<10转到LOOP
ADD A, #07H ;若C =0,则加37H
LOOP:ADD A, #30H ;转换成ASCII码
MOV DPTR,#2000H
MOVX @DPTR, A
8. 试编程将片内RAM中30H单元中8位无符号二进制数转换成3位BCD码,并存入片内RAM的40H(百位)和41H(十位、个位)2个单元中。

MOV A, 30H ;取二进制数到A
MOV B, #100 ;除数送入B
DIV AB ;相除
MOV 40H, A ;存入百位数
MOV A, B ;余数送入A
MOV B, #10 ;除数送入B
DIV AB ;相除
SWAP A ;十位移到高4位
ORL A, B ;十位、个位合并到1个字节
MOV 41H, A ;存十位、个位数
SJMP $
9. 试用MCS-51指令实现以下传送:
(1) R2的内容传送入R7;
MOV B, R2
MOV R7, B
(2) ROM中1000H单元的内容传送入R1;
MOV DPTR, #1000H
CLR A
MOVC A, @A+DPTR
MOV R1, A
(3) ROM中1000H单元的内容传送入片内RAM 50H单元;
MOV DPTR, #1000H
CLR A
MOVC A, @A+DPTR
MOV 50H, A
(4) ROM中1000H单元的内容传送入片外RAM 70H单元。

MOV DPTR, #1000H
CLR A
MOVC A, @A+DPTR
MOV R1, #70H
MOVX @R1, A
10. 编程将片内35H~55H单元中的内容传送入以3000H为首地址的片外数据存储区中。

MOV R0, #35H
MOV DPTR, #3000H
LOOP: MOV A, @R0
MOVX @DPTR, A
INC R0
INC DPTR
CJNE R0, #56H, LOOP
SJMP $
11. 编程计算片内RAM区50H~57H共8个单元中数的算术平均值,结果存放于5AH中。

答:
MOV R2, #8 ;计数器
MOV R0, #50H ;取数首地址
CLR A ;清A
KKK: ADD A, @R0 ;加数
INC R0
DJNZ R2,KKK
MOV B, #8
DIV AB
MOV 5AH, A
SJMP $
12. 设有100个无符号数,连续存放在以2000H为首地址的存储区中,试编程统计奇数和偶数的个数。

MOV R2, #100
MOV DPTR, #2000H
MOV R3, #0 ;奇数个数存放
MOV R4, #0 ;偶数个数存放
KKK: MOVX A, @DPTR
MOV B, #2
DIV AB
MOV A, B
INC DPTR
CJNE A,#0,DDD
INC R4
SJMP NNN
DDD: INC R3
NNN: DJNZ R2,KKK
SJMP $
13. 将片外数据存储器地址为1000H~1030H的数据块全部搬到片内RAM的30H~60H单元中,并将原数据块区域全部清0。

MOV DPTR, #1000H
MOV R0, #30
LOOP: MOVX A, @DPTR
MOV @R0, A
CLR A
MOVX @DPTR, A
INC DPTR
INC R0
CJNE R0, #61H, LOOP
SJMP $
14. 从20H单元开始有一无符号数据块,其长度在20H单元中。

试求出数据块中的最小值,并存入21H单元。

答:
MOV @R0,#21H ;数据块首地址
MOV R1, 20H ;取数据块长度
MOV A, @R0 ;取一个数
MOV 21H,A ;存数
DDD:DJNZ R1,KKK ;判断是否取完
SJMP $ ;取完结束
KKK:INC R0 ;指向下一个数
MOV A, @R0 ;取数
MOV B,A ;暂存
CLR C
SUBB A,21H ;比较
JNC DDD ;C=0,21H中数小,转移
MOV 21H,B ;存小数
SJMP DDD
15. 在以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转换成BCD码,并以压缩BCD码(即一个单元存储两位BCD码)的形式存放在3000H~3009H单元中。

ORG 2000H
MOV R1,#10
MOV R0,#30H
MOV DPTR,#2000H
LOOP: MOVX A,@DPTR
ANL A,#0FH
MOV B,A
INC DPTR
MOVX A,@DPTR
ANL A,#0FH
SWAP A
ORL A,B
MOV @R0, A
INC R0
INC DPTR
DJNZ R1,#00H,LOOP
END。

相关主题