第四章汇编语言程序设计.docx
《第四章汇编语言程序设计.docx》由会员分享,可在线阅读,更多相关《第四章汇编语言程序设计.docx(21页珍藏版)》请在冰豆网上搜索。
第四章汇编语言程序设计
第四章汇编语言程序设计
1、编程将片内40H~60H单元中的内容送到以3000H为首的存储区内。
答:
MOVR1,#40H
MOVR2,#21H
MOVDPTR,#3000H
L1:
MOVA,@R1
MOVX@DPTR,A
INCR1
INCDPTR
DJNZR2,L1
2、编程计算下列算式的程序
(1)23H+45H+ABH+03H=
MOVA,#23H
ADDA,#45H
ADDA,#0ABH
XCHA,B;溢出处理
ADDCA,#00H
XCHA,B
ADDA,#03H;A中为结果低位,B中为高位
(2)CDH+15H-38H-46H=
MOVA,#0CDH
ADDA,#15H
SUBBA,#38H
SUBBA,#46H
(3)1234H+8347H=
MOVA,#34H
ADDA,#47H
MOV30H,A
MOVA,#12H
ADDCA,#83H
MOV31,A;30H存结果低位,31H存结果高位
(4)AB123H-43ADCH=
CLRC
MOVA,#23H
SUBBA,DCH
MOV30H,A
MOVA,#0B1H
SUBBA,#3AH
MOV31H,A
MOVA,#0AH
SUBBA,,#04H
MOV32H,A;30H为低位,32H为高位
3、设有两个4位BCD码,分别存放在23H、22H单元和33H、32H单元中,求他们的和,并送入43H、42H单元中(低位在低字节,高位在高字节)。
答:
MOVA,22H
ADDA,32H
MOV42H,A
MOVA,23H
ADDCA,33H
MOV43H,A
4、略
5、编程计算片内RAM区50H~59H单元中数的平均值,结果存放在5AH中。
答:
MOVR0,#8
MOVR1,#50H
MOVA,#00H
L1:
ADDA,@R1
INCR1
DJNZR0,L1
MOVB,#8
DIVAB
MOV5AH,A
6、编写计算下式的程序。
设乘积和平方结果均小于255。
a、b值分别存在片外3001H和3002H单元中,结果存于片外3000H单元中。
(1)
MOVDPTR,#3001H
MOVXA,@DPTR
MOV30H,A;a暂存30H单元
INCDPL
MOVXA,@DPTR
CJNEA,30H,L1;是否a=b
MOVA,#25
SJMPSAVE
L1:
JNCL2
MOVB,30H
MULAB
SJMPSAVE
L2:
MOVB,A
MOVA,30H
DIVAB
SAVE:
MOVDPTR,#3000H
MOVX@DPRT,A
(2)
MOVDPTR,#3001H
MOVXA,@DPTR
MOV30H,A
INCDPTR
MOVXA,@DPTR
ADDA,30H
MOVB,A
MULAB;(a+b)2
MOV31H,A
CJNEA,#10,L1
SJMPSAVE
L1:
JCL2
CLRC
SUBBA,#10
SJMPSAVE
L2:
ADDA,#10
SAVE:
MOVDPTR,#3000H
MOVC@DPTR,A
7、设有两个长度均为15的数组,分别存放在以200H和210H为首地址的存储区中,试编程求其对应项之和,结果存放到以220H为首地址的存储区中。
答:
MOVDPH,#02H
MOVR1,#15
MOVR2,#00H;数组1首地址低位
MOVR3,#10H;数组2首地址低位
MOVR4,#20H;和首地址低位
L1:
MOVDPL,R2
MOVXA,@DPTR
MOVR1,A
MOVDPL,R3
MOVXA,@DPTR
ADDA,R1
MOVDPL,R4
MOVX@DTPR,A
INCR2
INCR3
INCR4
DJNZR1,L1
SJMP$
8、设有100个无符号数,连续存放在以2000H为首地址的存储区中,试编程统计正数、负数和零的个数。
答:
MOV30H,#00H;正数计数器
MOV31H,#00H;负数计数器
MOV32H,#00H;零计数器
MOVDPTR,#2000H
MOVR1,#100
L4:
MOVXA,@DPTR
INCDPTR
CJNEA,#0,L1
INC32H
SJMPL2
L1:
JCL3
INC30H
SJMPL2
L3:
INC31H
L2:
DJNZR1,L4
SJMP$
9、将片外数据存储器地址为1000H~1030H的数据块,全部搬迁到片内RAM30H~60H中,并将原数据块区域全部清零。
答:
MOVR0,#30H
MOVR2,#31H
MOVDPTR,#1000H
LP:
MOVXA,@DPTR
MOV@R0,A
ANDA,#00H
MOVX@DPTR,A
INCR0
INCDPTR
DJNZR2,LP
SJMP$
10、试编写一子程序,是R1、R0指向的两个片外RAM连续单元中的高4位二进制数,合并成一个字节,装入累加器A中。
已知R0指向低地址,并要求该单元高四位放在A中高四位。
答:
MOVXA,@R1
ANLA,#0F0H
SWAPA
MOVR2,A
MOVXA,@R0
ANLA,#0F0H
ORLA,R2
11、试编程把以2040H为首地址的连续50个单元的无符号数按降序排列,存放到以3000H为首地址的存储区中。
答:
MOVR2,#50
MOVR3,#20H
MOVR4,#40H;源地址
MOVR5,#30H
MOVR6,#00H;目的地址
SEND:
MOVDPH,R3;SEND将2040H数据块移入3000H存储区
MOVDPL,R4
MOVXA,@DPTR
INCDPTR
MOVR3,DPH
MOVR4,DPL
MOVDPH,R5
MOVDPL,R6
MOVX@DPTR,A
INCDPTR
MOVR5,DPH
MOVR6,DPL
DJNZR2,SEND
MOVR2,#49;重复次数
CMP1:
MOVDPTR,#3000H
MOVR3,#49;比较次数
CMP2:
MOVXA,@DPTR
MOVB,A
INCDPTR
MOVXA,@DPTR
CJNEA,B,L1
L1:
JCNOMOVE
MOV30H,A
CLRC
MOVA,DPL
SUBBA,#01H
MOVDPL,A
MOVA,30H
MOVX@DPTR,A
INCDPTR
MOVA,B
MOVX@DPTR,A
NOMOVE:
DJNZR3,CMP2;50个数重复一遍?
DJNZR2,CMP1;排序结束?
LJMP$
12、试编一查表程序,从首地址为2000H,长度为100的数据块中找出ASCII码为A,将其地址送到20A0H和20A1H单元中。
答:
MOVDPTR,#2000H
MOVR2,#100
GO_ON:
MOVXA,@DPTR
CJNEA,#41H,IFEND
MOVA,DPH
MOVB,DPL
MOVDPTR,#20A0H
MOVX@DPTR,A
INCDPTR
XCHA,B
MOVX@DPTR,A
SJMPOVER
IFEND:
INCDPTR
DJNZR2,GO_ON
OVER:
SJMPOVER
13、设在200H~204H单元中,存放5个压缩BCD码,编程将他们转换成ASCII码,存放到以205H单元为首地址的存储区。
答:
MOVR2,#05H
MOVR3,#02H
MOVR4,#00H
MOVR5,#02H
MOVR6,#05H
CHLP:
MOVDPH,R3
MOVDPL,R4
MOVXA,@DPTR
INCDPTR
MOVR3,DPH
MOVR4,DPL
MOVB,A
SWAPA
ANLA,#0FH
ORLA,#30H
MOVDPH,R5
MOVDPL,R6
MOVX@DPTR,A
INCDPTR
MOVA,B
ANLA,#0FH
ORLA,#30H
MOVX@DPTR,A
MOVR5,DPH
MOVR6,DPL
DJNZR2,CHLP
14、有一无符号数据块长度在30H单元中,其首地址为31H单元,求出数据块中最大值,并存入40H中。
答:
MOVR0,#31H
MOVR1,30H
MOV40H,#00H
LOOP:
MOVA,@R0
CJNEA,40H,L1
SJMPAGAIN
L1:
JNCL2
SJMPAGAIN
L2:
MOV40H,A
AGAIN:
INCR0
DJNZR1,LOOP
SJMP$
15、略
16、在以2000H为首地址的存储区内,存放20个用ASCII码表示的0~9之间的数,试编程,将它们转换成BCD码,并以压缩BCD码的形式存在3000H~3009H单元中。
答:
MOVR2,#10
MOVR3,#20H
MOVR4,#00H
MOVR5,#30H
MOVR6,#00H
LP:
MOVDPH,R3
MOVDPL,R4
MOVXA,@DPTR
ANLA,#0FH
SWAPA
XCHA,B
INCDPTR
MOVXA,@DPTR
ANLA,#0FH
ORLA,B
INCDPTR
MOVR3,DPH
MOVR4,DPL
MOVDPH,R5
MOVDPL,R6
MOVX@DPTR,A
INCDPTR
MOVR5,DPH
MOVR6,DPL
DJNZR2,LP
SJMP$
17、试编程实现下列逻辑表达式功能。
设P1.7~P1.0为8个变量的输入端,而其中P1.7又作为变量的输出端。
;输入端定义
X0EQUP1.0
X1EQUP1.1
X2EQUP1.2
X3EQUP1.3
X4EQUP1.4
X5EQUP1.5
X6EQUP1.6
X7EQUP1.7
(1)
MOVC,X0
ANLC,X1
ANLC,/X2
ORLC,X3
MOV00H,C
MOVC,X4
ANLC,X5
ANLC,X6
ORLC,/X7
ORLC,00H
MOVP1.7,C
(2)
MOVC,X0
ANLC,X1
CPLC
MOV00H,C
MOVC,X2
ANLC,X3
ANLC,X4
CPLC
MOV01H,C
MOVC,X5
ANLC,X6
ANLC,X7
CPLC
ORLC,O1H
CPLC
ORLC,00H
MOVP1.7,C
18、略
19、略
20、试编写延时1s、1min、1h子程序。
;单片机时钟fosc=12MHz,计算为近似值
;1s延时子程序
DLY_1S:
MOVR0,#10
L3:
MOVR1,#200
L2:
MOVR2,#250
L1:
DJNZR2,L1
DJNZR1,L2
DJNZR0,L3
RET
;延时1min
DLY_1M:
MOVR3,#60
L4:
LCALLDLY_1S
DJNZR3,L4
RET
;延时1h
DLY_1H:
MOVR4,#60
L5:
LCALLDLY_1M
DJNZR4,L5
RET
21、用程序实现c=a2+b2。
设a、b均小于10,a存在31H单元中,b存在32H单元中,c存33H单元。
答:
ORG1000H
SR:
MOVA,31H
ACALLSQR
MOVR1,A
MOVA,32H
ACALLSQR
ADDA,R1
MOV33H,A
SJMP$
;求平方子程序如下(采用查平方表的方法)
SQR:
INCA
MOVCA,@A+PC
RET
TABLE:
DB0,1,4,9,16
DB25,36,49,64,81
EN