汇编程序设计基本方法课件

上传人:我*** 文档编号:143784607 上传时间:2020-09-02 格式:PPT 页数:56 大小:987KB
返回 下载 相关 举报
汇编程序设计基本方法课件_第1页
第1页 / 共56页
汇编程序设计基本方法课件_第2页
第2页 / 共56页
汇编程序设计基本方法课件_第3页
第3页 / 共56页
汇编程序设计基本方法课件_第4页
第4页 / 共56页
汇编程序设计基本方法课件_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《汇编程序设计基本方法课件》由会员分享,可在线阅读,更多相关《汇编程序设计基本方法课件(56页珍藏版)》请在金锄头文库上搜索。

1、5 . 汇编程序设计基本方法,5.1 汇编语言程序结构 5.2 子程序设计与调用 5.3 DOS功能调用,(补充),前面几章主要介绍了指令系统中的各种指令,这些指令是编写汇编程序的工具。本章将学习编写汇编程序。,序言:,(1) 分析问题,明确要求; (2) 建立数学模型:即将解决问题的方法用数学语言表达出来 (3) 确定算法:即转化为计算机解法; 画出程序流程图; 编码,调试; 整理资料,投入使用。,汇编程序设计基本过程:,汇编程序设计特点:模块化、结构化,本章学习要求,1、掌握三种结构程序的设计方法,领会结构化程序设计的思想。,3、掌握几种DOS功能调用,了解BIOS功能调用,能从功能调用表

2、中查找到满足自己要求的DOS功能并给出正确的调用参数。,2、掌握子程序设计和调用方法。,5.1 汇编语言程序结构,分支结构 子程序结构,复合结构:多种程序结构的组合,顺序结构 循环结构,一、顺序结构程序设计,例:,MOV AX, X MOV DX, X+2 ADD AX, Y ADC DX, Y+2 ; ? ADD AX, 24 ADC DX, 0 ; x+y+24 SUB AX, Z SBB DX, Z+2 ; x+y+24-z MOV W, AX MOV W+2, DX ; 结果存入W, W+2单元,二、循环结构程序设计,循环结构:包括当型和直到型两种。,WHILE 结构 DO-UNTIL

3、 结构,控制条件,初始化,循环体,Y,N,控制条件,初始化,循环体,Y,N,循环类型:,循环结构的组成部分:,初始化部分:设置循环的初始状态。,类似C语言for(int i=1; i10; i+)中的int i=1,循环体部分:循环工作的主体部分。,调整部分:调整循环的次数。,类似C语言for(int i=1; i10; i+)中的i+,控制部分:控制循环的结束。,类似C语言for(int i=1; i10; i+)中的i10,单重循环,嵌套循环(多重循环):即循环结构内又有循环,四条循环控制指令:,循环指令:LOOP OPR 循环判断条件:(CX) 0 为零或相等时循环指令:LOOPZ/LO

4、OPE OPR 循环判断条件:ZF=1 且 (CX) 0 不为零或不相等时循环指令:LOOPNZ(LOOPNE) OPR 循环判断条件:ZF=0 且 (CX) 0,因此,用跳转指令也能实现循环,单重循环程序举例,例:试编制一个程序把BX寄存器中的二进制数以十六进制数的形式显示在屏幕上。,分析:,BX,1 2 3 4,画流程图:,ASCII码表,program segment ;define code segment main proc far assume cs:program Start: push ds ;save old data segment sub ax,ax push ax ;0

5、偏移地址入栈 mov ch, 4 ;number of digits rotate: mov cl, 4 ;set count to 4 bits rol bx, cl mov al, bl and al, 0fh ; 提取出低4位 add al, 30h ; 09 ASCII 30H39H cmp al, 3ah ;判断是否是大于9 jl printit add al, 7h ; AF ASCII 41H46H,printit: mov dl, al ;调用DOS功能的入口参数 mov ah, 2 int 21h dec ch ;判断是否已显示了4个数字 jnz rotate ret mai

6、n endp program ends end,例:试编制一程序实现从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出程序;如是,则开始接收键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。,Data segment buffer db 80 dup(?) flag db ? Data ends Prognam Segment assume cs:Prognam, ds:Data start: push ds ; set up stack for reture sub ax,ax push ax mov ax, Data

7、mov ds, ax ; main part of program goes here lea bx, buffer mov flag, 0,next: mov ah,01 ; 调用DOS 1号子功能 int 21h ; 从键盘接收一个字符 test flag, 01h jnz follow ; 判断是否是第一个字符 cmp al, 20h ; 判断是否是空格符 jnz exit mov flag, 1 jmp next follow: cmp al, 20h jz exit mov bx, al ; 置入缓冲区 inc bx jmp next exit: ret ; return to DO

8、S main endp Prognam ends end start,多重循环程序举例,例:有一个首地址为A的字类型数组,试编制程序使该数组中的数按从小到大排序。设数组中的元素为32,85,16,15,8,冒泡法排序算法, mov cx, 5 ;元素个数 dec cx ;比较遍数 Loop1: mov di, cx ;比较次数 mov bx, 0 Loop2: mov ax, Abx ;相邻两数 cmp ax, Abx+2 ; 比较 jle continue xchg ax, Abx+2 ;交换位置 mov Abx, ax continue: add bx, 2 loop loop2 mov

9、cx, di loop loop1 ,三、分支结构程序设计 (选择结构程序设计),选择结构:程序中存在判断,并根据判断结果转向不同 的处理,选择结构包括了二路分支和多路分支,?,?,case 1 case 2,二路分支 IF-ELSE,case 1 case 2 case n,多路分支 SWITCH,实现多路分支结构的方法:,跳转表法,关键字法,1、无条件转移指令 JMP 2、条件转移指令 JZ / JNZ 、 JE / JNE、 JS / JNS、 JO / JNO、 JP / JNP、 JB / JNB、 JL / JNL、 JBE / JNBE、 JLE / JNLE、 JCXZ,控制转

10、移指令:,例:写一程序,从键盘输入一位数字,判断其奇偶性,若为奇数,在屏幕上输出字符串“It is odd!”;否则输出“It is even!”,DATA SEGMENT ;定义数据段 STRING1 DB IT IS ODD!, $ STRING2 DB IT IS EVEN!, $ DATA ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA ;ASSUME伪指令,说明段与 ;段寄存器之间的对应关系 START: MOV AX,DATA ;实现段与段寄存器之间的对应 ;关系 MOV DS,AX,MOV AH,01H ;调用1号DOS功能,从键盘

11、上读入一个 ;字符,并将该字符回显在屏幕上 INT 21H CLC RCR AL,1 JNC EVN MOV DX,OFFSET STRING1 ;将字符串Sting1的偏移地址 ;赋给DX CALL DISPMESS EVN: MOV DX,OFFSET STRING2 CALL DISPMESS DISPMESS PROC ;定义一个过程,用于输出字符串 MOV AH,9 ;调用9号子功能 INT 21H ;返回DOS MOV AH,4CH ;结束程序 INT 21H DISPMESS ENDP CODE ENDS END START,例:写一程序,由用户输入三个单字节无符号数且存放于BU

12、FFER开始的缓冲区中,用户每输入一位数前屏幕显示: Enter the first value(0-9): _ Enter the second value(0-9): _ Enter the third value(0-9): _ 程序将这三个数按从大到小排序。排完序后,显示如下 After sorting. Num1= _ Num2= _ Num3= _,DATA SEGMENT MSG1 DB Enter the first value(0-9):,$ MSG2 DB 0DH,0AH,Enter the second value(0-9):,$ MSG3 DB 0DH,0AH,Ente

13、r the third value(0-9):,$ MSG4 DB 0DH,0AH,After sorting.,$ NUM1 DB 0DH,0AH,Num1=,$ NUM2 DB 0DH,0AH,Num1=,$ NUM3 DB 0DH,0AH,Num1=,$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX MOV DX,OFFSET MSG1 ;读取第一个数 MOV AH,9 INT 21H MOV AH,01H,INT 21H MOV BL,AL MOV DX,OFFSET MSG2 ;读

14、取第二个数 MOV AH,9 INT 21H MOV AH,01H INT 21H MOV CL,AL MOV DX,OFFSET MSG3 ;读取第三个数 MOV AH,9 INT 21H MOV AH,01H INT 21H MOV BH,AL CMP BL,CL,JAE NEXT1 ;等价于JNB XCHG BL,CL NEXT1: CMP BL,BH JAE NEXT2 XCHG BL,BH NEXT2: CMP CL,BH JAE DISPLAY XCHG CL,BH DISPLAY:MOV DX,OFFSET MSG4 MOV AH,9 INT 21H MOV DX,OFFSET

15、NUM1 MOV AH,9 INT 21H MOV AH,02H MOV DL,BL INT 21H,MOV DX,OFFSET NUM2 MOV AH,9 INT 21H MOV AH,02H MOV DL,CL INT 21H MOV DX,OFFSET NUM3 MOV AH,9 INT 21H MOV AH,02H MOV DL,BH INT 21H MOV AH,4CH INT 21H CODE ENDS END START,5.2 子程序设计与调用,子程序的作用:,减少编程工作量;,节省存储空间;,模块化,使程序结构清晰,便于调试;,一、过程(子程序)定义伪指令,二、子程序的调用和返回,子程序调用:隐含使用堆栈保存返回地址 call near ptr subp (1) 保存返回地

展开阅读全文
相关资源
相关搜索

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

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