第5章汇编语言与汇编程序 【本章重点】本章重点在于介绍汇编语言的指令格 式和伪指令格式、汇编程序的上机调试过程等等, 为后面学习微型计算机接口的编程打好基础。 【本章难点】本章难点是汇编程序的上机调试过 程,它是掌握汇编语言的关键
第5章 汇编语言与汇编程序 【本章重点】本章重点在于介绍汇编语言的指令格 式和伪指令格式、汇编程序的上机调试过程等等, 为后面学习微型计算机接口的编程打好基础。 【本章难点】本章难点是汇编程序的上机调试过 程,它是掌握汇编语言的关键
汇编程序的执行过程 汇编语言 源程序 汇编 日标程字 (机器语言 汇编程序
汇编语言 源程序 汇编程序 目标程序 (机器语言) 汇编 汇编程序的执行过程
§5.1汇编语言的语句格式 一条汇编语言指令中最多包含4个区段,如下所示: [标号]:操作码[目的操作数,源操作数];注释 其中用方括号括起来的部分,可以有,也可以没有。 标号与操作码之间“:”隔开; 操作码与操作数之间用“空格”隔开; 目的操作数和源操作数之间有 分隔; 操作数与注释之间用“;”隔开
§5.1 汇编语言的语句格式 一条汇编语言指令中最多包含4个区段,如下所示: [标号]: 操作码 [目的操作数,源操作数] [;注释] 其中用方括号括起来的部分,可以有,也可以没有。 标号与操作码之间“ : ”隔开; 操作码与操作数之间用“空格”隔开; 目的操作数和源操作数之间有“ , ”分隔; 操作数与注释之间用“ ; ”隔开
§52汇编语言中的常数与表达式 5.2.1常数 常数可以分数值常数和字符串常数两类。数值常数按其基数 的不同,可有二进制数、八进制数、十进制数、十六进制数 等几种不同的表示形式,汇编语言中采用不同的后缀加以区 分 B:表示二进制数。例如,10100101B。 D:表示十进制数。例如,278D或278。 Q:表示八进制数。例如,567Q,263Q。 H:表示十六进制数。例如,9AH,5678H
§5.2 汇编语言中的常数与表达式 5.2.1常数 常数可以分数值常数和字符串常数两类。数值常数按其基数 的不同,可有二进制数、八进制数、十进制数、十六进制数 等几种不同的表示形式,汇编语言中采用不同的后缀加以区 分。 B:表示二进制数。例如,10100101B。 D:表示十进制数。例如,278D或278。 Q:表示八进制数。例如,567Q,263Q。 H:表示十六进制数。例如,9AH,5678H
字符串常数是由单引号括起来的一串字符。例如: THIS IS A STUDENTI 12345 要指出的是,此处的’12345其值并非是十进制数12345, 而是代表它们所对应的ASCⅡ码,即31H,32H,33H 34H,35H 5.2.2表达式和运算符 在表达式中,运算符充当着重要的角色。8086宏汇编有 算术运算符、逻辑运算符、关系运算符、分析运算符和 综合运算符共5种
字符串常数是由单引号括起来的一串字符。例如: ‘THIS IS A STUDENT!’ ‘12345’ 要指出的是,此处的’12345’其值并非是十进制数12345, 而是代表它们所对应的ASCⅡ码,即31H,32H,33H, 34H,35H。 5.2.2表达式和运算符 在表达式中,运算符充当着重要的角色。8086宏汇编有 算术运算符、逻辑运算符、关系运算符、分析运算符和 综合运算符共5种
8086汇编语言中的运算符 算术运算符逻辑运算符关系运算符 分析运算符 综合运算符 +(加法) AND(与) EQ(相等) SEG(求段基值) PTR (减法) OR(或) NE(不相等) OFFSET(求偏移量) ×(乘法)XOR(异或)LT(小于) TYPE(求变量类型) SHORT (除法) NOT(非) GT(大于) LENGTH(求变量长度)HGH MOD(求余) LE(小于或等于)SZE(求字节数) LOW SHL(左移) GE(大于或等于) SHR(右移)
算术运算符 逻辑运算符 关系运算符 分析运算符 综合运算符 +(加法) AND(与) EQ(相等) SEG(求段基值) PTR -(减法) OR(或) NE(不相等) OFFSET(求偏移量) THIS ×(乘法) XOR(异或) LT(小于) TYPE(求变量类型) SHORT ÷(除法) NOT(非) GT(大于) LENGTH(求变量长度) HIGH MOD(求余) LE(小于或等于) SIZE(求字节数) LOW SHL (左 移) GE(大于或等于) SHR (右移) 8086汇编语言中的运算符
分析运算符共有5个:SEG(求段基值)、 OFFSET(求偏移量)、 TYPE(求变量类型)、 LENGTH(求字节数)和SLZE(求字节数)。其 中 LENGTH和SLZE只对数据存储器地址操作数有效 1)SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址 使用格式:SEG变量名或标号名 例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义 后,用SEG运算符求变量所在的段基址 DATA SEGMENT 定义数据段 VARI DB 10H, 18H, 25H, 34H 定义字节数据 VAR2 DW2300H,1200H 定义字数据 VAR3 DD1100220OH,33004400H 定义双字数据 DATA ENDS 数据段结束
分析运算符共有5个:SEG(求段基值)、OFFSET(求偏移量)、 TYPE(求变量类型)、LENGTH(求字节数)和SIZE(求字节数)。其 中LENGTH和SIZE只对数据存储器地址操作数有效。 1)SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址 使用格式:SEG变量名或标号名 例如:已知数据段DATA从存储器实际地址03000H开始,作如下定义 后,用SEG运算符求变量所在的段基址。 DATA SEGMENT ;定义数据段 VARl DB 10H,18H,25H,34H ;定义字节数据 VAR2 DW 2300H,1200H ;定义字数据 VAR3 DD 11002200H,33004400H :定义双字数据 DATA ENDS ;数据段结束
MOV BX, SEG VARI汇编成: MOV BX,O300H MOV CX, SEG VAR2汇编成: MOV CX,O300H MOV DX, SEG VAR3汇编成; MOV DX,0300H 2) OFFSET运算符:利用运算符 OFFSET可以得到 个标号或变量的偏移量。 使用格式: OFFSET变量名或标号名 例如:对于上例中所定义的数据段,采用 OFFSET运算符求出变 量ⅥAR和VAR2的偏移量。则 MOV BX, OFFSET VAR1汇编成: MOV BX,0000H MOV CX, OFFSET VAR2汇编成: MOV CX,0004H MOV DX, OFFSET VAR3汇编成: MOV DX,0008H
MOV BX,SEG VARl 汇编成: MOV BX,0300H MOV CX,SEG VAR2 汇编成: MOV CX,0300H MOV DX,SEG VAR3 汇编成; MOV DX,0300H 2)OFFSET运算符:利用运算符OFFSET可以得到一 个标号或变量的偏移量。 使用格式:OFFSET 变量名或标号名 例如:对于上例中所定义的数据段,采用OFFSET运算符求出变 量VARl和VAR2的偏移量。则: MOV BX,OFFSET VAR1 汇编成: MOV BX,0000H MOV CX,OFFSET VAR2 汇编成: MOV CX,0004H MOV DX,OFFSET VAR3 汇编成: MOV DX,0008H
3)TYPE运算符:TYPE运算符可加在变量、结构或标 号的前面,所求出的是这些存储器操作数的类型部分。 运算符TYPE的运算结果是一个数值,这个数值与存储 器操作数类型属性的对应关系 存储释操作数类型 TYPE返回值 字节数据BYTE(DB定义) 字数据WORD(DW定义) 双字数据 DWORD(DD定义)
3)TYPE运算符:TYPE运算符可加在变量、结构或标 号的前面,所求出的是这些存储器操作数的类型部分。 运算符TYPE的运算结果是一个数值,这个数值与存储 器操作数类型属性的对应关系 存储释操作数类型 TYPE返回值 字节数据BYTE(DB定义) 1 字数据WORD(DW定义) 2 双字数据DWORD(DD定义) 4
DATA SEGMENT ;定义数据段 VARI DB10H,18H,25H,34H;定义字节数据 VAR2 DW 2300H, 1200H ;定义字数据 VAR3DD11002200H,33004400H 定义双字数据 DATA ENDS 数据段结東 下列指令: MOV BX, TYPE VAR1 汇编成: MOV BX, MOV CX, TYPE VAR2 汇编成: MOV CX,2 MOV DX, TYPE VAR3 汇编成: MOV DX,4
DATA SEGMENT ;定义数据段 VARl DB 10H,18H,25H,34H ;定义字节数据 VAR2 DW 2300H,1200H ;定义字数据 VAR3 DD 11002200H,33004400H :定义双字数据 DATA ENDS ;数据段结束 下列指令: MOV BX,TYPE VAR1 汇编成: MOV BX,1 MOV CX,TYPE VAR2 汇编成: MOV CX,2 MOV DX,TYPE VAR3 汇编成: MOV DX,4