《汇编语言教程》PPT课件.ppt_第1页
《汇编语言教程》PPT课件.ppt_第2页
《汇编语言教程》PPT课件.ppt_第3页
《汇编语言教程》PPT课件.ppt_第4页
《汇编语言教程》PPT课件.ppt_第5页
已阅读5页,还剩38页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

汇编语言,第 5 章,5.1 8086汇编语言基础 5.1.1 汇编语言基本语法 5.1.2 汇编语言语句 5.1.3 伪指令语句 5.1.4 宏指令语句,5.2 汇编语言程序设计 5.2.1 顺序程序设计 5.2.2 分支程序设计 5.2.3 循环程序设计 5.2.4 子程序设计 5.2.5 DOS功能调用,汇编语言的处理过程: (1)编写汇编语言源程序,生成扩展名为ASM的汇编源源文件。 (2)对汇编源程序进行编译。 (3)对目标文件进行连接 。,教学进程,5.1,8086汇编语言基础,1)效率低(与人们描述计算过程的需要差距大); 2)机器硬件的具体结构联系过于紧密在一种结构的机器上开发 的程序极难移植到另一种不同结构的机器上去。,教学进程,5.1,8086汇编语言基础,汇编语言进行程序设计的优点,1)充分利用机器的硬件功能和结构特点,加快程序的执行速度, 减少目标程序所占用的存储空间; 2)用来编写实时控制程序、实时通信程序,有时也用来编制某些 系统软件程序。,汇编语言进行程序设计缺点,教学进程,宏指令语句是由编程者按照一定的规则来定义的一种较“宏大”的指令,可包括多条指令或伪指令。,汇编语言基本语法,在8086汇编中使用的语句可以分成3种类型,这类指令能够产生目标代码,是CPU可以执行的能够完成特定功能的语句,主要由机器指令组成。在汇编时一条指令语句被翻译成对应的机器码,对应着特定的操作。,伪指令语句是为汇编程序和连接程序提供一些必要控制的管理性语句,它不产生目标代码,仅仅在汇编过程中告诉汇编程序应如何汇编,并完成相应的伪操作。,5.1.1,教学进程,汇编语言源程序中的语句可以由四项组成,格式如下: 名字 操作符 操作数 ;注释,汇编语言语句,5.1.2,(2)操作符可以是指令、伪指令或宏指令的助记符。 (3)操作数字段是操作符的操作对象。 (4)注释字段是以“;”开头的说明部分,可以用英文或者中文书写。,(1)名字项是程序设计人员自己定义的符号, 用于代表内存单元的 地址,表示本条语句的符号地址。一般来说,名字可以是标号和 变量,统称为标识符。,1.汇编语言格式,5.1.2 汇编语言语句,教学进程,1.汇编语言格式,标号:标号在代码段中定义,后面跟着冒号标号。 变量:变量在数据段或附加数据段中定义,后面不跟冒号。,标识符,算术操作符有+、-、*、/ 和 MOD以及SHL(左移)、SHR(右移)。其中MOD运算是取模运算,即除法之后所得的余数。,5.1.2 汇编语言语句,2.,教学进程,算术操作符,逻辑操作符包括AND、OR、XOR、NOT,逻辑操作符是按位操作的,只能用于数字表达式。,5.1.2 汇编语言语句,教学进程, 3.,逻辑操作符, 求变量或标号类型值 格式:TYPE 变量或标号 功能:若为变量,则程序将回送该变量以字节数表示的类型: DB为1,DW为2,DD为4,DQ为8,DT为10。 若为标号,则程序将回送代表该标号类型的数值: NEAR 为-1,FRA为-2。,5.1.2 汇编语言语句,教学进程, 4.,数值回送操作符, 格式:OFFSET变量或标号 功能:返回变量或标号所在段的段内偏移地,5.1.2 汇编语言语句,取段基地址 格式:SEG 变量或标号 功能:返回变量或标号所在段的段地址,教学进程,4.数值回送操作符,取地址的偏移量, 格式:LENGTH 变量 功能:如果变量是用DUP说明,则返回DUP定义变量的重 复次数,否则,返回值为1。, 取变量字节数 格式:SIZE BIANL1 功能:返回变量的字节数,等于LENGTH与TYPE的乘积。,教学进程,5.1.2 汇编语言语句,4.数值回送操作符,取变量单元数,5.1.2,汇编语言语句, PTR操作符 格式:类型 PTR 符号名 功能:该操作符用于指定操作数的类型。,属性操作符,教学进程,5., THIS操作符 格式:THIS 类型 功能:把它后面指定的类型或距离属性赋给当前的变量、标号或定 制表达式。, 段操作符 格式:段寄存器名:地址表达式 功能:用来表示变量或地址表达式的段属性。, 格式:SHORT 标号 功能:用来修饰转移指令的目标地址的属性,偏移量为8位。 分类运算符 格式:HIGH 表达式 LOW 表达式 功能:从表达式种分离出高字节、低字节。,运算符: EQ(相等)、NE(不等于)、LT(小于)、GT(大于)、 LE(小于或等于)、GE(大于或等于),当关系成立时, 运算结果为1(FFH或FFFFH),否则为0。 格式:表达式1 关系运算符 表达式2,SHORT操作符,教学进程,5.1.2 汇编语言语句,属性操作符,5.,5.1.2,汇编语言语句,运算的优先级别,教学进程,7., EQU 等价伪指令 格式:符号名 EQU 表达式 功能:用来定义一个符号,用该符号代表机器指令助记符、伪 指令助记符、寄存器名字、各种运算符号、常数等。,伪指令语句,1. 符号定义伪指令,教学进程,5.1.3, 等号伪指令 格式:符号名表达式 功能:等号伪指令用来定义一个符号,用该符号代表表达式、 常数等。,5.1.3,教学进程,伪指令语句(续),1. 符号定义伪指令, 解除符号定义伪指令 格式:PURGE 符号1,符号2, 功能:用来解除之前引用符号的定义。,数据定义伪指令有五种:DB、DW、DD、DQ、DT和DUP。 格式: 变量名 DB 表达式;定义字节 变量名 DW 表达式;定义字 变量名 DD 表达式;定义双字 变量名 DQ 表达式;定义8个字节 变量名 DT 表达式;定义10个字节 复制次数 DUP 表达式 功能:其中,DT伪操作指令用来定义10个字节,其后的每个操作数占有10个字节,形成压缩的BCD码;DUP指令可以为若干重复数据分配内存单元。,5.1.3 伪指令语句,数据定义伪指令,教学进程,2.,格式:,5.1.3 伪指令语句,段定义伪指令,教学进程,3.,例: * * * * * * * * * * * * * * * * * * * * * * * data_seg1 segment ;定义数据段 data_seg1 ends * * * * * * * * * * * * * * * * * * * * * * * code_seg segment ;定义代码段 assume ds:data_seg1, es:data_seg1 assume cs:code_seg start: ;程序执行的起始地址 mov ax, data_seg1 ;数据段地址 mov ds, ax ;存入DS寄存器 mov ax, data_seg1 ;附加段地址 mov es, ax ;存入ES寄存器 code_seg ends ;代码段结束 * * * * * * * * * * * * * * * * * * * * * * * * * * end start,5.1.3 伪指令语句,教学进程,段定义伪指令举例,格式: 功能:完成过程定义,在过程体 中实现过程的操作功能。,5.1.3 伪指令语句,过程定义伪指令,教学进程,4.,条件汇编有多种伪操作指令: (1)IF 表达式 功能:表达式为1,汇编程序段1,否则跳过。 (2)IFE 表达式 功能:表达式为0,汇编程序段1,否则跳过。 (3)IFB 参数 功能:参数为空格,汇编程序段1,否则跳过。,5.1.3 伪指令语句,格式:IF 表达式 程序段1 ELSE 程序段2 ENDIF,5.,教学进程,条件汇编伪指令,(4)IFNB 参数 功能:参数不为空格,汇编程序段1,否则跳过。 (5)IFIDN 参数1,参数2 功能:字符串参数1与字符串参数2相同,汇编程序1,否则跳过。,5.1.3 伪指令语句,教学进程,条件汇编有多种伪操作指令(续),5.,条件汇编伪指令,格式:宏指令名 MACRO 形式参数1,形式参数2, ENDM 其中,MACRO和ENDM是一对伪操作。,宏指令语句,1.宏指令的定义,教学进程,5.1.4,5.1.4,宏指令语句, MIN CL,SI,DI ;把由SI和DI间接寻址的两个内存单元中 ;不带符号数中小的送入CL 汇编后展开: PUSH AX MOV AL,SI ;实参SI替换形参SR1 CMP AL,DI ;实参DI替换形参SR2 JNB ?00 ;符合地址ADDR被?00替换 MOV AL,DI ?00: MOV CL,AL ;实参CL替换形参DES POP AX 号代表宏展开的语句。,教学进程,宏调用举例,5.1.4,宏指令语句,格式:LOCAL 符号地址1,符号地址2, 这些符号地址在宏展开时,由汇编程序重新命名。,局域符号定义,例:宏定义可以无参数 宏定义: SAVEREG MACRO PUSH AX PUSH BX PUSH CX PUSH DX ENDM 宏调用: SAVEREG,教学进程,2., 例:宏定义参数可以时操作码 宏定义: REGINC MOCRO P1,P2,P3 MOV AX,P1 P2 P3 ENDM 宏调用: REGINC IVAR1,INC,AX 宏展开: MOV AX,IVAR1 INC AX,5.1.4,宏指令语句, 伪操作PURGE可以取消宏定义 宏定义: ADD2 MACRO OPTR1,OPTR2,RESULT MOV AX,OPTR1 ADD AX,OPTR2 MOV RESULT,AX ENDM 宏调用: ADD2 XX,YY,ZZ PURGE ADD2,教学进程,伪操作PURGE,汇编语言程序设计,5.2.1,顺序程序设计, 例:计算Y=5X+8,设X为无符号字节数据,且在ARGX单元存放。计算结果,存入RLTY单元。,教学进程,5.2,SSEG SEGMENT STACK ;堆栈段开始 STK DB 20 DUP(0) SSEG ENDS ;堆栈段结束 DSEG SEGMENT ;数据段开始 ARGX DB 15 RLTY DW 0 DSEG ENDS ;数据段结束 CSEG SEGMENT ;代码段开始 ASSUME CS:CSEG,DS:DSEG ASSUME SS:SSEG,CALC:MOV AX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,LENGTH STK MOV AL,ARGX ;取原始数 MOV BL,05 MUL BL ;计算5x MOV BX,08 ADD AX,BX ;再加上8 MOV RLTY,AX ;保存结果 MOV AX,4C00H INT 21H CSEG ENDS END CALC,教学进程,顺序程序设计举例(续),分支程序设计举例:设内存中有三个互不相等的无符号字数据,分别存放在ARG开始的字单元,编制程序将其中最大值存入MAX单元。,分支程序设计,教学进程,5.2.2,SSEG SEGMENT STACK STK DB 20 DUP(0) SSEG ENDS DSEG SEGMENT ARG DW 7138H,84A6H,29EH MAX DW ? DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME SS:SSEG,START:MOV AX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,SIZESTK LEA SI,ARG ;取数据首址 MOV AX,SI ;取第1个数 MOV BX,SI+2 ;取第2个数 CMP AX,BX ;两数比较 JAE FMAX1 ;AX中的数大 MOV AX,BX ;大数送AX FMAX1:CMP AX,SI+4 ;大数与第3个数比较 JAE FMAX2 ;AX中的数大 MOV AX,SI+4 ;第3个数大 FMAX2:MOV MAX,AX ;保存最大值 MOV AX,4C00H INT 21H CSEG ENDS ENDF START,教学进程,分支程序设计举例(续),循环程序设计,1、循环的结构形式,教学进程,5.2.3,5.2.3,循环程序设计,例:内存DATA开始存放100个单字节数据。编写程序统计这些数据内所有为 “1”的位的个数,将结果存入NUMB单元。 完成此例需要统计每一个字节数据中“1”的个数,可以用右移指令把该数据的各位逐个移到进位标志位CF中,当CF=1,计数器值加1,直到100个数据检查完毕。,2、,教学进程,循环程序的设计方法,5.2.3,循环程序设计,源代码清单: SSEG SEGMENT STACK 开始 STACK DW 100 DUP(0) SSEG ENDS DSEG SEGMENT ASSUME CS:CSEG,DS:DSEG ASSUME SS:SSEG START: MOV AX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,SIZE STACK MOV SI,OFFSET DATA MOV CL,100 XOR AL,AL,教学进程,5.2.3,循环程序设计,LOOP2: MOV CH,08H XOR BH,BH MOV AH,SI LOOP1:ROR AH,1 JNC CHT1 INC BH CHT1: DEC CH JNZ LOOP1 INC SI DEC CH JNZ LOOP2 MOV DNUMB,BH MOV AH,4CH INT 21H CSEG ENDS END START,教学进程,格式: 过程名 PROC 属性 过程名 ENDP 过程名为标识符,它又是子程序入口的符号地址,与标号的作用相同。 属性(Attribute)是指类型属性,可以是NEAR或FAR。 用户对过程属性的确定原则很简单,即: (1)如果调用程序和过程在同一个代码段中,则使用NEAR属性。 (2)如果调用程序和过程不在同一个代码段中,则使用FAR属性。,一般子程序有五部分组成 :,子程序设计,1.过程定义,教学进程,5.2.4,5.2.4,子程序设计,现场主程序在调用子程序前可能在CPU寄存器和内存中存有一 些有用的数据,这些数据就是调用前的现场, 现场保护在子程序的执行过程中很可能会改表这些单元的内容。 因此在子程序开始执行前,把主程序中有用的数据先保 存到堆栈中,这向工作称为现场保护。 恢复为使子程序返回到主程序后,主程序能够在原有环境下继 续执行,必须将现场保护时保存在堆栈中的现场数据重 新恢复。,2.,教学进程,现场的保存与恢复,5.2.4,子程序设计, 子程序调用除一般的简单调用外,还可以嵌套调用、递归调用。 在子程序执行完毕后,必须回到调用它的主程序。因此,在每个子程序结束时必须有返回指令,返回指令为RET。,3.,教学进程,子程序的调用和返回,5.2.4,子程序设计,4.,例:十进制到十六进制数转换程序。程序要求从键盘取得一个十进 制数,然后把该数以十六进制形式在屏幕上显示出来。,CSEG segment ssume CSCSEG main proc far ; 程序的主要部分 START: call decibin ; 调用子程序decibin call crlf ; 调用子程序crlf call binihex ; 调用子程序binihex,教学进程,程序举例,call crlf jmp repeat main endp decibin proc near ; 子程序decibin mov bx,0 newchar:mov ah,1 int 21h ; 从键盘接收单个字符 ; 非09之间的数退出 sub al,30h jl exit cmp al,9d jg exit cbw ; al扩展到ax ; BX中的数乘以10 xchg ax,bx mov cx,10d mul cx xchg ax,bx,5.2.4 子程序设计,教学进程,4.,程序举例(续),a

温馨提示

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

评论

0/150

提交评论