您好,欢迎来到华佗小知识。
搜索
您的当前位置:首页习题三答案单片机汇编程序设计基础

习题三答案单片机汇编程序设计基础

来源:华佗小知识


单片机汇编程序设计基础 习题答案

一、填空题

1、给程序做注释使用 ;(或半角分) 号来标识。

2、注释可以写在 一行指令上 ,也可以写在 一个指令 之后。

3、在设计汇编语言源程序时,可以使用顺序结构的程序,也可以使用某些指令构成分支 结构、循环 结构和 子程序调用 结构的程序。

4、寻址方式是指 寻找操作数的方式 。

5、机器语言是 机器码的集合 。

6、MCS-51单片机的指令的一般格式中,包括 标号 、助记符 、 目的操作数 、源操作数 和 注释等部分。

7、MCS-51汇编语言源程序的扩展名为 .asm 。

二、程序设计题

1、求50H与40H单元内容之和,结果存入20H,进位位存入2lH。

解答:

MOV A。50 H

ADD A,40H

MOV 20H.A

CLR A

ADDC A.#00H

MOV 21H,A

SJMP $

2、编程实现双字节加法运算(R1)(R0)+(R7)(R6)一(31H)(30H)。

解答:

MOV A.R0

ADD A,R6

MOV 30H.A

MOV A,R1

ADDC A.R7

MOV 31H,A

SJMP $

3、试编写程序,求出内部RAM20H单元中的数据含“1”的数,并将结果存入21H单元。

解答

MOV 21H,#00H

MOV A,20H

CLR C

MOV R7,#08H

LOOP: RLC A

JNC NEXT

INC 21H

NEXT: DJNZ R7,LOOP

SJMP $

4、试编写程序,将内部RAM的20H~2FH共16个连续单元清零。

解答:

MOV R0,#20H

MOV R7,#10H

CLR A

NEXT:MOV @R0,A

INC R0

DJNZ R7,NEXT

SJMP $

5、编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去。

解答:

STRAT:MOV R0,#30H

MOV R7,#0FH

MOV DPTR,#3000H

LOOP: MOV A,@R0

MOVX @DPTR,A

INC R0

INC DPTR

DJNZ R7,LOOP

RET

6、片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256 解答:

ADDIO:MOV R0,30H

MOV R7,#9

MOV A,@R0

LOOP: INC R0

ADD A,@R0

DJNZ R7,LOOP

MOV 30H,A

RET

7、 试编写程序,查找在内部RAM的30H~50H单元中出现FFH的次数,并将查找的结果存入51H单元。

解答:

MOV 51H,#00H

MOV R1,#30H

MOV R7,#21H

LOOP:CJNE @R1,#0FFH,NEXT

INC 51H

NEXT:INC R1

DJNZ R7,LOOP

SJMP $

8、设单片机的fosc=6MHz,编写实现100ms延时的子程序。

解答:

DELAY: MOV R7,#H

A0: MOV R6,#0FAH

DJNZ R6,$

DJNZ R7,A0

RET

9、 从内部RAM的30H单元开始存放一组用补码表示的带符号数,其数目以存放在20H单元。编写程序统计出其中的正数、0和负数的数目,并奖结果分别存入21H、22H、23H单元。

解答:

MOV R0,#30H

MOV 21H,#00H

MOV 22H,#00H

MOV 23H,#00H

MOV A,@R0

JZ NEXT1

JB ACC.7,NEXT2

INC 23H

SJMP NEXT3

NEXT2: INC 21H

SJMP NEXT3

NEXT1:INC 22H

NEXT3:INC R0

DJNZ 20H,LOOP

SJMP $

10、 在程序存储器中从tab开始的16个单元连续存放0-15的平方值,设计程序,任意给一个数x(0≤x≤15),查表求出z的平方值,并把结果存入y单元。

解答:

设x单元为30H,Y单元为31H。文件名:a.asm ,查表求x的平方值,X的值在0~15之间。

ORG 3000H

MOV DPTR,#tab

MOV A,X

MOVC A,@A+DPTR

MOV y,A

SJMP $

tab:DB 00H,01H,04H,09H,10H,19H,24H,31 H

DB 40H,51H,H,79H,90H,0A9H,0C4H,0E1H

X DATA 30H

Y DATA 31H

END

11、 从XX单元开始,连续存放10个无符号数,设计程序,从中找出最大值送入yy单元。

解答:

设XX单元为40H,YY单元为30H。

ORG 0020H

MOV R0.#xx

MOV B,@R0

MOV R7.#09H

INC R0

LOOP: MOV A,B

CLR C

SUBB A,@R0

JNC NEXT

MOV B,@R0

NEXT:INC R0

DJNZ R7,LOOP

MOV YY,B

SJMP $

XX DATA 40H

YY DAIA 30H

END

12、 从x单元开始,连续存放30个无符号数,统计奇数和偶数的个数,并分别存入y和z单元。

解答:

设x单元为30H,Y单元为50H,z单元为51H。

ORG 2000H

START:MOV R1,#00H

MOV R2,#00H

MOV R7,#1EH

MOV R0,#X

LOOP:MOV A,@R0

JNB ACC.0,NEXT

INC R1

SJMP A1

NEXT:INC R2

Al:INC R0

DJNZ R7,LOOP

MOV y,R1

MOV Z,R2

SJMP $

x DATA 30H

y DATA 50H

z DATA 5lH

END

13、从x单元开始,连续存放30个带符号数,求出各个数的绝对值,将结果存入原单元。

解答:

设 x 单元为30H

START:MOV R7,#1EH

MOV R0,#X

LOOP: MOV A,@R0

JNB ACC.7,NEXT

CPL A

INC A

MOV @R0,A

NEXT: INC R0

DJNZ R7,LOOP

SJMP $

X DATA 30H

END

14 、用查表法编一子程序,将R3中的BCD码转换成ASCII码.

解:

MAIN: MOV A,R3 ;待转换的数送A

MOV DPTR,#TAR ;表首地址送DPTR

MOVC A,@A+DPTR ;查ASCII码表

MOV R3,A ;查表结果送R3

RET

TAR DB 30H,31H,32H,33H,34H

DB 35H,36H,37H,38H,39H

15、 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中.

解:

START: MOV R0,#40H ;数据块首地址送R0

MOV R7,#09H ;比较次数送R7

MOV A,@R0 ;取数送A

LOOP: INC R0

MOV 30H,@R0 ;取数送30H

CJNE A,30H,NEHT ;(A)与(30H)相比

NEXT: JNC BIE1 ;(A)≥(30H)转BIR1

MOV A,30H ;(A)<(30H),大数送A

BIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较

MOV 50H,A ;比较结束,大数送50H

RET

16、利用调子程序的方法,进行两个无符号数相加。请编主程序及子程序。

解 用R0和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,R1指向另一个加数,字节存放到R2中作计数初值。

主程序:

JAFA: MOV R0,#20H ;指向加数最低字节

MOV R1,#29H ;指向另一加数最低字节

MOV R2,#04H ;字节数作计数值

ACALL JASUB ;调用加法子程序

AJMP $

RTE

多字节加法子程序:

JASUB: CLR C

JASUB1: MOV A,@R0 ;取出加数的一个字节(4B无符号数加数)

ADDC A,@R1 ;加上另一数的一个字节

MOV @R0,A ;保存和数

INC R0 ;指向加数的高位

INC R1 ;指向另一加数的高位

DJNZ R2,JASUB1 ;全部加完了吗?

RET

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- huatuo0.cn 版权所有 湘ICP备2023017654号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务