汇编程序设计举例.ppt

上传人:夺命阿水 文档编号:257657 上传时间:2023-03-28 格式:PPT 页数:22 大小:120KB
返回 下载 相关 举报
汇编程序设计举例.ppt_第1页
第1页 / 共22页
汇编程序设计举例.ppt_第2页
第2页 / 共22页
汇编程序设计举例.ppt_第3页
第3页 / 共22页
汇编程序设计举例.ppt_第4页
第4页 / 共22页
汇编程序设计举例.ppt_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《汇编程序设计举例.ppt》由会员分享,可在线阅读,更多相关《汇编程序设计举例.ppt(22页珍藏版)》请在课桌文档上搜索。

1、一、顺序结构程序设计,顺序程序设计是没有分支,没有循环的直线运行程序,程序执行按照IP内容自动增加的顺序进行。例1 以BUF为首地址的内存中存有015的平方表。查表求X单元中数(在015之间)的平方值,并送回X单元。分析:建立平方表,通过查表完成。,STACK SEGMENT DB 100 DUP(?)STACK ENDSDATASEGMENT BUF DB 0,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,255 X DB 12DATA ENDSCODESEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,START:M

2、OV AX,DATA MOV DS,AX MOV SI,OFFSET BUF;取BUF的偏移量 XOR AX,AX;AX清0 MOV AL,X;取X ADD SI,AX;X平方值的地址 MOV AL,SI;取X的平方值 MOV X,AL MOV AH,4CH INT 21H;返回DOS CODE ENDS END START 若用换码指令,二、分支结构程序设计,分支程序的基本思想是根据逻辑判断的结果来形成程序的分支,如图,若A成立,则执行P1;否则执行P2。,汇编语言对分支结构的支持,8086转移控制指令无条件转移条件转移单条件(位)测试无符号数关系判断带符号数关系判断,条件转移指令 本系统提

3、供了多个条件转移指令,执行这类指令时通过检测由前边指令已设置的标志位确定是否转移,所以它们通常是跟在影响标志的指令之后。这类指令本身并不影响标志。条件转移指令的通用汇编格式:JCC LABEL 范围-128+127,例2 求绝对值 求AX寄存器和BX寄存器中两个无符号数之差的绝对值,结果放在内存(偏移地址为2800)单元中。分析:利用比较指令,判断谁大谁小,然后大数减小数。,CLC SUB AX,BX JC AA MOV DI,2800H MOV DI,AX JMP EXITAA:SUB BX,AX MOV DI,2800H MOV DI,BXEXIT:MOV AH,4CH INT 21H,例

4、3 有一符号函数如下,DATA SEGMENTX DB?Y DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,X OR AL,AL JZ ZERO JNS PLUS MOV BL,-1 JMP HALTZERO:MOV BL,0 JMP HALTPLUS:MOV BL,1HALT:MOV Y,BL MOV AH,4CH INT 21HCODE ENDS END START,在上面的程序中,要特别注意其中的两中JMP HALT的使用,从而保证每个分支的完整性。,三、循环程序设计,对于

5、程序中多次、有规律执行的部分,我们通常使用循环结构要重复运行这些部分,使程序有较高的运行效率和可读性。1.循环结构:主要由三部分组成,它们是:循环初值:用于设置开始循环时,循环体所处的初始状态,如循环变量初值,循环体中用到的数据和地址指针等。循环体:重复运行的部分,其中还包含了工作部分和循环控制部分。工作部分进行相应的操作,而循环控制部分则保证在不满足循环条件时,跳出循环。循环结束条件:在循环体中包括了循环结束条件运算部分。每循环一次除了工作部分进行相应的操作外,循环条件部分还要通过运算,得出当前循环的状态,以便在适当的条件下结束循环。,2.循环的类型 循环体的结构依照问题的不同,一般可以分为

6、两种类型:先判断后处理 先处理后判断 3.控制循环次数的方法 有三种:用计数控制循环,用条件控制循环和用逻辑变量控制循环。其中,前两种方法用的最多。用计数控制循环 对于循环次数已知的程序,或是在进入循环前可由某变量确定循环次数的程序,通常用计数器来控制循环。(用LOOP指令),例4 把BUF开始的10个字节单元中的二进制数据累加,求得的和放到RES字单元 DATA SEGMENT BUF DB 1,4,9,5,21,64,12,6,10,23 RES DW?DATA ENDS STACK SEGMENT DB 100 DUP(?)STACK ENDS CODE SEGMENT ASSUME C

7、S:CODE,DS:DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,0;AL清0 MOV CX,0AH;置计数器初值,MOV BX,OFFSET BUF;置地址指针 LP:ADD AL,BX;取一个数累加到AL上 ADC AH,0 INC BX;地址加1 LOOP LP;不为0,循环 MOV RES,AX;传送结果 MOV AH,4CH INT 21H CODE ENDS END START,用条件控制循环 适用于某些循环次数未知的程序,或循环次数可变的程序,可以由问题给出的条件控制循环结束。例5 从STRIN单元开始有一字符串,以*作为结束标

8、志。求字符串的长度。DATA SEGMENT STRIN DB ASDFGHJ123KJ*COUNT DW?DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX,MOV BX,OFFSET STRIN;置地址指针 MOV CX,0;置计数器初值为0 LP:MOV AL,BX;取一个字符到AL中 CMP AL,*;是*吗?JE DONE;是*则结束 INC CX;不是*则计数加1 INC BX;地址加1 JMP LP;继续DONE:MOV COUNT,CX;计数送COUNT单元 MOV AH,4CH I

9、NT 21HCODE ENDS END START,循环嵌套 在实际应用中,有些问题较复杂,一重循环不够,必须使用多重循环实现。例6 在DS所决定的数据段,从偏移地址BUFFER开始顺序存放100个无符号16位数,现要编写程序将这100个字数据从大到小排序。分析:排序的方法有很多,在这里,我们采用冒泡法。程序如下:,LEA DI,BUFFER;DI作为指针,指向要排序的数据 MOV BL,99;循环控制初值NEXT0:MOV SI,DI MOV CL,BLNEXT3:MOV AX,SI;取一个数 ADD SI,2 CMP AX,SI;与下一个数进行比较 JNC NEXT5;大于等于时转移 MO

10、V DX,SI;否则,两数交换 MOV SI-2,DX MOV SI,AXNEXT5:DEC CL;控制进行交换的次数 JNZ NEXT3 DEC BL;修改交换的次数 JNZ NEXT0 HLT,四、子程序设计 子程序(过程)是程序设计中经常使用的程序结构,通过把一些固定的、经常使用的功能做成子程序的形式,可以使源程序及目标程序大大缩短,提高程序设计的效率和可靠性。对于一个子程序,应该注意它的入口参数和出口参数。入口参数是由主程序传给子程序的参数,而出口参数是子程序运算完传给主程序的结果。另外,子程序所使用的寄存器和存储单元往往需要保护,以免影响返回后主程序的运行。主程序在调用子程序时,一方面初始数据要传给子程序,另一方面子程序运行结果要传给主程序,因此,主子程序之间的参数传递是非常重要的,参数传递一般有三种方法实现。(1)利用寄存器。这是一种最常见方法,把所需传递的参数直接放在主程序的寄存器中传递给子程序。(2)利用存储单元。这种参数传递方法,把所需传递的参数直接放在子程序调用指令代码之后。(3)利用堆栈。这种方法将参数压入堆栈,在子程序运行时从堆栈中取参数。,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号