第五章 汇编语言程序设计
- 格式:pdf
- 大小:168.21 KB
- 文档页数:12
第五章汇编语言程序设计5·1编程将片内40H一60H单元中内容送到以3000H为首的存特区中。
答:按题目要求编程如下:MOV Rl,#40HMOV R0,#20HMOV DPTR,#3000HLI:MOV A,@RlMOVX@DPTR,AINC R1INC DPTRDJNZ R0,Ll5.2编写计算下列算式的程序。
①23H+45H+ABH+03H=②CDH十l5H-38H-46H=③1234H+8347H=④ABl23H-43ADCH=答:按题目要求编程如下:①MOV A,#23HADD A,#45HADD A,#0ABHXCH A,B;相加后有溢出处理ADDC A,#00HXCH A,BADD A,#3H;结果A中是低位,B中是高位②MOV A,#0CDHADD A,#15HSUBB A,#t38HSUBB A,#46H③MOV A,#34HADD A,#047HMOV40H,AMOV A,#12HADDC A,#83HMOV4lH,A;结果40H中是低位,41H中是高位④CLR CMOV A,#23HSUBB A,#0DCHMOV40H,AMOV A,#0B1HSUBB A,03AHMOV41H,AMOV A,#0AHSUBB A,#04HMOV42H,A;结果40中是低位,42H中是高位5·3编程计算片由RAM区5OH~57H八个单元中数的算术平均值,结果存放在5AH中。
答:在本题计算中要求8个单元的和小于255。
按题目要求编程如下:MOV R0,#50HMOV R1,#8MOV A,#0LI:ADD A,@R0INC R0DJNZ R1,L1MOV B,#8DIV ABMOV5AH,A5·4编写计算下列的程序,设乘积和平方结果均小于255。
a,b值分别存在300H和3002H 单元中,结果存于片外3000H单元中。
25,a=b①Y=a*b,a<ba/b,a>b(a+b)2+10,(a+b)2<10②Y=(a+b)2,(a+b)2=10(a+b)2-10,(a+b)2>10答:按题目要求编程①MOV DPTR,#3001HMOVX A,@DPTR;取a值MOV30H,A;a值暂存储在30HJNC DPLMOVX A,@DPTR;取b值CJNE A,30H,L1;a=b?MOV A,#25SJMP EEL1:JNC L2MOV B,30HMUL ABSJMP EEL2:MOV B,AMOV A,30HDIV ABEE:MOV DPTR,#3001HMOVX@DPTR,A②MOV DPTR,#3001HMOVX A,@DPTRMOV30HINC DPLMOVX A,@DPTRADD A,30HMOV B,AMUL ABMOV31H,ACJNE A,#10,L1SJMP EEL1:JC L2CLR CSUBB A,#10SJMP EEL2:ADD A,#10MOV DPTR,#3000HMOVX@DPTR,A5.5设有两个长度均为15的教组,分别存放在以2000H和2100H为首的存储区中,试编程求其对应项之和,结果存放列以2200H为首的存储区中。
答:在本题中假设两数之和不超过255。
按题目要求编程如下:MOV DPTR,#2000HMOV Rl,#15LI:MOV DPH,#20HMOVX A,@DPTRMOV R2,AMOV DPH,#2lHMOVX A,@DPTRADD A,R2MOV DPH,#22HMOVX@DPTR,AINC DPLDJNZ Rl,LlSJMP$5·6设有100个有符号教,连续存放在以2000H为首地址的存储区中试编程统计其中正数、负数、零的个数。
答:在本题中设正数、负数、零分别存放在30H、31H、32H单元中。
按题目要求编程如下MOV30H,#0MOV31H,#0MOV32H,#0MOV DPTR,#2000H;设数据区首地址MOV Rl,#tl00;设数据区长度L4:MOVX A,@DPTRINC DPTRCJNE A,#0,L1INC32HSJMP L2LI:JC L3INC30HSJMP L2L3:INC31HL2:DJNZ R1,L4SJMP$5·7请将片外教据存储器地址为1000H~1030H的教据块,全部搬迁到片内RAM30H~60H 中,并将原教据块区域全部清0。
答:按题目要求编程如下MOV DPTR,#1000HMOV Rl,#30HMOV R0,#30HLI:MOVX A,@DPTRMOV@R0,AMOV A,#0MOVX@DPTR,AINC DPLINC R0DJNZ R1,L15·8试编写一子程序,使间寄存器Rl所指向的两个片外RAM连续单元中的高4往二进制数,合并为一个字节装入累加器A中。
己知Rl指向低地址,并要求该单元高4位放在A的低4位中。
答:按题目要求编程如下MOVX A,@Rl;将低字节读入ANL A,#0F0H;保留高4位SWAP A;交换到低4位MOV B,A;暂存INC R1;改变地址MOVX A,@Rl;将高字节读入ANL A,#0F0H;保留高4位ORL A,B;组合成新字节RET;返回5·9试编程把以2040H为首地址的连续50个单元中的无符号数按降存排列,存放到以3000H为首地址的存储区中。
答:该程序采用冒泡(下沉)法,也可用别的方法;排列前首先将数据搬到目的存储单元。
按题目要求编程如下:MOV R2,#50;排序字节数MOV R3,#20H;源地址暂存人R3、R4MOV R4,#40H;目的地址暂存人R5、R6MOV R5,#30HMOV R6,#00HSEND_LP:MOV DPH,R3MOV DPL,R4MOVX A,@DPTRINC DPTRMOV R3,DPHMOV R4,DPLMOV DPH,R5MOV DPL,R6MOVX@DPTR,AINC DPTRMOV R5,DPHMOV R6,DPLDJNZ R2,SEND_LPMOV R2,#49;重复次数CMP_LP1:MOV DPTR,¥3000H;起始地址MOV R3,#49;比较次数CMP_LP2;MOVX A,@DPTRMOV B,AINC DPTRMOVX A,@DPTRCJNE A,B,Ll;相邻两个数比较LI:JC NO_CHAGE;A小,不交换转NO_CHAGEMOV30H,A;准备交换CLR CMOV A,DPLSUBB A,#0lHMOV DPL,AMOV A,30HMOVX@DPTR,AINC DPTRMOV A,BMOVX@DPTR,ANO_CHAGE:DJNZ R3,CMP_LP2;50个数重复一遍?DJNZ R2,CMP_LPl;排序结束?LJMP$5·10试编一查表程序,从首地址为2000H和长度为100的数据块中找出ASCII吗A,将其地址送列20A0H和20AlH单元中。
答:按题目要求编程如下:MOV DPTR,#2000H;数据块首地址MOV R2,@100;查找长度GO_ON:MOVX A,@DPTR;取一个数CJNE A,#’A’,IFEND;是否等于'A'?MOV A,DPH;是,将地址存人指定单元MOV B,DPLMOV DPTR,#20A0HMOVX@DPTR,AINC DPTRXCH A,BMOVX@DPTR,ARETIFEND:INC DPTR;不是,下一个DJNZ R2,GO_ON;末查找完,继续RET5·11设在2000H~2004H单元中,存放有5个压缩BCD吗,编程将它们转换成ASCII 吗,存放到以2005H单元为首地址的存储区中。
答:按题目要求编程如下MOV R2,#05H;转换长度送R2MOV R3,#20H;源地址送R3,R4MOV R4,#00HMOV R5,#20H;目的地址送R5,R6MOV R6,#05HCHLP:MOV DPH,R3;取源地址MOV DPL,R4MOVX A,@DPTR;读一个数INC DPTR;修改源地址MOV R3,DPH;保存源地址MOV R4,DPLMOV B,A;数据暂存SWAP A;将高位转成BCD码ANL A,#0FHORL A,#30HMOV DPH,R5;取目的地址MOV DPL,R6MOVX@DPTR,A;将高位BCD码保存到目的单元INC DPTR;修改目的地址MOV A,B;将暂存数据取出ANL A,#0FH;将低位转成BCD码ORL A,#30HMOVX@DPTR,A;将低位BCD码保存到目的单元INC DPTR;修改目的地址MOV R5,DPH;保存目的地址MOV R6,DPLDJNZ R2,CHLP;转换未完,继续RET5.12在以2000H为首地址的存储区中,存放着20个用ASCII码表示的0~9之间的数,试编程将它们转挨成BCD吗,并以压缩BCD码(即一个单元存放二位BCD码)的形式存放在3000H~3009H单元中。
答:按题目要求编程如下MOV R2,#10;组合次数MOV R3,#20H;源地址送R3,R4MOV R4,#00HMOV R5,#30H;目的地址送R5,R6MOV R6,#00HC12LP:MOV DPH,R3;取源地址MOV DPL,R4MOVX A,@DPTR;读一个数ANL A,#0FH;屏蔽高4位,保留低4位SWAP A;将低4位暂存XCH A,BINC DPTR;修改源地址MOVX A,@DPTR;读下一个数ANL A,#0FH;屏蔽高4位,保留低4位ORL A,B;和暂存数据组合成新BCD码INC DPTR;修改源地址MOV R3,DPH;保存源地址MOV R4,DPLMOV DPH,R5;取目的地址MOV DPL,R6MOVX@DPTR,A;保存BCD码INC DPTR;修改目的地址MOV R5,DPH;保存目的地址MOV R6,DPLDJNZ R2,Cl2LP;转换未完,继续RET5·13试编程实现下列逻辑表达式的功能。
设P1.7~Pl.0为8个变量的输入端,而其中P1.7又作为变量输出端。
①Y=X o X1X2+X3+X4X5X6+X7②Y=X0X1十X2X3X4十X5X6X7答:按题目要求编程如下;输人端定义X0EQU P1.0X1EQU P1.1X2EQU P1.2X3EQU P1.3X4EQU P1.4X5EQU P1.5X6EQU P1.6X7EQU P1.7.Y EQU P1.8;暂存位定义TEMP1EQU00HTEMP2EQU01H表达式①MOV C,X0ANL C,X1ANL C,/X2ORL C,/X3MOV TEMPI,CMOV C,X4ANL C,X5ANL C,X6ORL C,/X7ORL C,TEMPIMOV Y,CRET表达式②MOV C,X0ANL C,X1CPL CMOV TEMPI,CMOV C,X2ANL C,X3ANL C,X4CPL CMOV TEMP2,CMOV C,X5ANL C,X6ANL C,X7CPL CORL C,TEMP2CPL CORL C,TEMPIMOV Y,CRET5.14试偏写一多字节无符号数加法子程存。