还剩4页未读,继续阅读
文本内容:
单片机汇编程序设计基础 习题答案
一、填空题
1、给程序做注释使用 ;(或半角分) 号来标识
2、注释可以写在 一行指令上 ,也可以写在 一个指令 之后
3、在设计汇编语言源程序时,可以使用顺序结构的程序,也可以使用某些指令构成分支 结构、循环 结构和 子程序调用 结构的程序
4、寻址方式是指 寻找操作数的方式
5、机器语言是 机器码的集合
6、MCS-51单片机的指令的一般格式中,包括 标号 、助记符 、 目的操作数 、源操作数 和 注释等部分
7、MCS-51汇编语言源程序的扩展名为 .asm
二、程序设计题
1、求50H与40H单元内容之和,结果存入20H,进位位存入2lH解答 MOV A50H ADD A,40H MOV 20H.A CLR A ADDCA.#00H MOV 21H,A SJMP $
2、编程实现双字节加法运算R1R0+R7R6一31H30H解答 MOV A.R0 ADD A,R6 MOV 30H.A MOV A,R1 ADDC A.R7MOV 31HASJMP $
3、试编写程序,求出内部RAM20H单元中的数据含“1”的数,并将结果存入21H单元解答MOV 21H#00HMOV A20HCLR CMOV R7#08HLOOP:RLC AJNC NEXTINC 21HNEXT:DJNZ R7LOOPSJMP $
4、试编写程序,将内部RAM的20H~2FH共16个连续单元清零解答MOV R0#20HMOV R7#10HCLR ANEXT:MOV @R0AINC R0DJNZ R7NEXT SJMP $
5、编程将片内RAM30H单元开始的15B的数据传送到片外RAM3000H开始的单元中去解答STRAT MOV R0#30H MOV R7#0FH MOV DPTR#3000H LOOP MOV A@R0 MOVX @DPTRA INC R0 INC DPTR DJNZ R7LOOP RET
6、片内RAM30H开始的单元中有10B的二进制数,请编程求它们之和(和<256). 解答 ADDIO MOV R030H MOV R7#9 MOV A@R0 LOOP INC R0 ADD A@R0 DJNZ R7LOOP MOV 30HA RET
7、试编写程序,查找在内部RAM的30H~50H单元中出现FFH的次数,并将查找的结果存入51H单元解答MOV 51H#00HMOVR1#30HMOVR7#21HLOOP:CJNE @R1#0FFHNEXTINC51HNEXT:INC R1DJNZ R7LOOPSJMP $
8、设单片机的fosc=6MHz,编写实现100ms延时的子程序解答DELAY: MOV R7#64HA0: MOV R6#0FAH DJNZ R6$DJNZ R7A0RET
9、从内部RAM的30H单元开始存放一组用补码表示的带符号数,其数目以存放在20H单元编写程序统计出其中的正数、0和负数的数目,并奖结果分别存入21H、22H、23H单元解答MOV R0#30HMOV 21H#00HMOV22H#00HMOV23H#00HMOV A@R0JZ NEXT1JB ACC.7NEXT2INC23HSJMP NEXT3NEXT2:INC 21HSJMP NEXT3NEXT1:INC 22HNEXT3:INCR0DJNZ20HLOOPSJMP$
10、在程序存储器中从tab开始的16个单元连续存放0-15的平方值,设计程序,任意给一个数x0≤x≤15,查表求出z的平方值,并把结果存入y单元解答设x单元为30H,Y单元为31H文件名a.asm,查表求x的平方值,X的值在0~15之间 ORG 3000H MOV DPTR,#tab MOV A,X MOVCA,@A+DPTR MOV yASJMP $tab DB00H,01H,04H,09H,10H,19H,24H,31H DB40H,51H,64H,79H,90H,0A9H,0C4H,0E1H X DATA30H Y DATA 31H END
11、从XX单元开始,连续存放10个无符号数,设计程序,从中找出最大值送入yy单元解答设XX单元为40H,YY单元为30H ORG0020H MOV R0.#xx MOV B,@R0 MOV R7.#09H INC R0LOOP MOV A,B CLR C SUBB A,@R0 JNC NEXT MOV B,@R0NEXT INC R0 DJNZ R7,LOOP MOV YYBSJMP $XXDATA 40HYYDAIA 30HEND
12、从x单元开始,连续存放30个无符号数,统计奇数和偶数的个数,并分别存入y和z单元解答设x单元为30H,Y单元为50H,z单元为51H ORG 2000HSTART MOV R1,#00H MOV R2,#00H MOV R7,#1EH MOV R0,#XLOOP MOV A,@R0 JNB ACC.0,NEXT INC R1 SJMP A1NEXT INCR2 Al INC R0 DJNZ R7LOOP MOV yR1 MOV ZR2 SJMP $ x DATA 30H y DATA50H z DATA 5lH END
13、从x单元开始,连续存放30个带符号数,求出各个数的绝对值,将结果存入原单元解答设x单元为30H START:MOV R7#1EH MOV R0#XLOOP: MOVA@R0JNB ACC.7NEXTCPL AINC AMOV @R0ANEXT: INC R0DJNZ R7LOOPSJMP $X DATA 30HEND
14、用查表法编一子程序,将R3中的BCD码转换成ASCII码.解MAIN: MOV AR3 ;待转换的数送A MOV DPTR#TAR ;表首地址送DPTR MOVC A@A+DPTR ;查ASCII码表 MOV R3A ;查表结果送R3 RET TAR DB 30H31H32H33H34H DB 35H36H37H38H39H
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 A30HNEHT ;(A)与(30H)相比 NEXT: JNC BIE1 ;A≥30H转BIR1 MOV A30H ;A<30H大数送A BIE1: DJNZ R7LOOP ;比较次数减1,不为0,继续比较 MOV 50HA ;比较结束,大数送50H RET
16、利用调子程序的方法,进行两个无符号数相加请编主程序及子程序解 用R0和R1作数据指针,R0指向第一个加数,并兼作“和”的指针,R1指向另一个加数,字节存放到R2中作计数初值 主程序 JAFA: MOV R0#20H ;指向加数最低字节 MOV R1#29H ;指向另一加数最低字节 MOV R2#04H ;字节数作计数值 ACALL JASUB ;调用加法子程序 AJMP $ RTE 多字节加法子程序JASUB: CLR CJASUB1:MOV A@R0 ;取出加数的一个字节(4B无符号数加数) ADDC A@R1 ;加上另一数的一个字节 MOV @R0A ;保存和数 INC R0 ;指向加数的高位 INC R1 ;指向另一加数的高位 DJNZ R2JASUB1 ;全部加完了吗? RET。