《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计

上传人:aa****6 文档编号:54196302 上传时间:2018-09-09 格式:PPT 页数:89 大小:1.02MB
返回 下载 相关 举报
《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计_第1页
第1页 / 共89页
《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计_第2页
第2页 / 共89页
《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计_第3页
第3页 / 共89页
《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计_第4页
第4页 / 共89页
《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计_第5页
第5页 / 共89页
点击查看更多>>
资源描述

《《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计》由会员分享,可在线阅读,更多相关《《微机原理及接口技术》全套ppt电子课件教案第四章汇编语言程序设计(89页珍藏版)》请在金锄头文库上搜索。

1、第四节 汇编语言程序设计及举例,概述,顺序结构,分支程序,循环程序,字符串处理程序,码转换程序,DOS系统功能调用,一、概述,1.编写步骤(1)分析问题,抽象出数学模型(2)确定算法(3)画程序流程图,工作框,判断,调子程序,(4)分配内存工作单元和寄存器。(5)按程序流程图编制程序。(6)上机调试,排错。,起始框,终止框,2.程序质量判断(1)执行时间(2)占用内存空间(3)语句行数 3.程序结构顺序分支循环子程序,二、 顺序结构,例4-1:P.139,两个32位无符号数乘法,乘积为64位。,设地址指针,被乘数低16位BAX,乘数低16位DSI,存入缓冲区,乘数高16位CDI,B*D=部分积

2、1,被乘数高16位AAX,A*D=部分积2,部分积2低16位 加部分积1高16位,存入缓冲区,B*C=部分积3,进位加至部分积2高16位,与前面对应16位相加,保存进位,部分积4与前面的和相加,保存在缓冲区,A*C=部分积4,恢复进位,返回,说明:,(1) 数据段: data segment mulnum dw 0000,0ffffh,0000,0ffffh,4dup(?) data ends,被乘数,乘数,乘积,(2)堆栈段: stack segment para stack stack db 100dup(?) stack ends,(3) 码段:,code segmentassume c

3、s:code,ds:data,ss:stack,es:data code ends,Assume语句指明了码段、数据段、堆栈段和附加段是哪些段,1) 定义了一个远过程,将段和IP压入堆栈,子程序返回,start proc farpush dsmov ax,0push axret start endp,连接程序为每个用户程序建立了一个程序段前缀,开始处(0单元)安排了一条返回DOS的指令,而且程序段前缀的段地址赋给了DS。,2) 接着三条指令,mov ax,data mov ds,ax mov es,ax,设置DS,ES。 3) bx为地址指针bxbx+3: 32位被乘数bx+4bx+7: 32

4、位乘数bx+8bx+0fh:放乘积,4) 16位乘法mulAX:被乘数si或di:乘数dx.ax :32位乘积,lea bx,mulnum mulu32:mov ax,bxmov si,bx+4mov di,bx+6mul simov bx+8,axmov bx+0ah,dx,bx:数据指针,B*D,Bax Dsi Cdi,保存部分积1,mov ax,bx+2mul siadd ax,bx+0ahadc dx,0mov bx+0ah,axmov bx+0ch,dxmov ax,bxmul diadd ax,bx+0ahadc dx,bx+0ch,Aax,A*D,B*C,Bax,部分积2低位加,

5、部分积1的高位,保存,与部分积3加,mov bx+0ah,ax mov bx+0ch,ushfmov ax,bx+2mul diadd ax,bx+0chadc dx,0popfadc dx , 0 mov bx+0ch,axmov bx+0eh,dx 20,A*C,Aax,保存后一次进位位,与部分积4加,保存,例: 有符号数相乘,(1) 符号处理 (2) 绝对值相乘,说明:,(1) 调用无符号数乘法子程序前的被乘数,乘数,乘积的符号处理。,bx为地址指针,置乘积符号位初值,Bax Adx Dsi Cdi,mov sign,0 lea bx,mulnum mov ax,bx mov dx,bx

6、+2 mov si,bx+4 mov di,bx+6,cmp dx,0jns othernot axnot dxadd ax,1adc dx,0not signmov bx, axmov bx+2,dx,检验被乘数符号,改变乘积符号位,为负取补,暂存被乘数,为正转other,other:cmp di,0jns gomulnot sinot diadd si,1adc di,0not signgomul:call mulu32,检验乘数符号,改变乘积符号位,为负取补,调用无符号乘法程序,为正转gomul,(2) 调用子程序后,根据乘积的符号对乘积作处理。,检验乘积符号,为负取补,为正转done,

7、cmp sign,0 je donenot word ptr bx+8not word ptr bx+0ahnot word ptr bx+0chnot word ptr bx+0ehadd word ptr bx+8,1adc word ptr bx+0ah,0 adc word ptr bx+0ch,0 adc word ptr bx+0eh,0 done: ret start endp,三、分支程序,例: SIGEF:MOV AX,BUFFEROR AX, AXJE ZEROJNS PLUSMOV BX,0FFFFHJMP CONTI ZERO:MOV BX,0JMP CONTIPLUS

8、:MOV BX,1 CONTI: ,为负,建立条件,为0转ZERO,为正转PLUS,四、循环程序,组成: (1) 初始化 (2) 循环体(3) 修改参数 (4) 循环控制,结构形式:,1.用计数器控制循环(1)减1计数器(2)加1计数器,例4-2:P.141在一串给定个数的数中寻找最大值,放至指定的存储单元,每个数为16位。,源程序名,COUNT=2n,n个数据字,放结果(最大值),(1)数据段,NAME SEARCH_MAX DATA SEGMENT BUFFER DW X1,X2,XN COUNT EQU $-BUFFER MAX DW ? DATA ENDS,STACK SEGMENT

9、STACK STACKDB 64 DUP(?)TOP EQU $-STACKSTACK ENDS,TOP为栈顶偏移,64个字节,(2)堆栈段,CODE SEGMENT START PROC FARASSUME CS:CODE,DS:DATA,SS:STACK BEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV AX,STACKMOV SS,AXMOV AX,TOP MOV SP,AX,(4)置子程序返回地址,定义子程序,(3)代码段,置DS,置SS,置SP,MOV CX,COUNT LEA BX,BUFFERMOV AX,BXINC BXI

10、NC BXSHR CXDEC CX,AGAIN: CMP AX,BXJGE NEXTMOV AX,BXNEXT: INC BXINC BXLOOP AGAIN,MOV BX,AXRETSTART ENDPCODE ENDSEND START 21,取第一个字,(5) 循环初始化,CX=2n,指针指向下一个字,(6) 循环体,比较,个数减1,2,CX=个数,AX大,转NEXT,最大值AX,(7) 修改参数,指针加1,(8)循环控制,CX-1CX,为0结束,存最大值,BX为数据指针,2.用开关变量控制循环,一个循环体中有两个循环支路,设一个开关变量,控制进入哪个循环支路。 例:数据采集系统。采到的

11、前5个数用一种函数(FUN1)处理,开关=0。采到的后7个数用另一种函数(FUN2)处理,开关=1。,说明:,(1)数据: data segment buffer dw 5,5,5,5,5,5,5,5,5,5,5,5 block dw 12 dup(?) count1 equ 5 count2 equ 7 data ends,12个数据,个数,存结果,(2)初始化:源数据指针 bufferbx处理后数据指针 blocksicount1+1,count2+1cx开关0dx (3)循环主体: 判开关量dx=0? dx=0 call fun15个数据处理完后dx=1,cx=count2+1dx=1

12、call fun2每处理完一个数,修改指针bx,si,mov dx,0mov cx,count1+1lea bx,bufferlea si,block again:mov ax,bx cmp dx,0jne anothcall fun1loop nextmov dx,1mov cx,count2+1jmp again next: mov si,axinc bxinc bxinc siinc sijmp again anoth:call fun2loop nextret,(1)循环初始化 开关dx=0 cx为计数器 bx源指针 si目的指针,(2)循环主体,开关量转为1,为0,函数1处理,处理后

13、保存,(3)修改参数,函数2处理,(4)循环控制,开关不为0转anoth,3.多重循环,一个循环中包含另一个循环,称多重循环。如:二维数组处理,二重循环。 注意:(1) 各重循环的初始控制条件及实现。(2) 内循环可嵌套在外循环中,也可几个内循环并列在外循环中,可从内循环跳到外循环,不可从外循环中直接跳进内循环。(3) 要防止出现死循环。,例:延时程序,多重循环实现软件延时。,DELAY:MOV DX,3FFHTIME:MOV AX,0FFFFHTIME1:DEC AXNOPJNE TIME1DEC DXJNE TIMERET,内循环控制变量AX,初值=FFFFH,外循环控制变量DX,初值=3

14、FFH,五、字符串处理程序,字符:ASCII码 说明:(1) ASCII码数字、字母形成一个有序序列:09:30H 39HAZ:41H 5AHaz:61H 7AH(2) 一些I/O装置(键盘,显示器,打印机)采 用ASCII码传送。(3) 常用的控制字符:0AH 换行(LF)0DH 回车(CR),1.确定字符串长度,字符串长度不定,以某个特定字符为结束符。 例4-3:从头搜索字符串的结束符,统计长度。,(1) 数据段,name length_of_string data segment string db abcduvwxyz,0dh ll db ? cr equ 0dh data ends,字符串string,cr:结束符,串长度放ll 单元,(2) 寄存器安排字符串地址指针:DI字符串长度: DL串结束字符: AL,

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号