微机原理及接口技术(第三章-6)

上传人:抢*** 文档编号:243782706 上传时间:2024-09-30 格式:PPT 页数:38 大小:334.50KB
返回 下载 相关 举报
微机原理及接口技术(第三章-6)_第1页
第1页 / 共38页
微机原理及接口技术(第三章-6)_第2页
第2页 / 共38页
微机原理及接口技术(第三章-6)_第3页
第3页 / 共38页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,五、 汇编语言程序设计,讲课内容,一、概述,1.,编写汇编语言程序步骤,2.,判断程序质量的标准,3.,几种程序结构,二、汇编语言程序设计举例,例,1,将寄存器,BX,中的内容以十六进制形式显示出来。,例,2,将键盘输入的十进制数据串转换成其相应大小的数值,存放在,BX,寄存器中,。,1,一、概述,1.,编写汇编语言程序步骤,2.,判断程序质量的标准,3.,几种程序结构,2,一,.,编写汇编语言程序步骤,分析实际问题,抽象描述问题的模型,确定解决模型的算法,按算法画出程序流程图,按流程图编写程序,上机调试,运行程序,3,2.,判断程序质量的标准,程序的正确性,程序的可读性,程序的执行时间,程序所占内存大小,4,3,几种程序结构,顺序结构,分支结构,循环结构,子程结构,5,顺序结构,6,例:,P156,内存中自,TABLESQ,开始的,16,个单元连续存放着自然数,0,到,15,的平方值,任给一 数,x,(,0x15),在,XY,单元中,查表求出,X,的平方值,将结果存入,YY,单元中。,DATA SEGMENT,TABLESQ DB 0, 1, 4, 9, 16, 25, 36,49,DB 64, 81, 100, 121, 144, 169, 225,XX DB ?,YY DB ?,DATA ENDS,STACK SEGMEN PARA STACKSTACK,DB 50 DUP(?),STACK ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,SS:STACK,STACK PROC FAR * *,BEGIN: PUSH DS * *,MOV AX,0 * *,PUSH AX * *,MOV AX,DATA,MOV BX,OFFSET TABLESQ,MOV AH,0,MOV AL,XX,ADD BX,AX,MOV AL,BX,MOV YY,AL,RET * *,START ENDP * *,CODE ENDS,END BEGIN,7,例,3,:符号函数的处理,有一符号函数:,Y=,1,, 当,X0 (-128,x127),0,当,X=0,-1,当,X0,设给定值,X,存放于,XX,单元,函数,Y,值存放于,YY,单元,则按,X,的不同取值给,Y,赋值的程序如下,:,MOV AL,XX,CMP AL,0,JGE BIGR,MOV YY,AL ;X0,时,-1,送入,YY,单,元,HLT,这是一个多重分支的程序,其流程图见图,开 始,取 数,X,BL,处理,分支结构,10,三个分支,、,CMP AL, 0,JG great,JL less,JMP exit,less:,JMP exit,great:,exit:,、,AL,=,0,处理,AL0,处理,AL,LIST_REG,;,在,DOS,下执行程序,0000,0000,00FF 0BDF 0000 0912 0000 0000 0BDF 0BDF 0BEF 0BEF 0000 3202,D: ,DEBUG,LIST_REG.EXE,;,利用,DEBUG,检测结果,-,R,;,显示当前寄存器内容,AX=,0000,BX=0000 CX=,007B,DX=0000 SP=,0000,BP=0000 SI=,0000,DI=0000,DS=,128E,ES=128E SS=,129E,CS=129E IP=,0000,NV UP EI PL NZ NA PO NC,129E:0000 53 PUSH BX,-,G,;,执行程序,0000,0000,007B,0000,0000,0000,0000,0000,128E,128E,129E,129E,0000,7202,Program terminated normally,-,运行的结果与用,R,命令显示的结果相同,程序运行结果正确,27,例,2,将键盘输入的十进制数据串转换成相应大小的十六进 制数值存放在,BX,寄存器中。,分析,:,从键盘输入,1234 (,表示,1234 ),用,0AH,功能输入,则缓冲区存放的内容为,:,06h,04h,31h,32h,33h,34h,0Dh,num,问题:,要转换成,1234,即,04D2h,存放在,BX,中,怎么实现,?,清,ASCII,码的高,4,位可得各数位大小值。,01h,02h,03h,04h,04D2h,?,28,算法一:,数值大小,=,各位值,权值之和,1234D =,千位,1000 +,百位,100 +,十位,10 +,个位,= 11000 + 2100 + 310 + 4,= 0000 0100 1101 0010B,= 04D2H,01h,02h,03h,04h,04D2h,?,29,算法二:,数值大小,=,部分和,10 +,下一位数值,1234D = ( ( ( 010 + 1 ) 10 + 2 ) 10 + 3 ) 10 + 4,= 0000 0100 1101 0010B,= 04D2H,部分和从,0,开始,循环次数等于输入的位数,01h,02h,03h,04h,04D2h,?,30,data SEGMENT,string DB Input:,$,num DB 6, ?, 6 DUP(?),data ENDS,CODE SEGMENT,ASSUME CS:code, DS:data,start: MOV AX, data,MOV DS, AX,CALL input,CALL change,CALL,list_bx,MOV AH, 4CH,INT 21H,开始,初始化,DS,的值,CALL input,显示输入提示,等待,从键盘输入十进制数据串,CALL change,将数据串转化为,相应的数值存放在,BX,中,返回,DOS,主程序流程图,CALL,list_bx,将,BX,内容以,16,进制显示出来,31,input,子程序流程图,调用,09,功能,显示输入提示,调用,0A,功能,等待从键盘输入数据,RET,返回,input PROC,LEA DX , string,MOV AH ,09H,INT 21H,LEA DX , num,MOV AH ,0AH,INT 21H,RET,input ENDP,06,04,31,32,33,34,0D,00,num,00,00,32,change,子程序流程图,(BX) ,输入字符的数值大小,SI ,数据串偏址,CX ,数据串长度,AX ,部分和初值,0,DI ,乘数,10,Y,N,RET,返回,AX,部分和乘,10,(AX) (AX)+(BX),形成新的部分和,修改,SI,指针,,指向下一位输入,BX,转换结果,AX,CX CX-1,CX=0?,change PROC,LEA SI, num+2,MOV CL, num+1,MOV CH, 0,MOV AX, 0,MOV DI, 10,next:,MUL DI,MOV BH, 0,MOV BL, SI,AND BL, 0FH,ADD AX, BX,INC SI,LOOP next,zero: MOV BX, AX,RET,change ENDP,06,04,31,32,33,34,0D,00,num,00,00,1234D =,( (,(,0,10,+ 1,),10,+ 2,),10,+ 3,),10,+ 4,33,显示字符个数,CH=4,循环移位次数,CL=4,BX,循环左移,4,位,将要显示的值移至低,4,位,保存在,DL,中,清,DL,的高,4,位,,只保留要显示位的值,DL DL+30H,完成数值,09,的,ASCII,码转换,Y,N,DLDL+07H,完成数值,AF,的,ASCII,码转换,用,02,功能显示,DL,中的字符,Y,N,RET,返回,DL,超出,39H,?,CH CH-1,转换结束?,list_bx,子程序流程图,list_bx,PROC,MOV CH, 4,MOV CL, 4,next:,ROL BX, CL,MOV DL, BL,AND DL, 0FH,ADD DL, 30H,CMP DL, 39H,JLE print,ADD DL, 07H,print: MOV AH, 2H,INT 21H,DEC CH,JNZ next,RET,;,子程返回,list_bx,ENDP,code ENDS,END start,34,例,2,程序存在的问题:,1,未处理输入非数字字符的情况,2,输入的十进制数范围为,065535,3,当输入字符个数为,0,(直接回车)时,结果错误,4,未处理负数情况,5,结果的显示未换行,Input:1234,最后看到的是:,0D42t:1234,35,编写子程序的注意事项,:,注意子程中,PUSH,、,POP,应成对,,否则易造成死机。,data SEGMENT,string DB Hello,$,data ENDS,code SEGMENT,ASSUME CS:code, DS:data,start: MOV AX, data,MOV DS, AX,CALL,input,MOV AH, 4CH,INT 21H,input PROC,PUSH AX,LEA DX, string,MOV AH, 09H,INT 21H,RET,input ENDP,code ENDS,END start,执行,call,前,SS:SP,(AX),执行,call,后,SS:SP,(IP),执行,push,后,SS:SP,执行,ret,后,SS:SP,(IP),36,例,下面程序段,思考是否可以完成,AX CX, BXDX,CODE SEGMENT,ASSUME CS:code,start: MOV AX,data,MOV DS,AX,PUSH AX,PUSH BX,CALL sub,MOV AH, 4CH,INT 21H,sub PROC,POP DX,POP CX,、,、,RET,sub ENDP,code ENDS,END start,如何用堆栈传送参数,,参看教材,或相关参考书。,push ax,前,SS:SP,(BX),push ax,后,SS:SP,(AX),push,bx,后,SS:SP,执行,ret,后,SS:SP,(IP),call sub,后,SS:SP,SS:SP,pop,dx,后,SS:SP,pop,cx,后,(DX),(CX),37,2.,子程与主程的参数传送: (,p124p132),用寄存器传送,(例二中,list_bx,子程序用,BX,寄存器传送参数,),用定义的变量传送,(例二,change,子程序用,变量,num+2,传送参数),3),利用地址表传送(自学),4),用堆栈传送(自学),38,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


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

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


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