习题三答案单片机汇编程序设计基础(共6页).doc
精选优质文档-倾情为你奉上单片机汇编程序设计基础 习题答案一、填空题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 20HA CLR A ADDC A#00H MOV 21H,A SJMP $2、编程实现双字节加法运算(R1)(R0)+(R7)(R6)一(31H)(30H)。解答: MOV AR0 ADD A,R6 MOV 30HA MOV A,R1 ADDC AR7MOV 31H,ASJMP $3、试编写程序,求出内部RAM20H单元中的数据含“1”的数,并将结果存入21H单元。解答 MOV 21H,#00HMOV A,20HCLR C MOV R7,#08HLOOP: RLC AJNC NEXTINC 21HNEXT: DJNZ R7,LOOPSJMP $4、试编写程序,将内部RAM的20H2FH共16个连续单元清零。解答:MOV R0,#20HMOV R7,#10HCLR A NEXT:MOV R0,AINC R0DJNZ R7,NEXT SJMP $5、编程将片内RAM30H单元开始的B的数据传送到片外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 RET6、片内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 RET7、 试编写程序,查找在内部RAM的30H50H单元中出现FFH的次数,并将查找的结果存入51H单元。解答:MOV 51H,#00HMOV R1,#30HMOV R7,#21HLOOP:CJNE R1,#0FFH,NEXT INC 51HNEXT:INC R1DJNZ R7,LOOPSJMP $8、设单片机的fosc=6MHz,编写实现100ms延时的子程序。解答:DELAY: MOV R7,#64HA0: MOV R6,#0FAH DJNZ R6,$DJNZ R7,A0RET9、 从内部RAM的30H单元开始存放一组用补码表示的带符号数,其数目以存放在20H单元。编写程序统计出其中的正数、0和负数的数目,并奖结果分别存入21H、22H、23H单元。解答:MOV R0,#30HMOV 21H,#00HMOV 22H,#00HMOV 23H,#00HMOV A,R0JZ NEXT1JB ACC.7,NEXT2INC 23HSJMP NEXT3NEXT2: INC 21HSJMP NEXT3NEXT1:INC 22HNEXT3:INC R0DJNZ 20H,LOOPSJMP $10、 在程序存储器中从tab开始的16个单元连续存放0-15的平方值,设计程序,任意给一个数x(0x15),查表求出z的平方值,并把结果存入y单元。解答:设x单元为30H,Y单元为31H。文件名:aasm ,查表求x的平方值,X的值在015之间。 ORG 3000H MOV DPTR,#tab MOV A,X MOVC A,A+DPTR MOV y,ASJMP $tab:DB 00H,01H,04H,09H,10H,19H,24H,31 H DB 40H,51H,64H,79H,90H,0A9H,0C4H,0E1H X DATA 30H Y DATA 31H END11、 从XX单元开始,连续存放10个无符号数,设计程序,从中找出最大值送入yy单元。解答:设XX单元为40H,YY单元为30H。 ORG 0020H 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 YY,BSJMP $XX DATA 40HYY DAIA 30HEND12、 从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 ACC0,NEXT INC R1 SJMP A1NEXT:INC R2 Al:INC R0 DJNZ R7,LOOP MOV y,R1 MOV Z,R2 SJMP $ x DATA 30H y DATA 50H z DATA 5lH END13、从x单元开始,连续存放30个带符号数,求出各个数的绝对值,将结果存入原单元。解答:设 x 单元为30H START:MOV R7,#1EH MOV R0,#XLOOP: MOV A,R0JNB ACC.7,NEXTCPL AINC AMOV R0,ANEXT: INC R0DJNZ R7,LOOPSJMP $X DATA 30HEND14 、用查表法编一子程序,将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,39H15、 片内RAM40H开始的单元内有10B二进制数,编程找出其中最大值并存于50H单元中解: START: MOV R0,#40H ;数据块首地址送R0 MOV R7,#09H ;比较次数送 MOV A,R0 ;取数送 LOOP: INC R0 MOV 30H,R0 ;取数送H 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指向第一个加数,并兼作“和”的指针,指向另一个加数,字节存放到中作计数初值。主程序:JAFA: MOV R0,#20H ;指向加数最低字节MOV R1,#29H ;指向另一加数最低字节MOV R2,#04H ;字节数作计数值ACALL JASUB ;调用加法子程序AJMP $ RTE 多字节加法子程序:JASUB: CLR CJASUB1: MOV A,R0 ;取出加数的一个字节(无符号数加数)ADDC A,R1 ;加上另一数的一个字节MOV R0,A ;保存和数INC R0 ;指向加数的高位INC R1 ;指向另一加数的高位DJNZ R2,JASUB1 ;全部加完了吗? RET 专心-专注-专业