《CH4汇编语言及其程序设计》由会员分享,可在线阅读,更多相关《CH4汇编语言及其程序设计(85页珍藏版)》请在金锄头文库上搜索。
1、第四章第四章 汇编语言及其程序设计汇编语言及其程序设计1主要内容主要内容几个概念8086汇编语言的语句8086汇编中的伪指令8086汇编中的运算符汇编语言程序设计系统调用汇编语言的程序结构常用的伪指令三种程序结构的设计顺序结构分支结构循环结构子程序结构重难点重难点第4章 汇编语言程序设计2几个概念汇编语言、汇编语言源程序、汇编、汇编程序源程序.asm汇编汇编 masmmasm目标程序.obj连接连接 linklink结果 debug DOS下执行执行执行可执行程序.exe34.1 8086汇编语言的语句 1. 1. 指令性语句指令性语句指令性语句用于表达处理器指令,汇指令性语句用于表达处理器指
2、令,汇编后对应一条指令代码(目标代码)编后对应一条指令代码(目标代码), ,因而是可执行语句因而是可执行语句 标号标号: 操作数操作数 ; ;注释注释 2. 2. 指示性语句指示性语句指示性语句指示源程序如何汇编、指示性语句指示源程序如何汇编、 变量怎样定义、过程怎么设置,也称为伪指令,汇编时不变量怎样定义、过程怎么设置,也称为伪指令,汇编时不 产生目标代码,是不可执行语句产生目标代码,是不可执行语句 名字名字 参数参数 ; ;注释注释 4指令与伪指令指令与伪指令vv指令指令(InstructionInstruction) 让让CPUCPU产生动作,在程序执行时才处理。产生动作,在程序执行时才
3、处理。 指令就是第指令就是第3 3章学习的处理器指令,与具体的处理器有关、章学习的处理器指令,与具体的处理器有关、与汇编程序无关。与汇编程序无关。vv伪指令伪指令(DirectiveDirective) 不产生不产生CPUCPU动作,在程序执行前由汇编程序处理。动作,在程序执行前由汇编程序处理。 伪指令与具体的处理器类型无关,但与汇编程序有关。不同伪指令与具体的处理器类型无关,但与汇编程序有关。不同 版本的汇编程序支持不同的伪指令版本的汇编程序支持不同的伪指令。指令和伪指令采用易于记忆的符合 表达,这就是助记符 5保留字保留字vv保留字保留字(Reserved WordReserved Wor
4、d)是汇编程序已经是汇编程序已经 使用的标识符(也称为使用的标识符(也称为关键字关键字),主要有:),主要有: 指令助记符指令助记符例如:例如:MOVMOV、ADD ADD 伪指令助记符伪指令助记符例如:例如:DBDB、DW DW 操作符操作符例如:例如:OFFSETOFFSET、PTR PTR 寄存器名寄存器名例如:例如:AXAX、CSCS汇编语言大小写不敏感 6常量常量常量表示一个固定的数值常量表示一个固定的数值, ,它又分成多种形式它又分成多种形式 1.1.常数常数 2.2.字符串字符串 3.3.符号常量符号常量 4.4.数值表达式数值表达式7(1) (1) 常数常数由由1010、161
5、6、2 2和和8 8进制形式表达的数值,各种进制的数据进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数。以后缀字母区分,默认不加后缀字母的是十进制数。 十十进进制制由由0 90 9数字数字组组成,以字母成,以字母DD(d d) 结结尾(缺省情况可以省略)尾(缺省情况可以省略)100100,255D255D十六十六进进制制由由0 90 9、A FA F数字数字组组成,以字母成,以字母H H (h h)结结尾,以字母开尾,以字母开头头的常数需的常数需 要加一个前要加一个前导导0 064H64H, 0FFH 0FFH 0B800H0B800H二二进进制制由由0 0和和1
6、 1两个数字两个数字组组成,以字母成,以字母B(b)B(b) 结结尾尾01100100B01100100B 8(2) (2) 字符串字符串字符串常量是用单引号括起来的单个字字符串常量是用单引号括起来的单个字 符或多个字符符或多个字符 。 其其数值是每个字符对应的数值是每个字符对应的ASCIIASCII码值码值 。例如:例如: dd(等于等于64H64H) ABAB(等于等于4142H4142H) Hello, Assembly ! Hello, Assembly ! 9(3) (3) 符号常量符号常量vv符号常量使用标识符表达一个数值符号常量使用标识符表达一个数值 vv用来为常量定义符号名用来
7、为常量定义符号名 vv符号定义伪指令有符号定义伪指令有“ “等价等价EQUEQU” ”和和“ “等号等号” ”: 符号名符号名 EQU EQU 数值表达式数值表达式 符号名符号名 数值表达式数值表达式 vvEQUEQU不能重复定义符号名,但不能重复定义符号名,但“ “” ”允许重允许重 复定义。例如:复定义。例如: X = 7X = 7;等效于:等效于:X X equequ 7 7 X = X+5X = X+5;“ “X EQU X+5”X EQU X+5”是错误的是错误的10(4) (4) 表达式表达式vv表达式一般是由表达式一般是由运算符运算符连接的各种常量所构成。连接的各种常量所构成。
8、vv汇编程序在汇编过程中计算表达式,最终得到一个确定汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量。的数值,所以也是常量。 vv表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的数值在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就能确定。表达式的各部分必须在汇编时就能确定。 vv经常使用的是加减乘除经常使用的是加减乘除( * * / / )。)。 vv例如:例如: movmov ax,3*4+5 ax,3*4+5;等价于:等价于:movmov ax,17 ax,17 and ax, 3 and 5and ax, 3 and 5 ;等价于:等价于:an
9、d ax, 1and ax, 1114.2 8086汇编中的伪指令4.2.1 符号定义语句 等值语句格式:符号名 EQU 表达式 PORT EQU 1234 BUFF EQU PORT58 MEM EQU DS:BP20H COUNT EQU CX ABC EQU AAA124.2.2 4.2.2 变量定义语句变量定义语句 vv变量变量实质上是指内存单元的数据,虽然内存单元实质上是指内存单元的数据,虽然内存单元 地址不变,但其中存放的数据可以改变。地址不变,但其中存放的数据可以改变。vv变量需要事先定义才能使用。变量需要事先定义才能使用。vv变量定义(变量定义(DefineDefine)伪指令
10、为变量申请固定长度为伪指令为变量申请固定长度为单位的存储空间,并可以同时将相应的存储单元单位的存储空间,并可以同时将相应的存储单元 初始化。初始化。 vv定义后的变量可以利用定义后的变量可以利用变量名变量名等方法引用其中的等方法引用其中的 数据,即变量的数值。数据,即变量的数值。 13(1) (1) 变量的定义变量的定义 vv变量定义的汇编语言格式为:变量定义的汇编语言格式为: 变量名变量名 伪指令伪指令 初值表初值表 vv变量名变量名为用户自定义标识符,表示初值表首元素的为用户自定义标识符,表示初值表首元素的 逻辑地址,常称为符号地址。变量名也可以没有逻辑地址,常称为符号地址。变量名也可以没
11、有 vv初值表初值表是用逗号分隔的参数是用逗号分隔的参数, ,主要由常量、数值表达主要由常量、数值表达 式或式或“ “?” ”组成。其中组成。其中“ “?” ”表示未赋初值表示未赋初值 vv多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符 DUPDUP进行定义进行定义: 重复次数重复次数 DUP(DUP(重复参数重复参数) ) vv变量定义伪指令有变量定义伪指令有DBDB、DWDW、DDDD等等14字节变量的定义字节变量的定义DBDBvvDBDB伪指令用于分配一个或多个字节单元,伪指令用于分配一个或多个字节单元, 并可以将它们并可以将它们初始化初始化为指定值
12、。为指定值。 vv初值表中每个数据一定是字节量,存放一初值表中每个数据一定是字节量,存放一 个个8 8位数据:位数据: 可以是可以是02550255的无符号数的无符号数 或是或是128128127127带符号数带符号数 也可以是字符串常数也可以是字符串常数15字节变量字节变量 定义实例定义实例;数据段;数据段 X Xdb a,-5 db a,-5 db 2 dup(100),? db 2 dup(100),? Y Ydb ABCdb ABC16字变量的定义字变量的定义DWDWvvDWDW伪指令用于分配伪指令用于分配一个或多个字单元一个或多个字单元,并可以,并可以 将它们初始化为指定值。将它们初
13、始化为指定值。 vv初值表中每个数据是字,一个字单元可用于存放初值表中每个数据是字,一个字单元可用于存放 任何任何1616位数据:位数据: 一个段地址一个段地址 一个偏移地址一个偏移地址 两个字符两个字符 065535065535之间的无符号数之间的无符号数 32768327683276732767之间的带符号数之间的带符号数17字变量字变量 定义实例定义实例;数据段;数据段 countcountdwdw 8000h,?,AB 8000h,?,AB maxintmaxintequequ 64h 64h numbernumberdwdw maxintmaxint arrayarraydwdw m
14、axintmaxint dup(0) dup(0)18双字变量的定义双字变量的定义DDDDvvDDDD伪指令用于分配一个或多个双字单元,伪指令用于分配一个或多个双字单元, 并可以将它们初始化为指定值。并可以将它们初始化为指定值。 vv初值表中每个数据是一个初值表中每个数据是一个3232位的双字量:位的双字量: 可以是有符号或无符号的可以是有符号或无符号的3232位整数位整数 也可以用来表达也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616 位的偏移地址(低位字)的远指针位的偏移地址(低位字)的远指针 varddvardd DD 0,?,12345678h DD 0,?,12
15、345678h farpointfarpoint DD 00400078h DD 00400078h19(2)(2)变量的应用变量的应用vv变量变量具有存储单元的逻辑地址。具有存储单元的逻辑地址。 vv程序代码中程序代码中 :通过通过变量名变量名引用其指向的首个数据。引用其指向的首个数据。 通过通过变量名加减位移量变量名加减位移量存取以首个数据为基地存取以首个数据为基地址的前后数据址的前后数据。20变量的定义变量的定义 bv1bv1db 100,01100100b,64h,ddb 100,01100100b,64h,d;字节变量:不同进制表达同一个数值,内存中有字节变量:不同进制表达同一个数值,内存中有4 4个个64H 64H minintminint= 5= 5;符号常量:符号常量:minintmini