《汇编语言程序设计》由会员分享,可在线阅读,更多相关《汇编语言程序设计(95页珍藏版)》请在金锄头文库上搜索。
1、第四章 汇编语言程序设计,4.0 概述4.1 汇编语言程序格式4.2 伪指令语句4.3 程序设计方法4.4 DOS系统功能调用4.5 汇编语言与C/C+混合编程,第四章 汇编语言程序设计,重点难点: 8086汇编语言编程方法 常用伪指令的理解与灵活应用 综合程序设计方法,4.0 概述,从使用者的角度看,一般可分成以下三种:1、机器语言(Machine Language)用0、1数字代码来表示机器操作;如:MOV AX,BX1000101111000011特点:计算机能直接识别,执行速度快; 不方便记忆和编程,一、计算机程序设计语言,2、汇编语言(Assembly Language)用助记符来表
2、示指令,如:MOV、ADD、IN特点:机器不能识别,需翻译 面向硬件,执行速度较快 用于编写实时控制程序3、高级语言(High-level Language)用数学语言和自然语言编程;如:加法:;输出:cout特点:编程简单、不需了解机器硬件 机器不能直接识别,需庞大的翻译系统、速度较慢,一般应用:混合语言汇编语言+高级语言等混合编程 各取所长,相互调用汇编语言实现:硬件操作高级语言实现:复杂算法,1、几个名词汇编语言:用助记符来表示指令的语言。汇编语言源程序:用汇编语言编写的程序。汇编:将源程序翻译成机器代码的过程。汇编程序:将源程序翻译成机器代码的程序。,二、汇编语言源程序执行过程,2、汇
3、编语言源程序执行过程,8086系统中常用的汇编程序:MASM6.X 宏汇编ASM 小汇编,三、完整汇编源程序实例,DATA SEGMENTDA1 DB 12HDA2 DB 34HDA3 DB 00HDATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATA(下接右边),START: MOV AX,DATA MOV DS,AX MOV BL,DA1 ADD BL,DA2 MOV DA3,BL MOV AH,4CH INT 21HCODE ENDS END START,分析程序的结构、功能、组成,汇编源程序特点分段的结构 4个段,至少有代码段,其他视需要而定;有部分
4、固定的程序框架(程序结构) 段定义、段分配、设置段地址、返回DOS、程序结束基本组成-语句 有些是前面学过的指令语句,其他是MASM中规定的格式、语法语句。,段名1 SEGMENT ;段开始 段名1 ENDS ;段结束段名2 SEGMENT ASSUME CS:段名2, DS:段名1 ;段分配START:MOV AX,DATA MOV DS,AX ;送段基址 MOV AH,4CH ;返回DOS方法一 INT 21H段名2 ENDS END START ;源程序结束,一般程序框架,MAIN PROC FAR PUSH DS MOV AX,0 PUSH AX RETMAIN ENDP,返回DOS方
5、法二,写在堆栈段的设置后面,4.1 汇编语言程序格式,MASM中的语句分为两类:指令性语句:有对应的机器指令。伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、存储区分配、段定义、段分配、指示程序开始和结束等功能。差别:格式及功能不同(形式); 汇编时能否形成对应的机器码(本质)。,一、汇编源程序的语句,1、指令性语句格式:标号:指令助记符 操作数,操作数;注释标号符号地址;必须加“:”;命名规则;可省指令助记符指令名称,不可省操作数操作对象;多个时用“,”隔开注释以“;”开头;说明性语句,可省例: NEXT:MOV AH,0FH ;将0FH送入AH中,2、伪指令语句(也称
6、汇编命令语句)格式:名字 伪指令指示符 操作数,操作数;注释功能:变量定义、段定义、段分配、程序开始、结束等名字符号地址,不加“:”,变量名或段名等,可省伪指令指示符MASM中规定的符号;如DB、DW和END等操作数操作对象,多个时用“,”隔开注释以“;”开头;说明性语句,可省例:DA1 DB 10H,20H,30H ;定义变量DA1,并赋初值,MASM中使用的数据项:常数、变量、标号、寄存器、存储器或表达式。1、常数是固定值,没有属性,是确定的数据。二进制:字母“B”结尾,如:00110100B;十进制:字母“D”结尾或省略,如:1234D、5678;十六进制:字母“H”结尾,“AF”开头时
7、,前面加0;字符串:用单引号 括起来的单个字符或字符序列,如:A,123H。注:字符串以ASCII码形式存放, 如:MOV AH,A ;AH=41H,二、数据项,2、变量数据的符号地址;变量名表示后面数据项第一个字节的地址;例:DA1 DB 10H,20H,30H, ;定义变量DA1,初值为,DA1表示10H的地址相当于高级语言中的数组;在程序中一般作为存储器操作数来使用。 例:MOV AH,DA1,变量的三种属性: 段值:变量所在段的段基址。 段内偏移地址:指变量所在地址与所在段首地址之间的地址偏移字节数。 类型:长度属性,指变量中每个元素所包含的字节数,类型有DB、DW、DD等。,3、标号
8、指令性语句的符号地址;名称代表后面可执行指令语句的开始地址;可作为转移指令的目的操作数。例: JMP NEXT NEXT:MOV AH,0FH,标号的三种属性: 段值:标号所在段的段基址,总在CS中。 段内偏移地址:指标号所在地址与所在段首地址之间的地址偏移字节数。 类型:指标号可转移的距离,也称距离属性。 NEAR:近标号,实现段内转移或调用; FAR: 远标号,实现段间转移或调用。 默认为NEAR。,三、 MASM中的表达式,表达式:运算对象与运算符组成。运算对象:常数、变量、标号。运算符:MASM中有六类,包括: 算术运算符、逻辑运算符、关系运算符 数值返回运算符、修改属性运算符、其它运
9、算结果:常数或存储器地址注意:所有表达式由MASM处理(即:在汇编时进行运算),掌握:常用运算符及表达式的结果,1、算术运算符包括:+,-,*,/(取商),MOD(取余),SHL,SHR特点:运算对象及结果均为整数 地址只能加减,例: DA1 DB 1,2,3,4 DA2 DB 20 MOV AX,30*5 MOV AL,31MOD5 MOV AL,31/5 MOV AL,DA2-DA1,MOV AX,150MOV AL,1MOV AL,6MOV AL,4,2、逻辑运算符包括:AND,OR,NOT,XOR特点:位运算 只能用于数字表达式 运算结果长度由另一操作数决定例:MOV BL,8CH A
10、ND 73H MOV BL,AL AND OFFH MOV BX,NOT 0FFH,注意:AND AX,8CH AND 73H (两AND不同)区别:前为指令助记符,后为运算符,且位置不同; 处理时间不同;前影响PSW,后不影响,MOV BL,00H()MOV BX,0FF00H,3、关系运算符包括:EQ,NE,LT,GT,LE,GE特点:运算对象:数据或同一段内的地址; 运算结果:关系为真,结果全1;假,全0例:MOV AX,10H GE 16 MOV AL,10H GE 16,MOV AX,0FFFFHMOV AL,0FFH,关系运算符常与逻辑运算符组合起来使用例:MOV CX,(PORT
11、 LT 5)AND 100)OR(PORT GE 5)AND 200),若PORT5,MOV CX,100若PORT5,MOV CX,200,4、数值返回运算符(分析运算符)包括:OFFSET,SEG,TYPE,LENGTH,SIZE格式:运算符 变量或标号功能:OFFSET:取偏移地址值;SEG:取段基址;TYPE:返回长度(变量)或距离(标号)属性值;,LENGTH:对于一般变量,返回1;对于DUP定义的变量,返回单元数(直接返回第一个DUP前的N值);说明:DUP为复制操作符,格式:N DUP(表达式); N表示复制次数,表达式为复制内容 例:2 DUP(1,2) 等价于 1,2,1,2
12、SIZE:SIZE = LENGTH*TYPE,数值返回运算符(续),例:设DS=0200H,从偏移量为0000H定义以下变量: DA1 DW 1234H,5678H DA2 DD 5 DUP(1,2) . MOV AX,OFFSET DA1 MOV AX,OFFSET DA2 MOV AX,SEG DA1L1:MOV AX,TYPE DA2 MOV AX,TYPE L1 MOV AX,LENGTH DA1 MOV AX,SIZE DA2,MOV AX,4MOV AX,0FFFFHMOV AX,1MOV AX,20,MOV AX,0000HMOV AX,0004HMOV AX,0200H,数值
13、返回运算符(续),5、修改属性运算符段操作符 ES:,DS:,SS:,CS: 修改段基址的来源 例: MOV AX,BX ;默认段基址在DS中 MOV AX,ES:BX ;段基址在ES中PTR格式:类型/距离 PTR 变量或标号功能:临时改变或指明变量或标号的类型属性, 常与BYTE、WORD、NEAR、FAR等连用。,例:DA1 DB 15H,36H DA2 DW 1122H,3344H MOV AX,DA1 MOV AL,DA2 MOV BX,10H改:MOV AX,WORD PTR DA1 MOV AL,BYTE PTR DA2 ;临时改变变量类型 MOV WORD PTR BX,10H
14、 ;临时指明操作类型思考:这三条指令执行后的结果分别是多少? AX=3615H,AL=22H,(DS:BX)=0010H,() ;长度不一致,() ;长度不一致,() ;类型不明,6、其他运算符():改变优先级; :内存单元地址 补充 $:地址计数器的当前值(即当前偏移地址)例:DA1 DW 1,2,$+4,0AH 若DA1偏移地址为1000H,则上述变量定义等效为: DA1 DW 1,2,1008H,0AH,例:若 DA1 DB 01H,02H,03H DA2 DW 5566H COUNT EQU $-DA1则:COUNT的值为5 COUNT表示:DA1,DA2占的字节总数(长度之和)7、优先级(P134 表4.3),