第四章汇编语言.ppt

上传人:s****8 文档编号:67137809 上传时间:2022-12-23 格式:PPT 页数:43 大小:171.50KB
返回 下载 相关 举报
第四章汇编语言.ppt_第1页
第1页 / 共43页
第四章汇编语言.ppt_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《第四章汇编语言.ppt》由会员分享,可在线阅读,更多相关《第四章汇编语言.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、3.3 汇编语言程序设计基础汇编语言程序设计基础3.3.1 概述1、程序设计的步骤、程序设计的步骤1)分析课题2)确定算法3)画流程图4)编写程序要求:简单明了、层次清晰、运算迅速、少占内存。5)上机调试、修改2、程序的基本结构、程序的基本结构顺序顺序(简单简单)结构结构分支程序结构分支程序结构循环程序结构循环程序结构子程序结构子程序结构3.3.2顺序结构程序顺序结构程序按语句执行的顺序编写按语句执行的顺序编写例例1:内存中自内存中自TABLESQ开始的开始的16个单元个单元连续存放着自然数连续存放着自然数0到到15的平方值,任给的平方值,任给一数一数X(0 X 15)在)在XX单元中,查表单

2、元中,查表求出求出X的平方值,将结果存入的平方值,将结果存入YY单元中。单元中。表地址表地址=表基地址表基地址+偏移量偏移量程序如下:程序如下:DATA SEGMENT TABLESQ DB 0,1,4,9,16,25 DB 36,49,64,81,100 DB 121,144,169,225 XX DB?YY DB?DATA ENDSSTACK SEGMENT STACK STACKSTAK DB 10 DUP(?)TOP EQU LENGTH STAKSTACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FAR B

3、EGIN:PUSH DS MOV AX,0 PUSH AX MOV AX,SEG DATA;MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLESQ;LEA BX,TABLESQ MOV AH,0 MOV AL,XX ADD BX,AX MOV AL,BXMOV YY,AL RETSTART ENDPCODE ENDS END BEGIN注意:注意:MAIN PROC FAR PUSH DS MOV AX,0 ;或或SUB AX,AX PUSH AX .RET MAIN ENDP等于等于:MOV AX,4C00H;或;或MOV AH,4CH INT 21H或等于:

4、或等于:INT 20H3.3.3 分支结构程序分支结构程序大部分程序要求计算机根据判断作出不大部分程序要求计算机根据判断作出不同的处理同的处理,这要用分支结构程序。这要用分支结构程序。1、分支程序的二要素、分支程序的二要素1)判断)判断经过运算,结果影响状态标志经过运算,结果影响状态标志CF、PF、ZF、SF、OF等,以此作为判断的依据。等,以此作为判断的依据。2)转移(形成分支)转移(形成分支)1)无条件转移)无条件转移2)条件转移)条件转移 按单标志位判断,如:按单标志位判断,如:JAE、JC、JZ、JO、JP、JS按多标志位判断,如:按多标志位判断,如:JGE、JG、JA结构框图:结构框

5、图:1)二选一)二选一 2)多路分支:逐次比较和判断后完成,)多路分支:逐次比较和判断后完成,N次判断可形成次判断可形成N+1路分支路分支 条件程序段1程序段2满足不满足2、利用比较转移指令实现分支、利用比较转移指令实现分支常用指令:常用指令:CMP、CMPS、SCAS等。等。例:符号函数例:符号函数 1 当当X0Y=0 当当X=0 (-128 X 127)-1 当当X0程序程序:DSEG SEGMENTXX DB 0F0HYY DB?DSEG ENDS MOV AL,XX CMP AL,0 ;不能不用不能不用 JGE BIGR MOV AL,0FFH JMP EQULBIGR:JE EQUL

6、 MOV AL,1EQUL:MOV YY,AL HLT注意注意:形成条件的值的选择形成条件的值的选择.开始结束初始化取数ALAL0?-1 ALAL=0?1 AL送存NYNY3、利用跳转表实现分支、利用跳转表实现分支根据不同条件转移到多个程序分支去。根据不同条件转移到多个程序分支去。例:某工厂有例:某工厂有8种产品的加工程序种产品的加工程序R0到到R7分别存放在以分别存放在以SBR0,SBR1,SBR7为首为首地址的内存区域中地址的内存区域中,这这8个首地址的偏移量个首地址的偏移量连续存放在以连续存放在以BASE为首地址的跳转表内为首地址的跳转表内,如图如图4-3所示。所示。1)跳跃表的建立)跳

7、跃表的建立 在一个连续区,存放一系列跳跃地址,在一个连续区,存放一系列跳跃地址,跳跃指令或关键字。跳跃指令或关键字。本例:从首地址本例:从首地址BASE开始放开始放8个不同程序个不同程序的入口地址。的入口地址。data segmentbase dw sbr0,sbr1,sbr2,sbr3,sbr4,sbr5 dw sbr6bn db?data ends2)跳转表的使用计算表地址:表地址=表基地址+偏移量本例:表地址=base+n*type base可用多种方法实现:1)用变址寻址方式 每次SI+type BASE 2)用间址寻址方式 BX或3)用基址变址寻址方式每次 BX+(SI+type B

8、ASE)主要程序:mov al,bn mov ah,0 add al,al mov bx,offset base add bx,ax mov ax,bx jmp ax done:sbr0:sbr1:3.)根据跳转表内指令分支)根据跳转表内指令分支例例2:在跳转表内存放一系列的跳转指令:在跳转表内存放一系列的跳转指令JMP(3字节指令字节指令)。如图。如图4-4所示,所示,12个命令键个命令键的编号分别为的编号分别为011。设命令键的编号已。设命令键的编号已送入送入AL。程序:程序:mov bx,data mov ds,bx ;al已放已放数数 mov ah,0 mov bl,al ;保存保存A

9、L add al,al add al,bl mov bx,offset base0 add bx,ax jmp bx 3.3.4 循环程序设计循环程序设计1、概述、概述重复执行某一段程序的结构。由五部分组成:重复执行某一段程序的结构。由五部分组成:可先执行后判断,如图可先执行后判断,如图3-16也可先做控制部分再做处理部分,如图也可先做控制部分再做处理部分,如图3-17,3-18设计要点:设计要点:(1)循环体及头部的确定;)循环体及头部的确定;(2)循环控制:计数循环(次数已知)循环控制:计数循环(次数已知)条件控制(次数未知或不确条件控制(次数未知或不确 定,设置循环结束标志)定,设置循环

10、结束标志)五部分内容举例:五部分内容举例:AX=0,BX=地址初值CX=次数AX=AX+BXBX+2,CX-1为0结束送结果到YY开始初始化部分循环工作部分循环修改部分循环控制部分结束处理部分结束完未完(1)为程序操作、地址指针、循环计数、结束条件等设置初值(2)主体,基本操作、重复执行的内容;(3)修改变量地址(4)计数器,判断循环结束条件,决定是继续循环还是终止循环;(5)循环终止后处理部分,分析和存放结果。开始初始化部分循环工作部分循环修改部分循环控制部分结束处理部分结束完未完例1:计算一串字数之和,从TABL单元开始存放,长度在CONT单元,和不大于2个字节,放在YY单元中。DATA

11、SEGMENTTABL DW 1,4,5,7 DW .CONT EQU ($-TABL)/2YY DW?DATA ENDSSTACK SEGMENT PARA STACKSTACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGTN:MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABL MOV CX,CONT XOR AX,AXLOP:ADD AX,BX INC BX INC BX DEC CX ;或LOOP LOP JNZ LOP MOV YY,AX MOV AX,4C0

12、0H INT 21HCODE ENDS END BEGIN 例例2:编一个程序编一个程序,把把DAT1单元开始的单元开始的50个有符号字个有符号字节数中的负数传送到节数中的负数传送到DAT2单元开始的存储区单元开始的存储区,并统并统计负数的个数计负数的个数,存入存入RS单元中单元中.程序如下程序如下:DATA SEGMENTDAT1 DB -1,-2,COUNT EQU$-DAT1DAT2 DB 50 DUP(?)RS DB?DATA ENDS .LEA BX,DAT1 LEA SI,DAT2 MOV CX,COUNT MOV DL,0LOOP1:MOV AL,BX CMP AL,0 JNS

13、NEXT MOV SI,AL INC SI INC DL NEXT:INC BX LOOP LOOP1DONE:MOV RS,DL例例3:统计:统计AX中的二进制数的中的二进制数的“1”的个数,结的个数,结果存放在果存放在CX中。中。先判断,后执行。先判断,后执行。MOV CX,0LOP:AND AX,AX JZ STP SAL AX,1 JNC LOP INC CX JMP LOPSTP:HLT二重循环结构二重循环结构例:延时例:延时100ms。(。(软件延时程序)软件延时程序)用子程序用子程序SOFTDLY PROC MOV BL,10DELAY:MOV CX,2801WAIT:LOOP

14、WAIT DEC BL JNZ DELAY RET SOFTDLY ENDP注意:注意:1)循环体头部的确定。)循环体头部的确定。2)从内循环可直接跳到外循环,但不能)从内循环可直接跳到外循环,但不能从外循环直接跳到内循环。从外循环直接跳到内循环。3.3.5 子程序结构1.概述1)子程序结构)子程序结构多次使用,且有通用性的程序段(程序段的功能和结构形式相同,但变量的赋值不同)可编成子程序。如:键盘读写,磁盘读写,标准函数程序等。实用中,把常用的子程序标准化后存放在一个内存区中,称为子程序库,供用户调用。(1)结构第一语句前必须有变量名(入口地址),出口是返回指令RET。(2)调用与返回调用:

15、主程序用CALL 入口地址。类型:NEAR 调用程序和过程在同一代码段FAR 调用程序和过程不在同一代码段RET的类型与CALL相匹配。NEAR:出栈恢复IPFAR:出栈恢复IP和CS注意:堆栈的正确使用。(3)子程序定义过程名 PROC 类型 :(RET)过程名 ENDP过程名入口标号类型指明是段内还是段间调用。有FAR和NEAR(缺省值)2)子程序应用中应注意的问题(1)主程序与子程序的连接主程序与子程序的连接例:实验中,调用程序和过程在同一代码段,用NEAR。使用了过程嵌套。主程序定义为FAR,把主过程看作DOS调用的子过程。例:CODE SEGMENT ASSUME .STRT PRO

16、C FAR .MOV AL,DATX PUSH BX CALL DTOB MOV DATY,CL POP BX RETDTOB PROC NEAR RETDTOB ENDPSTRT ENDP ;或放在前一个RET后CODE ENDS END STRT例:调用程序和过程不在同一代码段SEGX SEGMENT SUBT PROC FAR RET SUBT ENDP CALL SUBT ;可以 .SEGX ENDSSEGY SEGMENT CALL SUBT .SEGY ENDS(2)保存与恢复寄存器及工作单元保存过程中用到的寄存器和存储单元的内容。一、方法A、进栈保护与恢复:PUSH和POP,注意

17、先进后出的次序。B、存入一些空闲单元或暂不用的寄存器中。二、实现A、在子程序中,较好。尤其是中断服务子程序,是随机出现的,主程序中无法预先安排。B、在主程序中,预先安排的。例:实验中DOS调用前保存DX。注意:用于参数传送的寄存器不一定要保存,特别是向主程序回送结果的寄存器。或结果处理后再恢复。如硬件实验一。(3)子程序的参数传递(或过程通信)子程序的参数传递(或过程通信)入口参数:使子程序可对不同的数进行处理出口参数:可送出不同的结果方法:1、通过寄存器传送参数2、通过存储单元传送参数3、通过地址表传送参数地址4、通过堆栈传送参数或参数地址5、多个模块之间的参数传送通过寄存器传送参数适用参数

18、较少情况。例:通过堆栈传送参数或参数地址适用参数多且子程序有嵌套、递归调用情况。主程序将参数压栈,在子程序从堆栈中弹出参数。例:编过程分别实现两数组的累加。DATA SEGMENT ARY 1 DB 100DUP(?)SUM1 DW?ARY 2 DB 200DUP(?)SUM2 DW?DATA ENDS;加堆栈段定义STACK SEGMENT SPAE DB 20DUP(?)TOP EQU LENGTH SPAE;top label wordSTACK ENDS主程序:.START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV SP,OFFS

19、ET TOP MOV AX,SIZE ARY1 PUSH AX MOV AX,OFFSET ARY1 PUSH AX CALL FAR PTR SUM .过程程序:(设在另一段)PROCE SEGMENT ASSUME CS:PROCESUM PROC FAR PUSH AX PUSH BX PUSH CX PUSH BP MOV BP,SP PUSHF MOV CX,BP+14 MOV BX,BX+12 XOR AX,AXNEXT:ADD AL,BX INC BX ADC AH,0 LOOP NEXT MOV BX,AX POPF POP BP POP CX POP BX POP AX RE

20、T 4 ;去掉参数SUM ENDPPROCE ENDS END START ;START是主程序 ;的起始标号讨论:堆栈变化情况。堆栈最满时的状态见图3-19。3)子程序的嵌套和子程序递归)子程序的嵌套和子程序递归(1)子程序的嵌套)子程序的嵌套:一个子程序调用另一个子程序。嵌套深度:嵌套的层次数。受堆栈大小的限制。例:嵌套深度为2时的子程序嵌套。主程序 子程序A 子程序B PROC_A PROC_BCALL PROC_A CALL PROC_B RET RET (2)递归调用递归调用:一个子程序调用自身。适用于函数的计算。注意:1)CALL和RET配对2)保护和恢复寄存器3)堆栈的正确使用。堆栈的溢出:上溢和下溢。在编程时,采用保护措施。给SP规定上、下限,在进、出栈前SP先与边界值比较,若超过,则作溢出处理。

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

当前位置:首页 > 生活休闲 > 生活常识

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

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁