资源预览内容
第1页 / 共79页
第2页 / 共79页
第3页 / 共79页
第4页 / 共79页
第5页 / 共79页
第6页 / 共79页
第7页 / 共79页
第8页 / 共79页
第9页 / 共79页
第10页 / 共79页
亲,该文档总共79页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第四章 汇编语言程序设计4.1 概述4.2 汇编语言源程序的格式4.3 MASM中的表达式4.4 伪指令4.5 常用的DOS和BIOS调用4.6 汇编程序设计及举例4.1 概述三层语言结构:用来编写计算机程序的语言,即程序设计语言,包括机器语言、汇编语言和高级语言,分别位于三个层次。(1)机器语言机器语言是位于最底层的程序设计语言,是使用二级制代码表示的指令系统,用机器语言编写的程序称为“目标程序”难辨认、难记忆、易出错(2) 汇编语言汇编语言使用助记符来表示指令的操作码和操作数,使用标号和符号来代表地址、常量和变量,便于识别和记忆。汇编语言的一条语句对应一条机器语言指令。用汇编语言编写的程序,称为“汇编语言程序”,这种程序不能直接由计算机识别,需要通过一种起翻译作用的“汇编程序”将其翻译成机器语言,由计算机执行。缺点:使用汇编语言编写程序,必须要熟悉机器的指令系统、寻址方式、寄存器的设置和使用方法,它是一种面向机器的低级语言,不能被直接移植到其他类型的机器上。(3)高级语言高级语言是一种面向问题或过程的语言,它独立于机器,其编写的程序是可以移植的。高级语言的一个语句相当于许多条汇编语言指令或机器语言指令。高级语言编写的程序也必须翻译成机器语言后才能执行。实现这种翻译的程序叫做“编译程序”,不同的语言有不同的编译程序。用汇编语言或高级语言编写的程序称为“源程序”。汇编语言或高级语言的程序处理过程:汇编语言或高级语言的程序处理过程:1、编辑汇编语言源程序(即建立.ASM文件)2、汇编为目标程序(即汇编为.OBJ,.LST,.CRF文件)3、连接为可执行程序(即生成.EXE文件)4、运行语言源程序结构:4.2 汇编语言格式一、分段格式汇编语言程序按段编写,这样有利于用户按段组织程序和存放数据。用户所定义的不同段将被存放在内存的不同位置,有利于存储器管理。一个汇编语言源程序可以由若干个段组成,程序中的指令、数据以及堆栈都应当定义到具体的段中。汇编语言有两种类型语句,即指令和伪指令,前者属于指令性语句,后者属于指示性语句v指令性语句:指令,由汇编程序翻译成机器指令,在汇编过程中产生对应的目标代码 典型的汇编指令是:ADD AX, SIv指示性语句:为汇编程序提供一些信息,让汇编程序在汇编过程执行某些特定的功能,不产生目标代码典型的伪指令是:COST DW ? ;定义一个字空间,并将标识符COST指向该字空间 二、汇编语言语句的类型和组成1、汇编指令格式标号: 助记符 操作数,操作数 ;注释u标号是指为该指令所在地址取的名字,后面必须跟冒号“:”。标号是可供选择的标识符8086/8088汇编语言中使用的标识符必须遵循下列规则:标识符由字母(az,AZ)、数字(09)或下划线组成标识符必须以字母开头标识符有效长度为31个字符,若超过31个字符,则只保留前面的31个字符为有效字符标号: 助记符 操作数,操作数 ;注释n指令助记符是指令名称的代表符号,是指令语句中的关键字,不能省略,它表示本指令的操作类型,必要时可在助记符前加一个或多个“前缀”n操作数是参加本指令运算的数据,有些指令不需要操作数,有些指令只需要一个操作数,有些指令需要两个操作数,需要用逗号隔开;有些操作数可以用表达式表示n注释为可选项,需用分号开头,便于阅读程序,汇编程序不对其进行任何处理2、伪指令格式名称 伪指令定义符 操作数 ;注释伪指令格式与指令格式有以下几点不同:l名称相当于指令语句中的标号,但在名称后不允许带冒号l伪指令定义符是由MASM规定的符号,又称汇编命令,不可缺省,如DB、DW、PROC等l操作数个数随不同的伪指令不同,有的伪指令不允许带操作数,有的允许带多个操作数三、汇编语言的数据1、常数指令中出现的固定值二进制:最后加字母B 例如:01000111B十进制:最后加字母D,D可以忽略 例如:1996或1996D八进制:最后加字母Q(或O) 例如:2560Q十六进制:最后加字母H,如果以字母“AF”开头,前面加0 例如:0AH,0A342H132、变量变量通常指存放在存储单元中的值,在程序运行中是可以修改的。(1)段值(SEGMENT)(2)段内偏移地址(OFFSET)(3)类型(TYPE):指变量中每个元素包含的字节数3、标号标号是可执行指令语句的地址的符号表示,它可以作为转移指令和调用指令的目标操作数,以确定程序转向的目标地址,它也具有三个属性:段值、段内偏移地址、类型(指在转移指令中标号可转移的距离)144、保留字保留字是汇编语言中预先保留下的具有特殊意义的符号,只能作为固定的用途指令、伪指令。寄存器名等都是保留字5、注释从分号(;)开始,到本行结束15 4.3 MASM中的表达式表达式由操作数以及运算符组成,在汇编时由汇编程序对它进行运算,运算结果作为一个语句中的操作数去使用。运算结果可以是一个常数字,也可以是一个存储器的地址。一、操作数:代表一个数据或一个地址数据:常数或变量地址:标号二、运算符1、算术运算符 2、逻辑运算符 3、关系运算符4、分析运算符 5、综合运算符 6、其它运算符16171、 算术运算符+ - X / MOD SHL SHR可以对数据进行运算,运算结果仍然为数据,但对地址不能进行乘除运算。例如: 20A1H+1040H21H SHL 2 = 84H182、 逻辑运算符AND OR NOT XOR l只能对常数进行运算,得到的结果也是常数l既可以作指令助记符,又可以作汇编语言的运算符l指令助记符是在程序执行时运算的,运算符是在汇编过程进行的例如: AND DX, PORT AND 0FEH如果PORT值为90H,则相当于AND DX,90H如果PORT值为81H,则相当于AND DX,80H193、 关系运算符EQ NE LT GT LE GE两个参加运算的数必须同是数值,或同是内存单元的地址,而结果总是一个数值。如果关系成立:其运算结果为0FFH或0FFFFH,否则,其结果为0例如: MOV DX, PORT LT 5如果PORT小于5,相当于 MOV DX, 0FFFFH如果PORT不小于5,相当于 MOV DX, 020关系运算符一般不单独使用,而是和逻辑运算符结合起来使用例如:MOV BX, (PORT LT 5) AND 20) OR (PORT GE 5) AND 30 )当PORT小于5时,相当于MOV BX, 20当PORT大于或等于5时,相当于MOV BX, 30214、分析运算符(数值返回运算符)OFFSET SEG TYPE SIZE LENGTH(1)OFFSET:取变量或标号的偏移地址值格式:OFFSET 变量或标号(2)SEG:取变量或标号的段基址格式:SEG 变量或标号(3)TYPE:返回变量的类型属性或标号的距离属性格式:TYPE 变量或标号A1 DB 20H,30HA2 DW 0438HL1:MOV AH, TYPE A1MOV BH, TYPE A2MOV BL, TYPE L1(4)LENGTH:当变量中使用DUP时,LENGTH返回此变量所包含的单元数,对其它变量则返回1格式:LENGTH 变量22M1 DW 100 DUP (?)M2 DW 1,2,3M3 DB A B C DMOV CX, LENGTH M1MOV BL, LENGTH M2MOV AL, LENGTH M3(5)SIZE:返回变量包含的字节数格式:SIZE 变量SIZE=LENGTH*TYPE2324例如: ABC DW 100 DUP (?)OFFSET:求偏移地址MOV DX, OFFSET ABCSEG:求段基址MOV AX, SEG ABCMOV DS, AXTYPE:求标识符类型值LENGTH:求为标识符分配的项数SIZE:求为标识符分配的字节数TYPE ABC ;等于2 LENGTH ABC ;等于100SIZE ABC ;等于200255、综合运算符(修改属性运算符):段操作符、PTR、THIS、HIGH、LOW、SHORTPTR:定义某内存单元类型格式: 类型 PTR 变量 / 标号例如: MOV AX, WORD PTR D1 ;定义D1指向的内存单 元为字单元MOV BYTE PTR 1000H, 0MOV WORD PTR 1000H, 0PTR通常和伪指令BYTE、WORD等合用26THIS:指定新类型格式: 变量/标号 EQU THIS 类型/距离将EQU THIS右边的类型/距离属性,赋给左边的变量/标号,该变量或标号的段地址和偏移地址与下一个存储单元的地址相同例如: LABC EQU THIS BYTELABD DW 4321H, 2255HMOV AL, LABC ;AL=21HMOV AX, LABD ;AX=4321HLABC和LABD具有相同的段地址和偏移量,但LABC是字节类型,LABD是字类型。27SHORT 标号 SHORT用来说明转移类指令中转向地址的属性,指出转向的目标地址与本指令之间的距离在-128+127之间,即限制在短转移范围内LOW 变量或标号 ;取低字节 HIGH 变量或标号 ;取高字节MOV AL, LOW 3080H ;AL=80HMOV AX, HIGH 3A4BH ;AH=3AH6、其他运算符其它运算符有(), ,MASK和WIDTH等六种圆括号():用来改变运算符的优先级别,()中的运算符具有最高优先权方括号 :主要用来表示地址表达式或多重变量的下标值尖括号及原点:在结构中专用MASK和WIDTH:在记录中专用2829数据定义伪指令:DB DW DD DQ DT存储单元类型定义伪指令:BYTE WORD DWORD符号定义伪指令: EQU =段定义伪指令:SEGMENT ENDS ASSUME ORG过程定义伪指令:PROC ENDP NEAR FAR程序结束伪指令:END简化段定义伪指令:MODEL CODE DATA STACK 4.4 伪指令301、数据定义伪指令: DB DW DD DQ DT用来定义存储单元的符号名,并初始化该单元或该单元开始的若干连 续单元,初始化可以采用确定值,也可以采用不确定值 DB(Define Byte) 格式:符号名 DB 表达式中的值或项表中的每一项定义为一个字节数,它们从符号名地 址开始按字节连续存放,直到表中数据项结束(地址递增方向),表 达式的值或项对应小于8位2进制数表示的最大值 例如: FIRST DB 3,18,25H,ABCSECOND DB ?THIRD DB 9 DUP (?)31DW (Define Word)格式:符号名 DW 表达式的值或项表中的每一项都是两个字节数,应小于16位二进制数表示的最大值例如: DON DW 10 DUP (?) ;在内存中留出10个空单 元,其中每项都是2个字节32DD:定义双字 DQ:定义4个字 DT:定义10个字 例如: N1 DD 2.5, 3.2E+2 DD可以用来定义有小数点的十进制数或用科学计数法表示的数据,小数在汇编时被译成四字节浮点数,尾数在低地址一端,阶码
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号