当前位置:文档之家› 第3章答案指令系统1-40..

第3章答案指令系统1-40..

第3章答案指令系统1-40..
第3章答案指令系统1-40..

第3章指令系统

1,简述下列基本概念:指令,指令系统,机器语言,汇编语言,高级语言。1、指令:CPU根据人的意图来执行某种操作的命令

指令系统:一台计算机所能执行的全部指令集合

机器语言:用二进制编码表示,计算机能直接识别和执行的语言

汇编语言:用助记符、符号和数字来表示指令的程序语言

高级语言:独立于机器的,在编程时不需要对机器结构及其指令系统有深入了解的通用性语言

2,什么是计算机的指令和指令系统?

2、见第1题。

3,简述89C51汇编指令格式。

3、操作码[目的操作数] [,源操作数]

4,简述89C51寻址方式和所能涉及的寻址空间。

5,要访问特殊功能寄存器和片外数据寄存器,应采用哪些寻址方式?

5、SFR:直接寻址,位寻址,寄存器寻址;片外RAM:寄存器间接寻址

6,在89C51片内RAM中,已知(30H)=38H, (38H)=40H, (40H)=48H, (48H)=90H, 请分析下面各是什么指令,说明源操作数的寻址方式以及按顺序执行每条指令后的结果。

6、MOV A,40H ;直接寻址(40H)→A

MOV R0,A ;寄存器寻址(A)→R0

MOV P1,#0F0H ;立即数寻址0F0→P1

MOV @R0,30H ;直接寻址(30H)→(R0)

MOV DPTR,#3848H ;立即数寻址3848H→DPTR

MOV 40H,38H ;直接寻址(38H)→40H

MOV R0,30H ;直接寻址(30H)→R0

MOV P0,R0 ;寄存器寻址(R0 )→P0

MOV 18H,#30H ;立即数寻址30H→18H

MOV A,@R0 ;寄存器间接寻址((R0)) →A

MOV P2,P1 ;直接寻址(P1)→P2

最后结果:(R0)=38H,(A)=40H,(P0)=38H,(P1)=(P2)=0F0H,(DPTR)=3848H,(18H)=30H,(30H)=38H,(38H)=40H,(40H)=40H,(48H)=38H 注意:→左边是内容,右边是单元

7,对89C51片内RAM的高128字节的地址空间寻址要注意什么

7、用直接寻址,位寻址,寄存器寻址

8,指出下列指令的本质区别。

8,MOV A,DATA ;直接寻址2字节1周期

MOV A,#DATA ;立即数寻址2字节1周期

MOV DATA1,DATA2 ;直接寻址3字节2周期

MOV 74H,#78H ;立即数寻址3字节2周期

如果想查某一指令的机器码,字节数或周期数可查阅书本后面的附录A

9,设R0内容为32H, A的内容为48H, 片内RAM的32H单元内容为80H, 40H单元内容为08H, 请指出在执行下列程序段后上述各单元内容的变化。

9、

MOV A,@R0 ;((R0))=80H→A

MOV @R0,40H ;(40H)=08H→(R0)

MOV 40H,A ;(A)=80→40H

MOV R0,#35H ;35H→R0

最后结果:(R0)=35H (A)=80H,(32H)=08H,(40H)=80H

10,如何访问SFR,可使用哪些寻址方式?

10、用直接寻址,位寻址,寄存器寻址

11,如何访问片外RAM,可使用哪些寻址方式?

11、只能采用寄存器间接寻址(用MOVX指令)

12,如何访问片内RAM,可使用哪些寻址方式?

12、低128字节:直接寻址,位寻址,寄存器间接寻址,寄存器寻址(R0~R7)

高128字节:直接寻址,位寻址,寄存器寻址

13,如何访问片内外程序存储器,可使用哪些寻址方式?

13、采用变址寻址(用MOVC指令)

14,说明十进制调整的原因和方法。

14、压缩BCD码在进行加法运算时应逢十进一,而计算机只将其当作十六进制数处理,此时得到的结果不正确。用DA A指令调整(加06H,60H,66H)15,说明89C51的布尔处理机功能。

15、用来进行位操作

16,已知(A)=83H, (R0)=17H, (17H)=34H, 请写出执行完下列程序段后A的内容。

16、ANL A,#17H ;83H∧17H=03H→A

ORL 17H,A ;34H∨03H=37H→17H

XRL A,@R0 ;03H⊕37H=34H

CPL A ;34H求反等于CBH

所以(A)=CBH

17,使用位操作指令实现下列逻辑功能,要求不得改变未涉及位的内容。

(1)使ACC.0置1;(2)清除累加器高4位;(3)清除ACC.3,ACC.4,ACC.5,ACC.6 。

17、(1)SETB ACC.0或SETB E0H ;E0H是累加器的地址

(2)CLR ACC.7

CLR ACC.6

CLR ACC.5

CLR ACC.4

(3)CLR ACC.6

CLR ACC.5

CLR ACC.4

CLR ACC.3

18,编程实现把内部RAM R0~R7 的内容传递到20H~27H单元。

18、MOV 27H,R7

MOV 26H,R6

MOV 25H,R5

MOV 24H,R4

MOV 23H,R3

MOV 22H,R2

MOV 21H,R1

MOV 20H,R0

19,试编写程序,将内部RAM 20H、21H和22H3个连续单元的内容依次存入2FH、2EH 和2DH 中。

19、MOV 2FH,20H

MOV 2EH,21H

MOV 2DH,22H

20,编写程序,进行两个16位数减法,6F5DH –13B4H, 结果存入内部RAM

的30H和31H单元,30H存储低8位。

20、CLR C

MOV A,#5DH ;被减数的低8位→A

MOV R2,#0B4H ;减数低8位→R2

SUBB A,R2 ;被减数减去减数,差→A

MOV 30H,A ;低8位结果→30H

MOV A,#6FH ;被减数的高8位→A

MOV R2,#13H ;减数高8位→R2

SUBB A,R2 ;被减数减去减数,差→A

MOV 31H,A ;高8位结果→30H

注意:如果在你的程序中用到了进位位,在程序开始的时候要记得清0进位位21,编写程序,若累加器A的内容分别满足下列条件,则程序转至LABEL存

储单元。设A中存储的是无符号数。(1)A≥10; (2)A>10; (3)A≤10。

21、(1)A≥10

CJNE A,#0AH,L1 ;(A)与10比较,不等转L1

LJMP LABEL ;相等转LABEL

L1:JNC LABEL ;(A)大于10,转LABEL

或者:

CLR C

SUBB A,#0AH

JNC LABEL

(2)A>10

CJNE A,#0AH,L1 ;(A)与10比较,不等转L1

RET ;相等结束

L1:JNC LABEL ;(A)大于10,转LABEL

RET ;(A)小于10,结束

或者:

CLR C

SUBB A,#0AH

JNC L1

RET

L1:JNZ LABEL

RET

(3)A≤10

CJNE A,#0AH,L1 ;(A)与10比较,不等转L1

L2:LJMP LABEL ;相等转LABEL

L1:JC L2 ;(A)小于10,转L2

RET

或者:

CLR C

SUBB A,#0AH

JC LABEL

JZ LABEL

RET

22,已知(SP)=25H, (PC)=2345H, (24H)=12H, (25H)=34H, (26H)=56H。问此时执行“RET”指令以后,(SP)=? (PC)=?

22、(SP)=23H,(PC)=3412H

参看书上80页

23,若(SP)=25H, (PC)=2345H, 标号LABEL所在地址为3456H。问执行长调用指令“LCALL LABEL”后,堆栈指针和堆栈内容发生什么变化?PC值等于什么?

23、(SP)=27H,(26H)=48H,(27H)=23H,(PC)=3456H

参看书上79页

24,上题中LCALL指令能否直接换成ACALL指令,为什么?如果使用ACALL 指令,则可调用的地址范围是什么?

24、不能。ACALL是短转指令,可调用的地址范围是2KB。

在看这个题的时候同时看一下AJMP指令。同时考虑调用指令ACALL和LCALL 指令和RET指令的关系。

25,编写指令,查找在内部RAM的20H~50H单元中是否有0AAH这一数据。若有,则将51H单元置为01H;若未找到,则将51H单元清0。

25、MOV R2,#31H ;数据块长度→R2

MOV R0,#20H ;数据块首地址→R0

LOOP:MOV A,@R0 ;待查找的数据→A

CLR C ;清进位位

SUBB A,#0AAH ;待查找的数据是0AAH吗

JZ L1 ;是,转L1

INC R0 ;不是,地址增1,指向下一个待查数据

DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找

MOV 51H,#00H ;等于0,未找到,00H→51H

RET

L1:MOV 51H,#01H ;找到,01H→51H

RET

26,编写指令,查找在内部RAM的20H~50H单元中出现00H的次数,并将查找结果存入51H单元。

26、MOV R2,#31H ;数据块长度→R2

MOV R0,#20H ;数据块首地址→R0

LOOP:MOV A,@R0 ;待查找的数据→A

JNZ L1 ;不为0,转L1

INC 51H ;为0,00H个数增1

L1:INC R0 ;地址增1,指向下一个待查数据

DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找

RET

27,外部数据RAM中有一个数据块,存有若干字符、数字,首地址为SOURCE。要求将该数据块传送到内部RAM以DIST开始的区域,直到遇到字符“$”时结束(“$”也要传送,它的ASCII码是24H)。

27、MOV DPTR,#SOURCE ;源首地址→DPTR

MOV R0,#DIST ;目的首地址→R0

LOOP:MOVX A,@DPTR ;传送一个字符

MOV @R0,A

INC DPTR ;指向下一个字符

INC R0

CJNE A,#24H,LOOP ;传送的是“$”字符吗?不是,传送下一个字符

RET

28,已知R3和R4中存有一个16位的二进制数,高位在R3中,低位在R4中。请编程将其求补,并存回原处。

28、MOV A,R3 ;取该数高8位→A

ANL A,#80H ;取出该数符号判断

JZ L1 ;是正数,转L1

MOV A,R4 ;是负数,将该数低8位→A

CPL A ;低8位取反

ADD A,#01H ;加1

MOV R4,A ;低8位取反加1后→R4

MOV A,R3 ;将该数高8位→A

CPL A ;高8位取反

ADDC A,#00H ;加上低8位加1时可能产生的进位

SETB ACC.7

MOV R3,A ;高8位取反加1后→R3

L1:RET

29,已知30H和31H中存有一个16位的二进制数,高位在前,地位在后,请编程将它们乘以2,再存回原单元中。

29、CLR C ;清进位位C

MOV A,31H ;取该数低8位→A

RLC A ;带进位位左移1位

MOV 31H,A ;结果存回31H

MOV A,30H ;取该数高8位→A

RLC A ;带进位位左移1位

MOV 30H,A ;结果存回30H

30,内存中有两个4字节以压缩的BCD码形式存放的十进制数,一个存放在30H~33H单元中,一个存放在40H~43H单元请编程求他们的和,结果存放在

30H~33H单元中。

30、MOV R2,#04H ;字节长度→R2

MOV R0,#30H ;一个加数首地址→R0

MOV R1,#40H ;另一个加数首地址→R1

CLR C ;清进位位

LOOP:MOV A,@R0 ;取一个加数

ADDC A,@R1 ;两个加数带进位位相加

DA A ;十进制调整

MOV @R0,A ;存放结果

INC R0 ;指向下一个字节

INC R1 ;

DJNZ R2,LOOP ;数据块长度减1,不等于0,继续查找

RET

31,编写程序,将片外RAM从2000H开始存放的8个数传送到片内30H开始的单元中。

31、MOV R2,#08H ;数据块长度→R2

MOV R0,#30H ;数据块目的地址→R0

MOV DPTR,#2000H ;数据块源地址→DPTR

LOOP:MOVX A,@ DPTR ;传送一个数据

MOV @R0,A

INC DPTR ;指向下一个数据

INC R0 ;

DJNZ R2,LOOP ;数据块长度减1,没传送完,继续传送

RET

32,要将片内RAM中0FH单元的内容传送到寄存器B,对0FH单元的内容寻址可以有3种方法:(1)R寻址;(2)R间址;(3)direct寻址。请分别编出相应程序,比较其字节数、机器周期数和优缺点。

32、(1)MOV R0,0FH ;2字节,2周期4字节4周期(差)

MOV B,R0 ;2字节,2周期

(2)MOV R0,#0FH ;2字节,1周期4字节3周期(中)MOV B,@R0 ;2字节,2周期

(3)MOV B,#0FH ;3字节,2周期3字节2周期(好)

33,阅读下列程序,要求:(1)说明该程序功能;(2)填写所缺的机器码;(3)修改程序,使片内RAM的内容成为如图3-20所示的结果。

7A - MOV R2,#0AH

- - MOV R0,#50H

E4 CLR A

F6 LOOP: MOV @R0,A

08 INC R0

DA - DJNZ R2,LOOP

DONE:

33、(1)功能是将片内RAM中50H~51H单元清0。

(2)7A0A (大家可以看一下书上,对于立即数寻址的话,后面一个字节存放的是立即数)7850 (第一个字节的后三位是寄存器,前一个条指令是010也就是指的R2,在这里是R0,所以应该是78,后一个字节存放的是立即数)DAFC (这里涉及到偏移量的计算,可以参考书上56页)

34,设(R0)=7EH, (DPTR)=10FEH, 片内RAM中7EH单元的内容为0FFH, 7FH 单元内容为38H,试为下列程序每条指令注释其执行结果。

34、INC @R0 ;(7EH)=00H

INC R0 ;(R0)=7FH

INC @R0 ;(7FH)=39H

INC DPTR ;(DPTR)=10FFH

INC DPTR ;(DPTR)=1100H

INC DPTR ;(DPTR)=1101H

35,下列程序段经汇编后,从1000H开始的各有关存储单元内容将是什么?

ORG 1000H

TAB1:EQU 1234H

TAB2:EQU 3000H

DB “START”

DW TAB1,TAB2,70H

35、解:(1000H)=53H (1001H)=54H (1002H)=41H

(1003H)=52H (1004H)=54H (1005H)=12H

(1006H)=34H (1007H)=30H (1008H)=00H

(1009H)=70H

36:,阅读下列程序,并要求:(1)说明程序的功能;(2)写出涉及的寄存器及片内RAM单元(如图3-21所示)的最后结果。

36、MOV R0,#40H ;40H→R0

MOV A,@R0 ;98H→A

INC R0 ;41H→R0

ADD A,@R0 ;98H+(41H)=47H→A

INC R0

MOV @R0,A ;结果存入42H单元

CLR A ;清A

ADDC A,#0 ;进位位存入A

INC R0

MOV @R0,A ;进位位存入43H

功能:将40H,41H单元中的内容相加结果放在42H单元,进位放在43H 单元,(R0)=43H,(A)=1,(40H)=98H,(41H)=AFH,(42H)=47H,(43H)=01H

37,要求同上题,程序如下:

37、MOV A,61H ;F2H→A

MOV B,#02H ;02H→B

MUL AB ;F2H×O2H=E4H→A

ADD A,62H ;积的低8位加上CCH→A

MOV 63H,A ;结果送62H

CLR A ;清A

ADDC A,B ;积的高8位加进位位→A

MOV 64H,A ;结果送64H

功能:将61H单元的内容乘2,低8位再加上62H单元的内容放入63H,将结果的高8位放在64H单元。(A)=02H,(B)=01H,(61H)=F2H,(62H)=CCH,(63H)=B0H,(64H)=02H

39,编写程序,采用“或”运算,使任意8位二进制数的符号位必为1。

39、MOV A,XXH

ORL A,#80H

MOV XXH,A

40,请思考,采用“异或”运算,怎样可使一带符号数的符号位改变,数据位不变,怎样可使该数必然变为0 。

40、(2)MOV A,XXH

MOV R0,A

XRL A,R0

相关主题
文本预览
相关文档 最新文档