




已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【本章主要内容】,汇编语言基础 汇编语言程序结构框架 汇编语言程序设计方法 汇编程序的开发过程,第4章汇编程序设计基础(自学),4.1 汇编语言基础,第4章汇编程序设计基础,4.1.1 概述,汇编语言是一种面向机器结构的低级程序设计语言,汇编语言程序是将机器指令组成的机器语言程序“符号化”,它同机器语言的目标代码一一对应。 汇编语设计程序设计能充分发挥机器硬件的性能,提高计算机的运行效率,汇编语言比机器语言易于辨认、维护和修改。,第4章汇编程序设计基础,4.1.2 汇编语言语句种类与格式,指令语句 每条指令语句经编译后都要产生一条可执行的目标代码(机器指令),所以这种语句属于可执行语句。,例如: MOV AX , 32H AND BX , 01010111B,第4章汇编程序设计基础,伪指令语句 指示汇编程序如何编译源程序,伪指令不产生目标代码。,例如: ORG 100H,宏指令语句 用户定义的新指令,用于替代源程序中一段有独立功能的程序。,第4章汇编程序设计基础,1. 语句格式,标号:指令助记符 操作数 ; 注释,指令的符号地址,指明该指令的功能,若有多个操作数用“,”隔开,起说明作用的字符串,第4章汇编程序设计基础,标号的命名规则:,字符个数为131个。,第一个字符不能是数字,可以使用字母或点号.、$、?和下划线_;从第二个字符开始,可以是字符、数字和特殊字符。,不能与系统专用的保留字相同,第4章汇编程序设计基础,4.1.3 汇编语言数据和表达式,1. 常量,数值常量 例如: 25D、 80H、101001B、45,字符串常量 例如: 2、 A 、”Computer”,第4章汇编程序设计基础,符号常量 用一个符号来代表常。,1) 等值伪指令EQU,格式:符号 EQU 表达式,例如: S1 EQU ABCD N EQU 12 NUM EQU 23+25+N ADR1 EQU DS:BP+14H,第4章汇编程序设计基础,2) 等号伪指令=,格式:符号 = 表达式,例如: NUM = 10H,伪指令(EQU)和伪指令(=)的区别是:在同一源程序中,同一符号不能用EQU伪指令重新定义,“=”可以。,第4章汇编程序设计基础,2. 变量,变量是指存放在存储单元中的数据,这些数据在程序运行过程中可以改变。,(1) 数据定义伪指令,可选,是分配的存储单元的符号地址,按字节(DB)、字(DW)和双字(DD)分配内存单元,设定变量的初值,第4章汇编程序设计基础,1) 数值表达式 VARB1 DB 10H VARB2 DB 20H,30H,40H VARW DW 1122H,3344H,上述变量的存储单元分配及初始化情况如右图所示。,第4章汇编程序设计基础,2) 字符串表达式 STR1 DB ABCD STR2 DW AB, C,上述变量的存储单元分配及初始化情况如右图所示。,第4章汇编程序设计基础,3) “?” 表达式 STR1 DB ? , ?,4) DUP表达式,在连续的存储单元中重复定义一组数据。,例如: NUM1 DB 20H DUP(5) NUM2 DW 10H DUP(?),第4章汇编程序设计基础,4. 运算符与表达式,(1) 算术运算符 参见下表。,第4章汇编程序设计基础,第4章汇编程序设计基础,(2) 逻辑运算符,第4章汇编程序设计基础,(3) 关系运算符,第4章汇编程序设计基础,(4) 数值返回运算符,1) SEG和OFFSET运算符 SEG:取变量或标号所在段的段基值; OFFSET:取变量名或标号所在段内的偏移量。,例如: MOV AX,SEG VAR1 MOV SI,OFFSET VAR3,第4章汇编程序设计基础,(5) 属性运算符,1) PTR运算符 格式:类型 PTR 地址表达式,第4章汇编程序设计基础,4.2.1源程序的基本结构框架,8086/8088汇编程序采用分段结构,一个完整的源程序可以包含多个逻辑段,但当前段最多只能有4个:数据段、堆栈段、附加段和代码段。,4.2.1 段定义,段名 SEGMENT 定位类型 组合类型 类别名 段名 ENDS,第4章汇编程序设计基础,例如: Data1 Segment DB ? , 10H V1 DB 20H Data1 Ends,第4章汇编程序设计基础,4.2.2 段寻址伪指令(ASSUME),段寻址伪指令用来建立段与段寄存器之间的联系。,格式: ASSUME 段寄存器名:段名,段寄存器名:段名,,例如:,第4章汇编程序设计基础,DATA1 SEGMENT ;定义段DATA1 VAR1 DB 12H DATA1 ENDS ;DATA1段定义结束 DATA2 SEGMENT ;定义段DATA2 VAR2 DB 34H DATA2 ENDS ;DATA2段定义结束 CODE SEGMENT VAR3 DB 56H ASSUME CS:CODE,DS:DATA1,第4章汇编程序设计基础,4.2.3 END伪指令,格式: END 地址表达式,4.2.4 段寄存器的装入,1. DS和ES的装入,在指令中直接引用段名时,得到的是这个段的段基值,这个段基值是16位的立即数。,第4章汇编程序设计基础,例如: CODE SEGMENT ASSUME CS:CODE,DS:DATA1,ES:DATA2 START: MOV AX,DATA1 ;设置DS MOV DS,AX MOV AX,DATA2 ;设置ES MOV ES,AX ,第4章汇编程序设计基础,2. SS的装入,(1) 自动装入,Stack1 Segment Para Stack Dw 20H dup(?) Stack1 Ends,code Segment Assume code:CS , Stack1:SS ,第4章汇编程序设计基础,(2) 执行程序装入,Stack1 Segment Dw 20H dup(?) Stack1 Ends,code Segment Assume code:CS , Stack1:SS Mov AX , Stack1 Mov SS , AX ,第4章汇编程序设计基础,2. CS的装入,CS和IP控制程序的执行流程。装载目标代码时自动将CS和IP初始化为程序将要执行的第一条指令的段基值和偏移量,它们由END伪指令提供。如果END伪指令没有指定地址表达式,则源程序中第一条指令语句的地址作为程序执行的起始地址。,基本框架,STATCK SEGMENT STACK ;定义堆栈段 STACK ENDS DATA SEGMENT ;定义数据段 DATA ENDS CODE SEGMENT ;定义代码段 ASSUME CS:CODE, DS:DATA, SS:STATCK ;仅告诉汇编程序, 并不能赋值 START: MOV AX, DATA MOV DS, AX MOV AH, 4CH ;程序结束 返回DOS INT 21H CODE ENDS END START,(X+125-X*Y)/Z,STATCK SEGMENT STACK DW 100H DUP(?) STACK ENDS DAT SEGMENT X DW 3 Y DW 4 Z DW 10 DAT ENDS COD SEGMENT ASSUME CS:COD, DS:DAT, SS:STACK START: MOV AX, DAT MOV DS, AX MOV AX, X IMUL Y MOV CX, AX MOV BX, DX MOV AX, X ADD AX,125 CWD,SUB AX, CX SBB DX, BX IDIV Z MOV X, AX MOV Y, DX MOV AH, 4CH INT 21H COD ENDS END START,第4章汇编程序设计基础,1、 返回DOS系统的方式,Mov AH , 4CH Int 21H,2、 从键盘接收一串字符,MOV AH, 0AH INT 21H ;DS:DX :缓冲区可接收的字符 缓冲区,4.3 系统功能调用,第4章汇编程序设计基础,3、 显示一个字符,MOV DL, 41H ; A的ASCII MOV AH , 2 INT 21H,4、 从键盘接收一串字符,MOV AH, 0AH INT 21H ;DS:DX :缓冲区可接收的字符 缓冲区,第4章汇编程序设计基础,4.3 其它伪指令,4.3.1 过程定义伪指令,格式: 过程名 PROC NEAR/FAR Ret 过程名 ENDP,第4章汇编程序设计基础,4.3.2 ORG伪指令,格式: ORG 数值表达式 将表达式的值赋给当前位置计数器,符号“$”就代表当前位置计数器。 例:,第4章汇编程序设计基础,DATA SEGMENT ;定义段DATA ORG 30H VAB1 DB 12H,34H ORG $+20H STR DB STRING DATA ENDS,第4章汇编程序设计基础,4.4 汇编程序设计方法 4.4.1 概述,1. 程序设计步骤,(1) 分析问题,确定算法,(2) 绘制程序流程图,(3) 编写程序,(4) 调试程序,第4章汇编程序设计基础,4.4.2 顺序程序的设计,例 4-1 试编制程序,计算: Z = (3X+Y-5)/2 其中 X = 15H Y = 10H,DATA Segment ;数据段 X DW 15H Y DW 10H Z DW ? DATA Ends,第4章汇编程序设计基础,CODE Segment ;代码段 Assume CS:CODE , DS:DATA Start: Mov AX, DATA Mov DS, AX ;初始化DS Mov AX , X Shl AX , 1 ;AX2X Add AX, X ;AX3X,第4章汇编程序设计基础,Add AX, Y ;AX3X+Y Sub AX, 5 ;AX3X+Y-5 Sar AX, 1 ;AX(3X+Y-5)/2 Mov Z, AX ;存放结果 Mov AH, 4CH Int 21H ;返回DOS CODE Ends End Start,第4章汇编程序设计基础,4.4.3 分支程序设计,在汇编语言中分支程序主要是通过转移指令来实现。,1. 转移指令,(1) 无条件转移指令,功能:无条件转移到“目标地址”处执行。,指令格式: JMP 目标地址,例如: jmp Label1 jmp BX,第4章汇编程序设计基础,(2) 条件转移指令,功能:条件成立时转移到“目标地址”处执行。,指令格式: JXX 目标地址,XX为1-3个字母表示的转移条件,说明:条件转移指令只能在段内转移,转移范围只能在-128127之间。,条件: S SF(符号标志) C CF(进位标志),第4章汇编程序设计基础,Z ZF(零标志) N NOT A Above L Less E Equal G - Great,例如: JZ Lab1 JNZ Lab2,第4章汇编程序设计基础,2.分支程序的设计,条件,Y,N,条件,图4.4-3 分支程序结构形式,第4章汇编程序设计基础,1条件转移指令实现分支程序,例2 编制程序,把DA1字节单元中数据变成偶数。,TEST DA1, 01H JZ NEXT ;是偶数,转移 INC DA1 ;是奇数,加1 NEXT: ,第4章汇编程序设计基础,例3 设X、Y为带符号的字节变量,编程实现下面的公式。,CMP X, 0 ;比较X与0进行比较 JGE BIGER ;X0,转移到BIGER MOV Y, -1 ;X0,Y置-1 JMP NEXT,第4章汇编程序设计基础,BIGER: JZ EQUL ;X=0,转移EQUL MOV Y, 1 ;X0,Y置1 JMP NEXT EQUL: MOV Y, 0 ;Y置0 NEXT: ,第4章汇编程序设计基础,2用跳转表实现多路分支 对于多分支结构通常采用跳转表来实现。,例4 现有若干个程序段,每个程序段的入口地址分别是Sub1、Sub2、Subn,试编制一程序,根据指定的参数转入相应的程序段。,DATA SEGMENT ;定义数据段 JUMP_TABLE DW SUB1, SUB2, SUB3 DW SUB4, SUB5 PARAM DB 3 DATA ENDS ;数据段结束,第4章汇编程序设计基础,STACK1 SEGMENT STACK ;定义堆栈段 DW 20H DUP(0) STACK1 ENDS ;堆栈段结束,CODE SEGMENT ;定义代码段 ASSUME CS:CODE, DS:DATA, SS:STACK1 BEGIN: MOV AX, DATA ;取DATA段的段基值 MOV DS, AX ;初始化段寄存器DS XOR AH, AH ;寄存器AH清0,第4章汇编程序设计基础,MOV AL, PARAM ;参数PARAM送AL DEC AL ;AL(AL)-1 SHL AL, 1 ;AL(AL)*2 LEA BX, JUMP_TABLE ;取跳转表首址 ADD BX, AX JMP BX ;转移到对应分支 SUB1: JMP END0 SUB2: JMP END0,第4章汇编程序设计基础, END0: MOV AH, 4CH ;返回DOS INT 21H CODE ENDS END BEGIN,第4章汇编程序设计基础,4.4.4 循环程序设计,1循环控制指令,(1) LOOP指令 格式:LOOP 目标地址 功能:首先将CX内容减1,若(CX)0,则转至目标地址处执循环,否则顺序执行。例如:,Loop1: Loop Loop1,条件:(CX)0,,否则,第4章汇编程序设计基础,例6 计算1+2+3+100的和。, MOV CX , 100 ;设置循环次数 MOV AX ,0 ;AX保存计算结果 L1: ADD AX , CX LOOP L1 ,第4章汇编程序设计基础,(1) LOOPZ/LOOPE指令 格式: LOOPZ/LOOPE 目标地址 功能:首先将CX内容减1,若(CX)0且ZF=1,则转至目标地址处执循环,否则顺序执行。例如:,Loop1: Loopz Loop1,条件:(CX)0且ZF=1,,否则,第4章汇编程序设计基础,例7 编程实现在字符串中查找第一个非空字符,并将其在字符串中的位置送入INDEX单元。, STR DB “ THIS IS A TEST.” LEN EQU $-STR MOV CX, LEN ;设置循环次数 MOV BX, -1 ;地址指针初值 NEXT: INC BX CMP STRBX, 20H ;判断是否为空字符,第4章汇编程序设计基础,LOOPE NEXT ;空字符且CX0,继续循环 JNE FOUND ;找到非空字符 JMP NONFOUND ; 未找到非空字符 FOUND: JMP END0 NONFOUND: JMP END0,第4章汇编程序设计基础,(3) LOOPNZ/LOOPNE指令 格式: LOOPNZ/LOOPNE 目标地址 功能:首先将CX内容减1,若(CX)0且ZF=0,则转至目标地址处执循环,否则顺序执行。例如:,Loop1: Loopz Loop1,条件:(CX)0且ZF=0,,否则,第4章汇编程序设计基础,2 循环程序结构,第4章汇编程序设计基础,初始化部分,工作部分,修改部分,结束处理部分,循环结束?,图4.4-9 (b)先判断后执行,N,Y,第4章汇编程序设计基础,3单重循环程序设计,(1) 计数控制循环 即用CX的值来控制循环次数,常用于循环次数已知的情况。每循环一次,计数器计数一次,直到计数器达到预定值(CX)= 0,循环结束。,(2) 条件控制循环 循环次数无法事先确定,只能用“条件”来控制循环。每循环一次,便对条件进行检测,若满足终止循环的条件,便结束循环,否则继续循环。,第4章汇编程序设计基础,4多重循环程序设计 多重循环结构是指循环程序的循环体中又包含了另一个循环,即循环的嵌套。,在编制多重循环程序时,首先要分清内外循环的任务和要求,接着划分内外循环中有规律变化的参数,如哪些是内循环的地址指针、计数器,哪些是外循环的地址指针、计数器。然后分别确定内外循环的控制方法和具体实施。 注意:内外循环都要修改CX寄存器的内容。,第4章汇编程序设计基础,4.4.5 子程序设计,在程序设计使用子程序可减少重复编写程序,缩短目标代码,节省内存空间,便于阅读程序。 在汇编语言中子程序是以“过程”的形式出现的。,第4章汇编程序设计基础,1. 过程定义伪指令 格式: 过程名 Proc Near /Far Ret 过程名 Endp 过程定义必在一个逻辑段内。,Code1 Segment p1 Proc p1 Endp P2 Proc Far p2 endp Code Ends,第4章汇编程序设计基础,2. 子程序调用与 调用格式: Call 子程序入口地址 返回格式: Ret n (其中n是偶数),第4章汇编程序设计基础,在编写子程序时,应满足下面的基本要求: 1适度地划分并确定子程序功能 2选择适当的参量传递途径 3信息的保存 4清晰的子程序文本,4子程序与主程序的参数传递和设计举例,第4章汇编程序设计基础,(1) 通过寄存器传递参量,例12 设在数据段中有一数组,数组中元素为字类型。试编制程序,用减奇数法对数组中各个数据逐一开平方,并把结果依次存入字节数组PFG中。,DATA SEGMENT DA1 DW 1234H,5678H,3456H COUNT EQU ($-DA1)/2 PFG DB COUNT DUP(0) DATA ENDS,第4章汇编程序设计基础,DATA SEGMENT DA1 DW 1234H,5678H,3456H COUNT EQU ($-DA1)/2 PFG DB COUNT DUP(0) DATA ENDS,STACK1 SEGMENT PARA STACK DW 20H DUP(0) STACK1 ENDS,第4章汇编程序设计基础,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1 START: MOV AX,DATA MOV DS,AX MOV CX,COUNT ;循环计数器初值 LEA SI,DA1 LEA DI,PFG LOP: MOV AX,SI ;取被开方数,第4章汇编程序设计基础,PUSH CX ; 保存循环计数器 CALL SQR_PROC ; 调用子程序 MOV DI,CL ;存平方根 POP CX ;恢复循环计数器 ADD SI,2 ;修改地址指针 INC DI LOOP LOP MOV AH,4CH INT 21H,第4章汇编程序设计基础,;子程序SQR_PROC :开平方 ; 入口参数: ; (AX) 为被开方数 ; (CL)为开方结果 SQR_PROC PROC ;开平方子程序 MOV CL,0 ;开平方计数器CL0 MOV DX,1 ;奇数1,第4章汇编程序设计基础,SQR: SUB AX,DX ;减奇数 JB EXIT0 ;不够减,转移 INC CL ;够减,计数 ADD DX,2 ;形成下一个奇数 JMP SQR EXIT0: RET ;子程序返回 SQR_PROC ENDP CODE ENDS END START,第4章汇编程序设计基础,(2) 通过堆栈传递参数 将要传递的参数放在寄存器中,主程序和子程序通过对堆栈的访问取得所需的参数。 (3)用存储单元传递参数,4子程序嵌套与递归调用,(1) 子程序嵌套 即一个子程可以调用另外一个子程序。,第4章汇编程序设计基础,2子程序递归调用 一个子程序直接或间接调用自己,叫递归调用。递归调用是子程序嵌套的特例,在某些应用场合它是很有用的程序设计技术。,例14 子程序递归调用示例(计算N!)。,第4章汇编程序设计基础,DATA SEGMENT N DW 6 M DW ? DATA ENDS STK1 SEGMENT STACK DW 40H DUP(0) STK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:STK1 START:,第4章汇编程序设计基础,MOV AX,DATA MOV DS,AX MOV AX,N CALL FACT ;调用子程序 MOV AH,4CH INT 21H ;返回DOS,第4章汇编程序设计基础,FACT PROC CMP AX,1 JNE NEXT ;不等于1 MOV M,1 JMP EXIT0 NEXT: PUSH AX ;压栈 DEC AX CALL FACT ;递归调用 POP AX MUL M,第4章汇编程序设计基础,MOV M,AX EXIT0: RET FACT ENDP CODE ENDS END START,递归调用可以简化算法,且程序简洁,但由于要使用堆栈,因此在存储空间上需要一些开销。,举例,在ADDR单元中存放着16位数Y的地址,统计Y中放1的个数,结果存入COUNT单元中,例:按15行*16列的表格形式显示ASCII码10H FFH的所有字符。每16个字符为1行,每行中的相邻两个字符之间用空格隔开。,MOV AH, 02H MOV DL, 输出字符的ASCII INT 21H,COD SEGMENT ASSUME CS:COD START : MOV DL,10H ;显示的字符 MOV CH,15 NEXT_H: MOV CL,16 ;1行显示的个数 NEXT_L: MOV AH,02 INT 21H PUSH DX MOV DL,20H; 显示空格 INT 21H POP DX INC DL DEC CL JNZ NEXT_L,PUSH DX MOV AH,02 MOV DL, 0DH; 换行 INT 21H MOV DL, 0AH;回车 INT 21H POP DX DEC CH JNZ NEXT_H MOV AH,4CH INT 21H COD ENDS END START,两个6字节数相加,第4章汇编程序设计基础,4.5 汇编语言程序的开发过程,汇编语言程序的开发过程须经过:汇编连接、最后可执行程序。,下面介绍宏汇编MASM软件的使用,假定在C:MASM目录下,存放了宏汇编程序MASM和源程序EXAMPLE.ASM。,第4章汇编程序设计基础,一MASM的操作 在C:MASM提示状态下,运行MASM,即键入命令: C:MASMMASM Source filename .ASM:EXAMPLE Object filename EXAMPLE.OBJ: Sourcelisting NUL.LST: Cross-re
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电影剧本创作聘用合同模板
- 2025房产不动产抵押合同范本:商业地产项目抵押融资
- 请假条写作课件
- 红酒杯知识培训总结课件
- 2025标准机械设备采购合同书样本
- 语言基础知识培训简报课件
- 2025农业作物种子买卖服务合同
- 2025制片合同范本模板
- 2025出国留学合同
- 在线支付服务接入合作协议
- 2024年中国防锈油行业调查报告
- 办公软件培训课件
- 成人氧气吸入疗法-中华护理学会团体标准
- 2025年职业指导师(中级)考试试卷:职业指导师考试备考策略
- 2025年度辅警招聘考试题(含答案)
- 初三心理健康教育开学第一课
- 初一新生入学教育
- 卫生院健康检查管理制度
- 高二秋季开学第一课班会课件:启航高二把握未来
- 山地绿化工程的安全防范措施
- 云南贵金属新材料控股集团笔试
评论
0/150
提交评论