内容正文:
学习任务四 课后习题答案
1.算术运算指令都包括哪几种指令?
答:算术运算指令共有24条,算术运算主要是执行加、减、乘、除法四则运算。另外AT89S51指令系统中有相当一部分是进行加、减1操作,BCD码的运算和调整,都归类为运算指令。
(1)不带进位的加法指令ADD(Addition)(4条)
(2) 带进位加法指令 ADDC(Addition with Carry)(4条)
(3)带借位减法指令 SUBB(Subtraction with Borrow)(4条)
(4)加1指令 INC(Increment)(5条)
(5)减1指令DEC(Decrement)(4条)
(6) 乘法指令 MUL(multiply)(1条)
(7)除法指令DIV(divide )(1条)
(8) 十进制调整指令DA(1条)
2.BCD码进行加法运算后,为什么要进行十进制调整?
答:BCD码在进行加法运算时会出现结果错误现象,出错原因在于BCD码共有16个编码,但只用其中的10个,剩下6个没用到。这6个没用到的编码(1010,1011,1100,1101,1110,1111)为无效编码。在BCD码加法运算中,凡结果进入或者跳过无效编码区时,结果出错。因此1位BCD码加法运算出错的情况有两种:
① 加结果大于9,说明已经进入无效编码区。
② 加结果有进位,说明已经跳过无效编码区。
无论哪种错误,都因为6个无效编码造成的。因此,只要出现上述两种情况之一,就必须调整。方法是把运算结果加6调整,即十进制调整修正。
3.移位寄存器74LS164在本单元应用中的作用是什么?工作中与单片机哪些管脚相连?
答:单片机的并行输出端口有限,在很多场合数据都是先从单片机的串口输出,传送到显示电路时再通过功能芯片把一位一位串行的数据转换成并行的数据一起送到显示数码管或其它设备上。移位寄存器74LS164在本单元应用中的作用就是把串行数据转换为并行数据。转换过程是串行的8位数据在8个时钟脉冲之后,被依次分配给74LS164的Q0-Q7,这8位数据再并行地送给后面的电路,从而完成串行到并行数据传输的转换。
工作中与单片机管脚的连接见图4-19,74LS164的1和2脚(A和B)一并连接到单片机的10脚(RXD)上,74LS164的8脚(CLK)接到单片机的11脚(TXD)上。
4.写出下面这段程序的运行结果。
MOV A,#79H
MOV 20H,#18H
ADD A,20H ;79H+18H=91H (此时累加器A=91H)
DA A ;加法运算后进行十进制调整,调整后累加器A=97H
SWAP A ;累加器A低四位与高四位对调,对调后A=79H
答:最终累加器A的值为79H。
5.利用查表指令编写程序,要求:单片机P1口外接8位拨位开关,根据读取P1口的键值,在P0口输出该键值的平方。
答:
DBUF EQU 30H
ORG 0000H ;主程序
MOV 30H, #00
MAIN: ACALL DISP
ACALL KEY
AJMP MAIN
KEY: MOV P1, #0FFH ;键值提取程序
MOV A, P1
CJNE A, #0FFH,K01
AJMP KEY
K01: MOV R3, #9
MOV R2, #00H
MOV B, A
MOV DPTR, #K0TAB
K02: MOV A, R2
MOVC A, @A+DPTR
CJNE A, B, K04
K03: MOV A, P1
CJNE A, #0FFH,K03
MOV A,R2
RET
K04: INC R2
DJNZ R3,K02
MOV A,#0FFH
AJMP KEY
K0TAB: DB 0FFH,0FEH,0FDH,0FBH,0F7H
DB 0EFH,0DFH,0BFH,7FH
DISP: ;显示输出平方值的程序
MOV DBUF,A
MOV R0,#DBUF
DP10: