《程序设计》PPT课件

上传人:san****019 文档编号:16087093 上传时间:2020-09-18 格式:PPT 页数:43 大小:301.51KB
收藏 版权申诉 举报 下载
《程序设计》PPT课件_第1页
第1页 / 共43页
《程序设计》PPT课件_第2页
第2页 / 共43页
《程序设计》PPT课件_第3页
第3页 / 共43页
资源描述:

《《程序设计》PPT课件》由会员分享,可在线阅读,更多相关《《程序设计》PPT课件(43页珍藏版)》请在装配图网上搜索。

1、第6节 汇编语言程序设计基本技术,5.6.1 程序设计步骤,分析问题,建立数学模型;,确定算法;,编制程序流程图;,编制程序;,调试程序。,5.6.2 顺序程序设计,按编写指令的顺序执行,且每条指令只执行一次。,例:试编制程序,计算下列公式的值,并将结果存放 在FUN存储单元中。 F 其中X,Y,Z的值分别存放在VARX、VARY、VARZ三个字存储单元中,且计算过程的中间值和最后结果仍在16位二进制数的范围内。编制源程序如下:,TITLE EXAMPLE PROGRAM DATA SEGMENT;设置数据段 VARXDW 123H;变量X VARYDW 456H;变量Y VARZDW 789

2、H;变量Z FUNDW ?;结果单元 DATA ENDS STACK1 SEGMENT PARA STACK;设置堆栈段 DW 20H DUP(0) STACK1 ENDS,CODESEGMENT;设置代码段 ASSUME CS:CODE,DS:DATA,SS:STACK1 START:MOV AX,DATA;置段基值于DS MOV DS,AX MOV AX,VARX;取变量X ADD AX,VARY;AX (X+Y) MOV BX,AX;BX (X+Y) SAL AX,1;AX2*(X+Y) SAL AX,1;AX 4*(X+Y) ADD AX,BX;AX 5*(X+Y) SAL AX,1;

3、AX 10*(X+Y) MOV BX,VARZ;取变量Z DEC BX;BX (Z1) MOV CX,BX;CX (Z1) SAL BX,1;BX 2*(Z1) ADD BX,CX;BX 3*(Z1) SUB AX,BX;AX 10*(X+Y) 3*(Z1) SAR AX,1;AX 10*(X+Y) 3*(Z1)/2 MOV FUN,AX;存放计算结果 MOV AH,4CH;终止用户程序,返回DOS INT 21H CODEENDS END START,例:用查表方法将一位十六进制数(09,AF) 转换成它对应的ASCII码。,首先在数据段建立一个表TABLE,按照十六进制数从小到 大(即从0

4、9到AF)的顺序,在表中存入它们对应的ASCII码值(十六进制数用大写英文字母AF)。为查出某个数的ASCII码,需计算它在内存中的地址。,用简化段定义伪指令,编制源序如下:,.MODEL SMALL;设置内存模式 .DATA;设置数据段 TABLE DB 30H,31H,32H,33H,34H,35H,36H,37H DB 38H,39H,41H,42H,43H,44H,45H,46H HEX DB 4 ASCI DB ?,. STACK 100H;设置堆栈段 . CODE;设置代码段 START: MOVAX,DATAMOVDS,AX LEABX,TABLE ;取表首址 XORAH,AH

5、;AH清零 MOVAL,HEX ;取一位十六进制数 ADDBX,AX;确定查表位置 MOVAL,BX ;查表 MOVASCI,AL ;存结果 MOVAH,4CH;终止程序,返回DOS INT21H ENDSTART,5.6.3 分支程序设计,1、转移指令,无条件转移指令,条件转移指令,直接寻址,间接寻址,段内转移,段间转移,单条件转移指令,无符号数条件转移指令,符号数条件转移指令,段内转移,段间转移,(1)无条件转移指令,格式: JMP 目标地址,目标地址有两种表达方式,a. 直接寻址:,目标地址通常是标号,段内转移:,相对转移,指令给出位移量DISP;,执行操作:IP (IP) + DISP

6、,段间转移:,指令中给出目标地址的段基值和偏移地址;,执行操作:IP 偏移地址 CS 段基值,例如: JMP NEXT,;NEXT为标号,JMP指令的下一指令与目标地址所指的指令之间的字节距离,b. 间接寻址:,目标地址通常由寄存器或存储单元提供,段内转移:,寄存器或存储单元提供偏移地址,执行操作:IP 偏移地址,段间转移:,由一个双字单元提供目标地址的段基值和偏移地址;,执行操作:IP 偏移地址 CS 段基值,(2)条件转移指令,格式: Jxx 目标地址,只能在段内转移,而且是相对转移。,xx为转移条件,a. 单条件转移指令,b. 无符号数条件转移指令,指 令 转 移 条 件 含 义,JA/

7、JNBE CF=0 AND ZF=0 AB转移,JAE/JNB CF=0 OR ZF=1 AB转移,JB/JNAE CF=1 AND ZF=0 A B转移,JBE/JNA CF=1 OR ZF=1 AB转移,c. 符号数条件转移指令,指 令 转 移 条 件 含 义,JG/JNLE SF=OF AND ZF=0 AB转移,JGE/JNL SF=OF OR ZF=1 AB转移,JL/JNGE SFOF AND ZF=0 A B转移,JLE/JNG SFOF OR ZF=1 AB转移,2、分支程序设计,(1)比较/测试分支结构,比较/测试分支结构程序流程,例:编程序段,把DA1字节数据变为偶数。,分

8、析:若二进制数最低位为0,则为偶数。,程序段流程,程序段如下:,TEST DA1,01H JE NEXT INC DA1 NEXT: ,例:设数据段中NUM1,NUM2两字节单元中有 无符号整数,编程完成下面的操作:, 如两个数均是偶数,两个数加1后分别送入 DA1、DA2字节单元中;,如两个数均是奇数,两个数分别直接送入DA1、 DA2字节单元中;,如一个是奇数,一个是偶数,则奇数直接送 DA1字节单元,偶数直接送DA2字节单元。,分析:依次测试NUM1和NUM2的奇偶性,有4种情况。,NUM1,奇,偶,NUM2,偶,DA1NUM1, DA2NUM2,DA1NUM1, DA2NUM2,DA1

9、NUM2, DA2NUM1,DA1NUM1+1, DA2NUM2+1,奇,偶,奇,根据分析,画出流程图如下:,程序段如下:,MOV AL,NUM1 MOV AH,NUM2TEST AL,01H JNE END0 TEST AH,01H JNE L1 INC AL INC AH JMP END0 L1:XCHG AL,AH END0:MOV DA1,AL MOV DA2,AH ,L1,END0,(2)用跳转表形成多路分支结构,假设某程序根据不同情况在5个计算公式中选择1个。可编制5个程序段,分别完成1个公式的运算。在程序中构造跳转表,有两种情况。,例:由分支的入口地址构成跳转表。,跳转表在数据段

10、,表中每一项都是一个分支的偏移地址。,为转移到第N个公式,需先找到该分支的入口地址。入口地址在跳转表中的偏移量为2*(N-1)。,数据段如下:,DATASEGMENT JUMP_TABLEDW SUB1,SUB2,SUB3,SUB4,SUB5 PARAMDB 3 DATAENDS,实现多路分支的程序段如下:,XORAX ,AX MOVAL ,PARAM ;取参数 DECAL ;计算2*(PARAM-1) SHLAL ,1 MOVBX ,OFFSET JUMP_TABLE ADDBX ,AX MOVAX ,BX ;取转移的入口地址 JMPAX ;间接转移到分支入口,例:由转移指令构成跳转表的多路

11、分支程序设计。,跳转表在代码段,表中每一项都是JMP指令代码。,为转移到第N个公式,需先转移到跳转表中对应的JMP指令(在表中的偏移量为3*(N-1),再通过这里的JMP指令转移到对应的计算公式。,实现多路分支的程序段如下:,XOR BX,BX MOV BL,PARAM ;取参数 DEC BL ;参数减1 MOV AL,BL ;再乘3 SHL BL,1 ADD BL,AL ADD BX,OFFSET JUMP_TABLE JMP BX ;转至跳转表 JUMP_TABLE:JMP SUB1 ;转至分支 ,5.6.4 循环程序设计,1、循环控制指令,(1)LOOP指令,属于程序转移类指令,格式:L

12、OOP 目标地址,例:编制程序,产生n个数据的裴波纳契数列。,裴波纳契数列中,a1=0, a2=1, 从第3个数开始, an = an-1 + an-2 。,数据段中数据定义如下:,FIBONA DW 100 DUP(0) ;存放数列 NUM DB 20H ;数据个数,功能:循环计数(CX减1)后,判断循环是否结束: 若(CX)=0,则继续循环,否则顺序执行。,产生数列的程序段如下:, XOR CX,CX MOV CL ,NUM LEA DI ,FIBONA MOV AX ,0 MOV BX ,1 LOP:MOV DI ,AX XCHG AX ,BX ADD AX ,BX ADD DI ,TY

13、PE FIBONA LOOP LOP ,(2)LOOPE/LOOPZ指令,格式:LOOPE 目标地址 LOOPZ 目标地址,例: 编程,在字符串中查找第一个非空字符, 并将其在字符串中序号(1n)送入INDEX单元。 若未找到非空字符,则将全1送入INDEX单元。,分析:逐个字符与空字符(ASCII码为20H)进行比较,用LOOPE 循环指令。循环结束有两种情况:计数为0或找到非空字符,再进一步分析。,功能:循环计数(CX减1)后,判断循环是否结束: 若(CX)=0 且 ZF=1,则继续循环,否则顺 序执行。,MOV CX, COUNT MOV BX, -1 NEXT: INC BX CMP

14、STRINGBX, 20H LOOPE NEXT JNE OK MOV BL, 0FEH ;未找到 OK: INC BX MOV INDEX, BL ; 存结果,程序段:,数据段中数据定义如下:,STRING DB CHECK STRING COUNT EQU $-STRING INDEX DB ? ;存结果,(3)LOOPNE/LOOPNZ指令,格式:LOOPNE 目标地址 LOOPNZ 目标地址,例:设数据段中有一个以ARRAY为首地址的字节数组。 现要求编制一程序,对数组中每一数据除以0FH,用它的余数构造一个新数组YUSHU。当ARRAY数组中数据处理完毕,或某次相除时余数为0,便停止

15、构造新数组。程序最后将新数组的数据个数存放在LEN单元中。,功能:循环计数(CX减1)后,判断循环是否结束: 若(CX)=0 且 ZF=0,则继续循环,否则顺 序执行。,分析:对数组元素依次作除法,判断余数是否为0。用循环指令LOOPNZ控制循环,结束循环后,再进一步分析。,MOV CX, NUM XOR BX, BX MOV DL, 0FH NO_ZERO:MOV AL,ARRAYBX XOR AH, AH DIV DL ;除0FH MOV YUSHUBX, AH INC BX CMP AH, 0 ;余数为0吗? LOOPNE NO_ZERO JNE END0 ;有余数为0? DEC BL

16、;有余数为0 END0: MOV LEN, BL,数据定义如下:,ARRAY DB 12H, NUM EQU $-ARRAY YUSHU DB NUM DUP(0) LEN DB ?,程序段:,2、循环程序结构,(4)JCXZ指令,格式: JCXZ 目标地址,测试寄存器CX的内容,3、循环控制方法,(1)计数控制循环,例:编程,统计数组中相邻两数之间的符号变化的次数。,MOV CX, COUNT-1 XOR BL, BL EXCHANG : MOV AL, SI XOR AL, SI+1 TEST AX, 80H JE NEXT INC BL NEXT: INC SI LOOP EXCHANG

17、,程序段:,(2)条件控制循环,每循环一次,测试并判断循环终止条件是否成立。,例:编程,产生给定数以内的裴波纳契数列,并把数列的个数存入LEN单元中。,分析:循环次数事先未知,只能用条件控制循环。 循环终止条件:当新产生的数据大于给定数,则结束循环。,程序段:,LEA DI, FIBOINA XOR CL, CL MOV AX, 0 MOV BX, 1 LOP : MOV DI, AX XCHG AX, BX ADD AX, BX ADD DI, TYPE FIBONA INC CL CMP AX, NUM ;测试 JA END0 ;大于,结束 JMP LOP ;小于,继续 END0: MOV

18、 LEN, CL,5.6.5 子程序设计,子程序用过程定义伪指令定义。,1、调用与返回,返回指令格式: RET,调用指令格式: CALL 子程序名/过程名,带参数的返回指令格式:RET n,(1)段内调用与段内返回,执行操作: 保留段点的偏移地址(当前IP值), IP子程序入口地址的偏移地址。,段内直接调用:,入口地址直接由子程序名提供,段内间接调用:,入口地址由寄存器/存储单元提供,段内返回:,IP(SP),SP(SP)+2 ,SP(SP)+n,;N为偶数,(2)段间调用与段间返回,执行操作:保留段点的地址(当前CS/IP值), CS 子程序入口地址段基值; IP 子程序入口地址的偏移地址。

19、,段间直接调用:,入口地址直接由子程序名提供,段间间接调用:,入口地址由双字单元提供,段间返回:,IP(SP),SP(SP)+2; CS(SP),SP(SP)+2; SP(SP)+n,2、子程序设计方法,(1)适当地划分并确定子程序功能,(2)选择适当的参数传递方法,(3)信息的保存,(4)编写子程序的文字说明,3、子程序设计举例,(1)使用寄存器传递参量,例:编程,对数据段中一组字数据用减奇数法求平方根,结果(平方根)依次存入PFG的字节数组中。,分析: 把求平方根的运算作为一个子程序;,入口参量(AX):被开方数;出口参量(CL):平方根。,减奇数法开平方的算法:被开方数S逐个减去1开始的

20、连续自然数的奇数1,3,5,直到相减结果等于0,或不够减下一个奇数为止。够减的次数就是S的近似平方根。,主程序段:,LOP:MOV AX, SI ;寄存器传递入口参数 PUSH CX ;保存信息 CALL SQR_PROC MOV DI, CL ;存结果 POP CX ;恢复信息 ,子程序段:,SQR_PROC PROC XOR CL, CL MOV DX, 1 SQR:SUB AX, DX ;减奇数 JB EXIT ;够减? INC CL ;够减,计数 ADD DX, 2 ;形成下一奇数 JMP SQR ;继续循环 EXIT:RET SQR_PROCENDP,(2)使用存储单元传递参量,对上

21、一例,入口参量(被开方数KFS)和出口参量(平方根SQRT)用存储单元传递,程序修改如下:,主程序段:,LOP:MOV AX, SI MOV KFS, AX CALL SQR_PROC MOV AL, SQRT MOV DI, AL ,子程序段:,SQR_PROC PROC MOV AX, KFS MOV SQRT, 0 MOV DX, 1 SQR:SUB AX, DX JB EXIT INC SQRT SQR_PROCENDP,(3)使用地址表传递参量,参量较多时,先把参量所在的地址组成一个地址表,将地址表的首地址传递给子程序。,例:编程,将两个8位和16位的二进制数分别转换 为相应二进制数

22、的ASCII码。,分析:主程序提供待转换数据、数据位数和转换后存放ASCII码的首址等3个参数的地址,并组成组成一个地址表,传递地址表首地址给子程序。,设数据定义如下: BIN8 DB 35H BIN16 DW 0AB48H NUM DB 8, 16 ASCBUF DB 20H DUP(0) ADR_TABDW 3 DUP(0),主程序段:, MOV ADR_TAB, OFFSET BIN8 MOV ADR_TAB+2, OFFSET NUM MOV ADR_TAB+4, OFFSET ASCBUF MOV BX, OFFSET ADR_TAB ;通过BX传递地址表首址 CALL ;子程序调用

23、 ,子程序段:, MOV DI, BX ;取二进制数地址 MOV DH, DI ; 取二进制数 MOV DI, BX+2 ;转换位数的地址 MOV CL, DI ; 转换位数 MOV DI, BX+4 ;ASCII码首地址 ,(4)使用堆栈传递参量,将前一例该为用堆栈传递参量。,主程序段:, MOV AH, BIN8 XOR AL, AL PUSH AX LEA AX, ASCBUF PUSH AX MOV AX, 8 PUSH AX CALL BINASC ,子程序段:, PUSH BP MOV BP, SP MOV DX, BP+14 MOV DI, BP+12 MOV CX, BP+10

24、 ,5.6.6 系统功能子程序调用,两组功能子程序,通过软中断指令INT实现功能调用。, 送入口参数给指定寄存器, AH=功能号, INT n,功能调用步骤如下:,n为中断类型码,值为000FFH,软中断指令格式如下:,INT n,5.6.7 汇编语言程序的开发,1、编辑建立源程序,编辑程序:EDIT等;,源文件扩展名为 .asm,且不能省略。,按逻辑段来组织源程序;,以END语句结束源程序;,源文件扩展名为 .asm,且不能省略。,2、汇编生成目标程序,主要功能,生成文件,目标文件(.OBJ),列表文件(.LST),交叉引用文件(.CRF),汇编程序:MASM,格式: MASM *.ASM,

25、3、连接生成可执行程序,连接程序:LINK,格式: LINK *.OBJ,若需连接多个OBJ文件,则用“+”连接。,生成的主要文件,可执行文件(.EXE),内存映像文件(.MAP),4、调试与运行,调试程序:DEBUG,(1)DEBUG的进入与退出,D: DEBUG ,- N TEST.EXE ,进入DEBUG, 出现提示符-,装载文件:,- L ,D: DEBUG TEST.EXE,进入DEBUG时,同时装载文件:,退出DEBUG并返回操作系统:,格式:- Q ,(2)显示命令,D 命令显示内存单元内容,例:- D DS:100 - D 100 - D DS:100 10F ,格式:D 地址

26、 或 D 范围,R 命令显示寄存器内容,格式:- R ,显示所有寄存器内容、标志位情况及下一条指令。,AX102A BX0000 CX0100 DX0000 SP0040 BP0000 SI0000 DI0000 DS1528 ES1428 SS1723 CS1822 IP0003 NV UP DI PL NZ NA PO NC 1822:0003 8ED8 MOV DS,AX,U 命令显示汇编源程序命令(反汇编),例:- U CS:0 反汇编32个字节 - U CS:0 10 偏移量0-10H的单元 - U CS:0 L 10 前10H个字节的代码,格式:U 地址 或 U 范围,(3)修改命令,E 命令修改内存单元内容,例:- E DS:0 ,格式:E 地址 内容表,1200:100 20 31 ;将20H修改为31H,R命令修改寄存器内容,例:- R AX AX 0000 ;显示AX原有内容 :1111 ;修改AX内容,格式:R ,A命令汇编命令,格式:A 地址,例:- A CS:100 1723:0100 MOV AX ,29 1723:0103 MOV BX ,85 1723:0106 ADD AX,BX 1723:0108 ,(4)程序运行命令,G命令连续运行方式,格式:- G =地址 ,地址 ,地址,T命令跟踪运行方式,格式: - T =地址 值,

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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