汇编程序设计举例.ppt

上传人:王** 文档编号:184496 上传时间:2023-04-01 格式:PPT 页数:22 大小:120KB
下载 相关 举报
汇编程序设计举例.ppt_第1页
第1页 / 共22页
汇编程序设计举例.ppt_第2页
第2页 / 共22页
汇编程序设计举例.ppt_第3页
第3页 / 共22页
汇编程序设计举例.ppt_第4页
第4页 / 共22页
汇编程序设计举例.ppt_第5页
第5页 / 共22页
汇编程序设计举例.ppt_第6页
第6页 / 共22页
汇编程序设计举例.ppt_第7页
第7页 / 共22页
汇编程序设计举例.ppt_第8页
第8页 / 共22页
汇编程序设计举例.ppt_第9页
第9页 / 共22页
汇编程序设计举例.ppt_第10页
第10页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

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

1、 一、顺序结构程序设计 顺序程序设计是没有分支,没有循环的直顺序程序设计是没有分支,没有循环的直线运行程序,程序执行按照线运行程序,程序执行按照IPIP内容自动增加的内容自动增加的顺序进行顺序进行。 例例11 以以BUFBUF为首地址的内存中存有为首地址的内存中存有0 01515的平方表。查表求的平方表。查表求X X单元中数(在单元中数(在0 01515之间)之间)的平方值,并送回的平方值,并送回X X单元。单元。 分析:建立平方表,通过查表完成分析:建立平方表,通过查表完成。 STACK SEGMENT DB 100 DUP(?)STACK ENDSDATA SEGMENT BUF DB 0

2、,1,4,9,16,25,36,49,64,81 DB 100,121,144,169,196,255 X DB 12DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV 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 若用换码指令二、分支结构

3、程序设计 分支程序的基本思想是根据逻辑判断的结分支程序的基本思想是根据逻辑判断的结果来形成程序的分支,如图,若果来形成程序的分支,如图,若A A成立,则执行成立,则执行P1P1;否则执行否则执行P2P2。 汇编语言对分支结构的支持 80868086转移控制指令转移控制指令无条件转移无条件转移条件转移条件转移 单条件(位)测试单条件(位)测试 无符号数关系判断无符号数关系判断 带符号数关系判断带符号数关系判断条件转移指令 本系统提供了多个条件转移指令,执行这类指令时通过检测由前边指令已设置的标志位确定是否转移,所以它们通常是跟在影响标志的指令之后。这类指令本身并不影响标志。条件转移指令的通用汇编

4、格式:J JCCCC LABEL LABEL 范围范围-128-128 +127+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例3 有一符号函数如下有一符号函数如下 1 x0 y=f(x)= 0 x=0 -1 x0Y=0 Y=1 Y= -1YYNN汇点

5、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的的使用,从而保

6、证每个分支的使用,从而保证每个分支的完整性。完整性。 三、三、循环程序设计 对于程序中多次、有规律执行的部分,我们通常使用循环结构要对于程序中多次、有规律执行的部分,我们通常使用循环结构要重复运行这些部分,使程序有较高的运行效率和可读性。重复运行这些部分,使程序有较高的运行效率和可读性。 1. 1. 循环结构:循环结构:主要由三部分组成,它们是:主要由三部分组成,它们是: :用于设置开始循环时,循环体所处的初始状态,:用于设置开始循环时,循环体所处的初始状态,如循环变量初值,循环体中用到的数据和地址指针等。如循环变量初值,循环体中用到的数据和地址指针等。 :重复运行的部分,其中还包含了工作部分

7、和循环控:重复运行的部分,其中还包含了工作部分和循环控制部分。工作部分进行相应的操作,而循环控制部分则保证在不满足制部分。工作部分进行相应的操作,而循环控制部分则保证在不满足循环条件时,跳出循环。循环条件时,跳出循环。 :在循环体中包括了循环结束条件运算部分。:在循环体中包括了循环结束条件运算部分。每循环一次除了工作部分进行相应的操作外,循环条件部分还要通过每循环一次除了工作部分进行相应的操作外,循环条件部分还要通过运算,得出当前循环的状态,以便在适当的条件下结束循环。运算,得出当前循环的状态,以便在适当的条件下结束循环。 2. 2. 循环的类型循环的类型 循环体的结构依照问题的不同,一般可以

8、分为两种类型: 先判断后处理 先处理后判断 3. 3. 控制循环次数的方法控制循环次数的方法 有三种:用计数控制循环,用条件控制循环和用逻辑变量控制循环。其中,前两种方法用的最多。 用计数控制循环 对于循环次数已知的程序,或是在进入循环前可由某变量确定循环次数的程序,通常用计数器来控制循环。(用LOOP指令) 例例44 把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 E

9、NDS CODE SEGMENT ASSUME CS: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 用条件控制循环用条件控制循环

10、 适用于某些循环次数未知的程序,或循环次数可变的程序,可以由问题给出的条件控制循环结束。 例例55 从STRIN单元开始有一字符串,以*作为结束标志。求字符串的长度。 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 A

11、L,* ;是是*吗?吗? JE DONE ;是是*则结束则结束 INC CX ;不是不是*则计数加则计数加1 INC BX ;地址加地址加1 JMP LP ;继续继续DONE:MOV COUNT,CX ;计数送计数送COUNT单元单元 MOV AH,4CH INT 21HCODE ENDS END START 循环嵌套 在实际应用中,有些问题较复杂,一重循环不够,必须使用多重循环实现。 例6 在DS所决定的数据段,从偏移地址BUFFER开始顺序存放100个无符号16位数,现要编写程序将这100个字数据从大到小排序。 分析:排序的方法有很多,在这里,我们采用冒泡法。 程序如下: LEA DI,B

12、UFFER ;DI作为指针,指向要排序的数据作为指针,指向要排序的数据 MOV BL,99 ;循环控制初值循环控制初值NEXT0: MOV SI,DI MOV CL,BLNEXT3 :MOV AX,SI ;取一个数取一个数 ADD SI,2 CMP AX,SI ;与下一个数进行比较与下一个数进行比较 JNC NEXT5 ;大于等于时转移大于等于时转移 MOV DX,SI ;否则,两数交换否则,两数交换 MOV SI-2,DX MOV SI,AXNEXT5: DEC CL ;控制进行交换的次数控制进行交换的次数 JNZ NEXT3 DEC BL ;修改交换的次数修改交换的次数 JNZ NEXT0

13、 HLT四、四、 子程序设计子程序设计 子程序(过程)是程序设计中经常使用的程序结构,子程序(过程)是程序设计中经常使用的程序结构,通过把一些固定的、经常使用的功能做成子程序的形通过把一些固定的、经常使用的功能做成子程序的形式,可以使源程序及目标程序大大缩短,提高程序设式,可以使源程序及目标程序大大缩短,提高程序设计的效率和可靠性。计的效率和可靠性。 对于一个子程序,应该注意它的入口参数和出口对于一个子程序,应该注意它的入口参数和出口参数参数。入口参数是由主程序传给子程序的参数,而出。入口参数是由主程序传给子程序的参数,而出口参数是子程序运算完传给主程序的结果。另外,子口参数是子程序运算完传给

14、主程序的结果。另外,子程序所使用的寄存器和存储单元往往需要保护,以免程序所使用的寄存器和存储单元往往需要保护,以免影响返回后主程序的运行。影响返回后主程序的运行。 主程序在调用子程序时,一方面初始数据要传给主程序在调用子程序时,一方面初始数据要传给子程序,另一方面子程序运行结果要传给主程序,因子程序,另一方面子程序运行结果要传给主程序,因此,主子程序之间的参数传递是非常重要的此,主子程序之间的参数传递是非常重要的 参数传递一般有三种方法实现参数传递一般有三种方法实现。 (1) (1)利用寄存器利用寄存器。这是一种最常见方法,。这是一种最常见方法,把所需传递的参数直接放在主程序的寄存器中把所需传递的参数直接放在主程序的寄存器中传递给子程序。传递给子程序。 (2) (2)利用存储单元利用存储单元。这种参数传递方法,。这种参数传递方法,把所需传递的参数直接放在子程序调用指令代把所需传递的参数直接放在子程序调用指令代码之后。码之后。 (3) (3)利用堆栈利用堆栈。这种方法将参数压入堆栈,。这种方法将参数压入堆栈,在子程序运行时从堆栈中取参数。在子程序运行时从堆栈中取参数。

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

当前位置:首页 > IT计算机 > 嵌入式开发

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

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