第4章汇编语言课件

上传人:94****0 文档编号:242560776 上传时间:2024-08-27 格式:PPT 页数:34 大小:293.50KB
返回 下载 相关 举报
第4章汇编语言课件_第1页
第1页 / 共34页
第4章汇编语言课件_第2页
第2页 / 共34页
第4章汇编语言课件_第3页
第3页 / 共34页
点击查看更多>>
资源描述
第二级,第三级,第四级,第五级,第,4,章,汇编语言,第,4,章 程序设计,程序设计的过程大致可以分为以下几个步骤:,(,1,)编制要解决问题的程序框图。,(,2,)确定数据结构、算法、工作单元、变量设定。,(,3,)根据所用计算机的指令系统,按照已编制的,程序框图用汇编语言编制出源程序。,(,4,)将编制的程序在计算机上调试,,直至实现预定的功能。,第4章 程序设计程序设计的过程大致可以分为以下几个步骤:,4.1,简单程序设计,例,4-1,两个,8,位的无符号数相加和是,8,位。,设内部,RAM 40H,、,41H,单元中分别存放,N1,、,N2,,结果送,42H,单元。,程序如下:,AD1,:,MOV R0,,,#40H,;设,R0,为数据指针,MOV A,,,R0,;取,N1,INC R0,;修改指针,ADD A,,,R0,;,N1 + N2,INC R0,MOV R0,A,;存结果,END,4.1 简单程序设计 例4-1 两个8位的无符号数相加和是,例,4-2,将两个半字节数合并成一个一字节数。,设:内部,RAM 40H,、,41H,单元中分别存放着,8,位二进制数。要求取出两个单元中的低半字节合并成一个字节后存放在,42H,单元。,程序如下:,START,:,MOV R1,,,#40H,MOV A,,,R1,ANL A, #0FH,;取第一个半字节,SWAP A,;移至高,4,位,INC R1,XCH A,,,R1,;取第二字节,ANL A,,,#0FH,;取第二个半字节,ORL A,,,R1,;拼字,INC R1,MOV R1,,,A,;存放结果,END,例4-2 将两个半字节数合并成一个一字节数。 设:内部RA,4.2,分支程序设计,例,4-3,两个无符号数比较大小。,设存储单元,ST1,和,ST2,中存放两个不带符号的二进制数,找出其中的大数存入,ST3,单元中。,程序如下:,ST1,:,EQU 8040H,ORG 8000H,START1,:,CLR C,;进位位清,0,MOV DPTR,,,#ST1,;设数据指针,MOVX A,,,DPTR,;取第一个数,MOV R2,,,A,;暂存于,R2,INC DPTR,MOVX A,,,DPTR,;取第二个数,SUBB A,,,R2,;两数比较,JNC BIG1,;,XCH A,,,R2,;第一数大,BIG0,:,INC DPTR,MOVX DPTR,,,A,;存大数,RET,BIG1,:,MOVX A,,,DPTR,;第二数大,SJMP BIG0,END,4.2 分支程序设计例4-3 两个无符号数比较大小。,例,4-4,编制计算符号函数,y = SGN,(,x,)的程序,例4-4 编制计算符号函数 y = SGN(x)的程序,ARE EQU 8050H,BUF EQU 8060H,NEG EQU 8070H,ORG 8000H,START2,:,MOV DPTR,,,#ARE,MOVX A,,,DPTR,JZ SUL,;,x =0,,转,SUL,JB ACC.7, NEG,;判,x,的符号位,MOV A,,,#01,;,x0,1A,SUL,:,MOV DPTR,,,#BUF,MOVX DPTR,,,A,END,NEG,:,MOV A,,,#FFH,;,x0,-1A,SJMP SUL,ARE EQU 8050HSTART2:,4.3,循环程序设计,循环程序一般由五部分组成:,(,1,)初始化部分,为循环程序做准备。如设置循环次数计数器的初值、地址指针置初值、为循环变量赋初值等。,(,2),处理部分,为反复执行的程序段,是循环程序的实体。,(,3,)修改部分,每执行一次循环体后,对指针作一次修改,使指针指向下一数据所在位置,为进入下一轮处理做准备。,(,4,)控制部分,根据循环次数计数器的状态或循环条件检查循环是否能继续进行,若循环次数到或循环条件不满足时,应退出循环,否则继续循环。通常,2,、,3,、,4,部分又称为循环体。,(,5,)结束部分,分析及存放执行结果;,4.3 循环程序设计 循环程序一般由五部分组成:,1.,单循环程序,例,4-5,工作单元清,0,CLEAR,:,CLR A,MOV R2,,,#32H,;置计数值,LOOP,:,MOVX DPTR,,,A,INC DPTR,;修改地址指针,DJNZ R2,,,LOOP,;控制循环,END,1.单循环程序例4-5 工作单元清0,4-6,多个单字节数据求和,NUM EQU 0AH,ORG 8000H,SAD,:,MOV R0,,,#40H,;设数据指针,MOV R5,,,#NUN,;计数值,0AHR5,SAD1,:,MOV R2,,,#0,;和的高,8,位清,0,MOV R3,,,#0,;和的低,8,位清,0,LOOP,:,MOV A,,,R3,;取加数,ADD A,,,R0,MOV R3,,,A,;存和的低,8,位,JNC LOP1,INC R2,;有进位,和的高,8,位,+1,LOP1,:,INC R0,;指向下一数据地址,DJNZ R5,,,LOOP,END,4-6多个单字节数据求和NUM EQU 0A,例,47,测试字符串长度,CONT,:,MOV R2,,,#0FFH,MOV R0,,,#4FH,;数据指针,R0,置初值,LOOP,:,INC R0,INC R2,CJNE R0,,,#0DH,,,LOOP,END,例47 测试字符串长度CONT: MOV R,例,4-8,逻辑尺使用,PRG0 EQU 8360H,PRG1 EQU 8200H,ORG 8000H,TEST,:,MOV R2,,,#08H,;逻辑尺长度,MOV R3,,,#10110010B,;设定逻辑尺,LOOP,:,MOV A,,,R0,;取数据,XCH A,,,R3,RLC A,; 左移,读尺刻度,XCH A,,,R3,JC LOOP1,;转调用,PRG1,LCALL PRG0,;是,0,,调用,PRG0,SJMP RELT,LOOP1,:,LCALL PRG1,RELT,:,MOV R1,,,A,;存结果,INC R0,INC R1,DJNZ R2,,,LOOP,;,R20,,继续循环,END,例4-8 逻辑尺使用 PRG0,例,4-9 10 s,延时程序,DEL,:,MOV R5,,,#100,DEL0,:,MOV R6,,,#200,DEL1,:,MOV R7,,,#248,DEL2,:,DJNZ R7,,,DEL2,;,248*2 + 4,DJNZ R6,,,DEL1,;,(,248*2 + 4,)*,200 + 4,DJNZ R5,,,DEL0,;,(,248*2 +4,)*,200 + 4,)*,100 + 4,RET,例4-9 10 s延时程序 DEL: MOV,例,4-10,冒泡程序,CONT EQU 07H,LIST DB 0,,,13,,,3,,,90,,,27,,,32,,,11,ORG 8000H,MOV R2,,,#CNT-1,;数列个数,-1,LOOP1,:,MOV A,,,R2,;外循环计数值,MOV R3,,,A,;内循环计数值,MOV R1,,,#01,;交换标志置,1,LOOP2,:,MOV A,,,R0,;限数据,MOV B,,,A,;暂存,B,INC R0,CLR C,SUBB A,,,R0,;两数比较,JC LESS,;,Xi 256,16,位数据指针高,8,位加,1,PAD,:,JMP,A+DPTR,TAB1 AJMP PRGM0,;转处理程序,0,的首地址,AJMP PRGM1,AJMP PRGMn,4.4 散转程序设计 例4-16 根据R6的内容,转向各,例,4-17,根据,R3,的内容转向对应处理程序。处理程序的入口分别是,PR0,PRn,。,PJ3,:,MOV DPTR,,,#TAB3,MOV A,,,R3,ADD A,,,R3,;,R3*2,JNC CAD,INC DPH,;有进位,,DPTR,高位,+1,CAD,:,MOV R2,,,A,;暂存,R2,MOVC A,,,A+DPTR,XCH A,,,R2,;处理程序入口地址高,8,位暂存,R2,INC A,MOVC A,,,A+DPTR,MOV DPL,,,A,;处理程序入口地址低,8,位暂存,DPL,MOV DPH,,,R2,CLR A,JMP,A+DPTR,TAB3,:,DW PRO,DW PR1,DW PRn,例4-17 根据R3的内容转向对应处理程序。处理程序的入口,例,4-18,根据,R5R6,内容,转向不同的处理程序。,程序如下:,PJ4,:,MOV DPTR,,,#TAB4,MOV A,,,R6,CLR C,RLC A,XCH A,,,R5,RLC A,ADD A,,,DPH,MOV DPH,,,A,;,R5R6*2,高,8,位加到,DPH,MOV DPH,,,A,;,R5R6*2,低,8,位存,A,MOV A,,,R5,;从表中得到处理程序入口地址高,8,位,MOVC A,,,A+DPTR,;,XCH A,,,R5,INC DPTR,MOVC A,,,A+DPTR,;从表中得到处理程序入口地址低,8,位,PUSH ACC,;地址低,8,位进栈,MOV A,,,R5,PUSH ACC,;地址高,8,位进栈,RET,;转向地址退栈装入,PC,中,TAB4,:,DW PR0,DW PR1,DW PRn,例4-18 根据R5R6内容,转向不同的处理程序。,4.5,子程序和参数传递方法,1,用累加器或寄存器进行参数的传递,2,用指针寄存器进行参数的传递,3,用堆栈进行参数传递,4.5 子程序和参数传递方法1用累加器或寄存器进行参数的传,例,4-19,一位十六进制数转换成,ASCII,码,HEASC,:,MOV R0,,,SP,;借用,R0,为堆栈指针,DEC R0,DEC R0,;,R0,指向被转换参数地址,XCH A,,,R0,;保护累加器,取被转换参数,ANL A,,,#OFH,ADD A,,,#2,;,PC,表首地址,MOVC A,,,A+PC,;查表,XCH A,,,R0,;结果送回堆栈,RET,ATAB,:,DB 30H,,,31H,,,32H,,,33H,,,34H,,,35H,,,36H,,,37H,,,38H,,,39H,DB 41H,,,42H,,,43H,,,44H,,,45H,,,46H,END,例4-19 一位十六进制数转换成ASCII码HEASC:,例,4-20,把内部,RAM,中,40H,单元一字节的十六进制数转换成两位,ASCII,码,存放在,R1,指出的两个单元中,调用,HEASE,子程序,ORG 8000H,MAIN,:,MOV A,,,40H,;直接寻址,(,40H,),A,SWAP A,;两位十六进制数半字节交换,PUSH ACC,ACALL HEASC,POP ACC,MOV,R1,,,A,;高半字节转换成,ASCII,码结果,INC R1,PUSH 40H,ACALL HEASC,POP ACC,MOV,R1,,,A,;低半字节转换成,ASCII,码存结果,END,例4-20 把内部RAM中40H单元一字节的十六进制数转换,例,4-21,被转换数据存放在,R0,指出的堆栈地址中,结果送原单元及其下一单元。,HEAS2,:,MOV R0,,,SP,;借用,R0,为堆栈指针,DEC R0,DEC R0,;,R0,指向被转换参数地址,PUSH ACC,;保护累加器,MOV A,,,R0,;取出参数,ANL A,,,#0FH,;取右半字节,ADD A,,,#14,;得,PC,值与,ASCII,码表的偏移值,MOVC A,,,A+PC,;查表,XCH A,,,R0,;十六进制数低位的,ASCII,码存入堆栈,SWAP A,;取左半字节,ANL A,,,#0FH,ADD A,,,#07,;得,PC,值与,ASCII,码表的偏移值,MOVC A,,,A+PC,;查表,INC R0,XCH A,,,R0,;十六进制数高位的,ASCII,码存入栈中,INC R0,XCH A,,,R0,;低位返回地址放入栈中,INC R0,XCH A,,,R0,;高位返回地址放入栈中,恢复累加器,RET,ATAB2,:,DB 30H,,,31H,,,32H,,,33H,,,34H,,,35H,,,36H,,,37H,,,38H,,,39H,DB 41H,,,42H,,,43H,,,44H,,,45H,,,46H,例4-21 被转换数据存放在R0指出的堆栈地址中,结果送原,例,4-22,将内部,RAM,中,40H,、,41H,单元的四位十六进制数转换成,ASCII,码,通过,SCON,串行接口发送字符。,ORG 8000H,TMAN,:,PUSH 40H,ACALL HEAS2,POP ACC,ACALL TRANS,POP ACC,ACALL TRANS,PUSH 41H,ACALL HEAS2,POP ACC,ACALL TRANS,POP ACC,ACALL TRANS,TRANS,:,JNB TI,,,TRANS,;发送字符子程序,CLR TI,MOV SBUF,,,A,;转换后字符送发送缓冲,RET,END,例4-22 将内部RAM中40H、41H单元的四位十六进制,4.6,查表程序设计,例,4-23,输入一个,ASCII,字符,要求按照输入的命令字符转去执行相应的处理程序。设命令字符为,A,,,B,,,C,,,E,,,G,,,I,,,Q,,,P8,种。对应的处理程序入口地址标号分别为,TAC,,,TBC,,,TCC,,,TEC,,,TGC,,,TIC,,,TPC,,,TQC,。我们采用第二种结构的表格。以,0,作为结束标志。同时也为出错标志,并将,SBUF,置,FFH,。,4.6 查表程序设计例4-23 输入一个ASCII字符,要,TAC EQU 20H,TBC EQU 21H,TCC EQU 22H,TEC EQU 23H,TGC EQU 24H,TIC EQU 25H,TPC EQU 26H,TQC EQU 27H,ORG 8000H,FIND1,:,MOV DPTR,,,#FTAB1,;取表头地址,MOV B,,,A,;待查命令字符暂存,B,LOP1,:,CLR A,MOVC A,,,A+DPTR,JZ ERR1,INC DPTR,CJNE A,,,B,,,FLN1,CLR A,MOVC A,,,A+DPTR,MOV B,,,A,;处理程序入口地址高,8,位暂存,B,INC DPTR,CLR A,MOVC A,,,A+DPTR,;处理程序入口地址高,8,位暂存,A,MOV DPL,,,A,MOV DPH,,,B,CLR A,JMP,A+DPTR,;转处理程序,FLN1,:,INC DPTR,;准备查下一项,INC DPTR,SJMP LOP1,ERR1,:,MOV SBUF,,,#0FFH,;出错处理,FTAB1,:,DB A,;,ASCII,码,A,DW TAC,DB B,;,ASCII,码,B,DW TBC,DB C,;,ASCII,码,C,DW TCC,DB E,;,ASCII,码,E,DW TEC,DB G,;,ASCII,码,G,DW TGC,DB I,;,ASCII,码,I,DW TIC,DB P,;,ASCII,码,P,DW TPC,DB Q,;,ASCII,码,Q,DW TQC,DB 0,;表格结束标志,END,TAC EQU 20HFLN1: INC,例,4-24,设有,1,数列,3,,,19,,,22,,,49,,,81,,,94,,共,6,个数,,n=6,,数列序号,0,n-1=5,,待搜索值,x=22,,搜索值已存,A,,搜索到返回主程序,,R2,为搜索次数;搜索不到,,R2,置,FFH,。,ORG 8000H,FIND2,:,MOV R4,,,#0,MOV R5,,,#7,MOV R2,,,#01,MOV R3,,,A,;关键字暂存,R3,LOOP,:,MOV DPTR,,,#TABLE,MOV A,,,R4,ADD A,,,R5,CLR C,RRC A,;,I = (L+P)/2,MOV R1,,,A,CLR C,SUBB A,,,R4,;,I,与区间上限比较,JZ ERR,;相等未找到转出错,MOV A,,,R1,DEC A,MOVC A,,,A+DPTR,;取,x1,CLR C,SUBB A,,,R3,;,x1,和关键字相比,JZ FNSH,;相等,关键字找到,JNC BIG,;,x1x;,转移,MOV A,,,R1,;,x1x,修改区间上限值,INC R2,AJMP LOOP,BIG,:,MOV A,,,R1,;修改区间下限值,MOV R5,,,A,INC R2,AJMP LOOP,ERR,:,MOV R2,,,#0FFH,;置出错标志,FNSH,:,RET,ATBLE,:,DB 3,,,19,,,22,,,49,,,81,,,94,,,0,END,例4-24 设有1数列3,19,22,49,81,94,共,4.7,数制转换,例,4-25,设,4,位,BCD,码,9345,依次存放在内部,RAM,中,40H,43H,单元的低,4,位,高,4,位为,0,。要求转换后的二进制数存,R2R3,中。,ORG 0008H,DCB,:,MOV R0,,,#40H,;,R0,指向千位地址,MOV R1,,,#03,;计数值,R1,MOV R2,,,#0,;存放结果的高位清,0,MOV A,,,R0,;,BCD,码千位数,A,MOV R3,,,A,LOOP,:,MOV A,,,R3,MOV B,,,#10,MUL AB,MOV R3,,,A,;,R3*10,低,8,位,R3,MOV A,,,B,XCH A,,,R2,;,R3*10,高,8,位暂存,R2,MOV B,,,#10,MUL AB,ADD A,,,R2,;,R2*10+,(,R3*10,)高,8,位,MOV R2,,,A,INC R0,;取下一个,BCD,数,MOV A,,,R3,ADD A,R0,MOV R3,,,A,MOV A,,,R2,ADDC A,,,#0,;加低字节的进位,MOV R2,,,A,DJNZ R1,,,LOOP,RET,END,4.7 数制转换 例4-25 设4位BCD码9345依次存,例,4-26 16,位二进制数转换成十进制,BCD,码,ORG 8000H,BCDT,:,MOV R5,,,#16,;设置计算值,CLR A,MOV R2,,,A,;存放结果寄存器清,0,MOV R3,,,A,MOV R4,,,A,LOOP,:,CLR C,MOV A,,,R7,;取被转换二进制数乘,2,RLC A,MOV R7,,,A,MOV A,,,R6,RLC A,MOV R4,,,A,MOV A,,,R4,;乘,2,加,b,后经十进制调整后转换,ADDC A,,,R4,;,BCD,码存,R2R3R4,DA A,MOV R4,,,A,MOV A,,,R3,ADDC A,,,R3,DA A,MOV R3,,,A,MOV A,,,R2,ADDC A,,,R2,DA A,MOV R2,,,A,DJNZ R5,,,LOOP,RET,END,例4-26 16位二进制数转换成十进制BCD码 ORG,3,十六进制转换成,7,段代码,3十六进制转换成7段代码,例,4-27 R,中,2,位十六进制数转换成,7,段代码送,R2,R3,ORG 8000H,HESEC,:,MOV DPTR,,,#TABS,MOV A,,,R2,ANL A,,,#0FH,;取低半字节,MOVC A,,,A+DPTR,;查表,MOV R3,,,A,;结果送,R3,MOV A,,,R2,MOV A,,,#0F0H,;取高半字节,SWAP A,MOVC A,,,A+DPTR,;查表,MOV R2,,,A,;结果送,R2,RET,END,例4-27 R中2位十六进制数转换成7段代码送R2,R3,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!