第四章宏汇编语言程序设计
合集下载
第4章 汇编语言程序设计

二、宏汇编语言程序的语句格式
[标号:] 操作符 操作数[,操作数] [;注释] NEXT: ADD AX,BX ;AX(AX)+(BX) 标号: 符号化的代码地址。 操作符:可以是指令、伪指令或宏指令的助记符。 操作数:可以是以下形式: ①常数 ②寄存器名 ③标号、变量名(符号化的数据地址) ④表达式(由常数、地址常量和运算符组合而成)
本章小结
4.1 伪指令及宏汇编基本语法 4.2 顺序程序设计 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计 4.6 系统功能调用 4.7 BIOS调用 4.8 实用程序设计
汇编语言程序中标识符的命名规则 ①字母:A ~ Z 或 a ~ z 注:汇编源程 序中不区分大小写字符 ②数字:0 ~ 9 注:数字不用于标 识符的第一位 ③特殊符号:?、/、_、%等 注:标 识符中谨慎使用特殊符号 ④不能使用汇编语言程序中的保留字
汇编语言程序中的运算符 ①算术运算符: +、-、*、/、MOD ② 逻辑运算符: AND、OR、XOR、NOT 、 SHL、SHR ③ 关系运算符: EQ、NE、LT、GT、LE、 GE ④ 分析运算符: SEG、OFFSET、TYPE、 SIZE、LENGTH ⑤ 综合运算符: PTR、段超越前缀、THIS、 SHORT、HIGH、LOW
4.2 顺序程序设计
顺序程序是从第一条指令开 始,按其自然顺序一条一条 地执行,直到最后一条指令 为止。
4.3 分支结构
N Y
e?
e1 ?
Y
N
e2 ? Y
N e3 ? Y N
switch case1 case2
……
casen
4.4 循环程序设计
e? N
Y
宏汇编第4章

4.3.1 转移指令
示例:设 X 、 Y 均为字变量, X 中存放着有符号数 x 。 程序运行后,Y中的内容是什么?
4.3.1 转移指令
MOV Y,-1 ;Y=-1 MOV AX,X ;AX=X CMP AX,0 ;AX与0比较 JE EXIT1 ;是0,转EXIT1 ADD AX,1000H ;不是0,AX=AX+1000H JO OVERFLOW ;溢出,转OVERFLOW JNS EXIT1 ;未溢出:为正,转EXIT1 NEG AX ;为负,对AX求补 EXIT1:MOV Y,AX ;Y=AX MOV AH,4CH 程序运行结果: INT 21H 0 X=0 时 OVERFLOW: …… ;溢出处理 Y= 溢出 6FFFH<X<7FFFH MOV AH,4CH INT 21H X<7000H |X+1000H|
4.3.1 转移指令
一、条件转移 3.有符号条件转移指令 例如有程序段: MOV AL,-40H CMP AL,50H JG L1 …… L1: …… 由于-40H<50H,不满足JG的条件,顺序执行 如将JG改为JA,由于(-40H)补=0C0H>50H,满足JA 条件,转L1
4.3.1 转移指令
4.2 顺序程序设计
程序: STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT INPUT DB ‘请输入X(0-9):$’;提示输入TAB TAB DW 0,1,8,27,64,125,216 DW 343,512,729;立方表 X DB ? ; 数X XXX DW ? ;立方结果XXX DATA ENDS
4.3.1 转移指令
一、条件转移 3.有符号条件转移指令 例如有程序段: CMP AL,8 JG L1 …… L1: …… 1)设AL=15H,则大于8,满足JG的条件,转L1 2)设AL=8,则等于8,不满足JG的条件,顺序执行 3)设AL=0FFH,则(-1)小于8,不满足JG的条件, 顺序执行。
第四章 汇编语言程序设计[4-1]
![第四章 汇编语言程序设计[4-1]](https://img.taocdn.com/s3/m/34dc0a104431b90d6c85c7cd.png)
微型计算机原理与接口技术
第五讲 佘青山
86919130 qsshe@
There’s always more to learn, and there are always better ways to do what you’ve done before. —DONANLD E. KNUTH
21
§4.1 汇编语言程序格式——数据项
三、数据项
汇编语言中的操作数,可以是常数、寄存器、存储器、变量、标号或表
达式。其中,常数、变量、标号是三种基本数据项。
1、常数
是固定值,没有属性,是确定的数据。 八进制:字母“Q”或“O”结尾,例1037O、2370Q; 十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2; 十六进制:字母“H”结尾,“A~F”开头时,前面加0,例56H、0A7F2H;
16
;注释
;注释
操作数, 操作数
第四章 宏汇编语言程序设计 ——概述 由以上实例可知:
2、分段结构: 指定代码段、数据段、堆栈段 段定义的格式:XX SEGMENT
…… XX ENDS
3、如果程序已经定义了数据段、堆栈段、附加段,则主程序的 开始就要设置这些段的地址。 代码段的地址不能人为设置,由计算机分配。 4、全部源程序用END语句结束。
15
第四章 宏汇编语言程序设计 ——概述
由以上实例可知:
1、程序语句的类型和组成: (1)指令性语句 标号: 操作码 操作数, 操作数 (2)伪指令语句 名字 伪操作 空格作为间隔 标号和名字的规定: (1)英文字母、数字及专用字符 (2)最大长度不能超过 31 个 (3)不能由数字打头 (4)不能用保留字(如寄存器名,指令助记符,伪指令)
第五讲 佘青山
86919130 qsshe@
There’s always more to learn, and there are always better ways to do what you’ve done before. —DONANLD E. KNUTH
21
§4.1 汇编语言程序格式——数据项
三、数据项
汇编语言中的操作数,可以是常数、寄存器、存储器、变量、标号或表
达式。其中,常数、变量、标号是三种基本数据项。
1、常数
是固定值,没有属性,是确定的数据。 八进制:字母“Q”或“O”结尾,例1037O、2370Q; 十进制:字母“D”结尾或省略,或科学表示法,例1234D、5678、2.735E-2; 十六进制:字母“H”结尾,“A~F”开头时,前面加0,例56H、0A7F2H;
16
;注释
;注释
操作数, 操作数
第四章 宏汇编语言程序设计 ——概述 由以上实例可知:
2、分段结构: 指定代码段、数据段、堆栈段 段定义的格式:XX SEGMENT
…… XX ENDS
3、如果程序已经定义了数据段、堆栈段、附加段,则主程序的 开始就要设置这些段的地址。 代码段的地址不能人为设置,由计算机分配。 4、全部源程序用END语句结束。
15
第四章 宏汇编语言程序设计 ——概述
由以上实例可知:
1、程序语句的类型和组成: (1)指令性语句 标号: 操作码 操作数, 操作数 (2)伪指令语句 名字 伪操作 空格作为间隔 标号和名字的规定: (1)英文字母、数字及专用字符 (2)最大长度不能超过 31 个 (3)不能由数字打头 (4)不能用保留字(如寄存器名,指令助记符,伪指令)
第四章 宏汇编语言程序设计

例4-5 IN AL,PORT AND DX,PORT AND 0FEH OUT DX,AX 前一个AND是指令助记符,而后一个AND是 逻辑运算符。
三、关系运算符 有:EQ(相等)、NE(不等)、LT (小于)、GT(大于),LE(小于或等于)、 GE(大于或等于)。 关系运算符的两个操作数必须是数据, 例4-6 MOV AX,10H GT 16 或是同一段内的两个存储单元的地址。进行 MOV BL,6 EQ 0110B 关系运算的比较操作后,结果是一个数值, MOV CX, 12H GE 12 若结果为真,输出全1,即FFH(8位)或 由于表达式12H GE 12 为真所以汇编成: 由于表达式6 EQ 0110B为真所以汇编成: FFFFH(16位)。若结果为假,输出全0。 由于表达式10H GT CX,0FFFFH 16为假所以汇编成: MOV BL,0FFH MOV CX,1 AX,0 注意: MOV BL,1 × ×
4-2 汇编语言中的表达式
表达式由运算对象和运算符组成,在汇编时由 汇编程序对它进行运算,运算结果作为一个语句中 的操作数来使用。 ※运算对象:常数、标号或变量
※运算符:
①算术运算符 ②逻辑运算符 ③关系运算符 ④数值返回运算符 ⑤修改属性运算符 ⑥其它运算符
一、算术运算符 有:+、-、*、/、MOD(模,即取除法运算结 果之余数)、SHL(左移,左移1位相当于乘2)、 SHR(右移,右移1位相当于除以2)。 例4-2 数组ARRAY的定义如下: 所有的算术运算符均可以对数据进行运算,运 ARRAY DB 1,2,3,4,5,6,7,8 算对象与运算结果都是整数。若对地址运算,通常 TRY DB 20 两变量偏移地址之差 是在标号上加/减某一个值,例DA1+2、K2-4各表示 指令为: 一个存储单元的地址,对地址乘是没有意义的。 MOV AX,30*5 MOV CX,(TRY-ARRAY);数组长度→CX 汇编时,计算表达式形成指令为: MOV AX,150 MOV CX,8
三、关系运算符 有:EQ(相等)、NE(不等)、LT (小于)、GT(大于),LE(小于或等于)、 GE(大于或等于)。 关系运算符的两个操作数必须是数据, 例4-6 MOV AX,10H GT 16 或是同一段内的两个存储单元的地址。进行 MOV BL,6 EQ 0110B 关系运算的比较操作后,结果是一个数值, MOV CX, 12H GE 12 若结果为真,输出全1,即FFH(8位)或 由于表达式12H GE 12 为真所以汇编成: 由于表达式6 EQ 0110B为真所以汇编成: FFFFH(16位)。若结果为假,输出全0。 由于表达式10H GT CX,0FFFFH 16为假所以汇编成: MOV BL,0FFH MOV CX,1 AX,0 注意: MOV BL,1 × ×
4-2 汇编语言中的表达式
表达式由运算对象和运算符组成,在汇编时由 汇编程序对它进行运算,运算结果作为一个语句中 的操作数来使用。 ※运算对象:常数、标号或变量
※运算符:
①算术运算符 ②逻辑运算符 ③关系运算符 ④数值返回运算符 ⑤修改属性运算符 ⑥其它运算符
一、算术运算符 有:+、-、*、/、MOD(模,即取除法运算结 果之余数)、SHL(左移,左移1位相当于乘2)、 SHR(右移,右移1位相当于除以2)。 例4-2 数组ARRAY的定义如下: 所有的算术运算符均可以对数据进行运算,运 ARRAY DB 1,2,3,4,5,6,7,8 算对象与运算结果都是整数。若对地址运算,通常 TRY DB 20 两变量偏移地址之差 是在标号上加/减某一个值,例DA1+2、K2-4各表示 指令为: 一个存储单元的地址,对地址乘是没有意义的。 MOV AX,30*5 MOV CX,(TRY-ARRAY);数组长度→CX 汇编时,计算表达式形成指令为: MOV AX,150 MOV CX,8
第四章宏汇编语言程序设计

*.ASM
*.Oห้องสมุดไป่ตู้J
(3)链接得到可执行文件(解决定位错误,link.exe) *.EXE (4)调试得到功能正确的应用软件(解决逻辑错误) (以上第2~4步任何一步有错都应返回到第1步重来)
2.宏汇编源程序 汇编源程序组成 “指令”和 “伪指令”共同构成。 “指令”由8086CPU规定的;
“伪指令”说明与硬件有关的信息;
MOV DS,AX LEA SI,D1
; DS初始化为DATA
指令
;预置源数据的指针
微机原理与接口技术
MOV CX,CC+1
LODS BYTE PTR [SI] DEC CX
;预置次数
;取一个数并修改指针 ;修改次数
MOV AH,0
CLC AGAN:ADC SUM,AX LODS BYTE PTR [SI] LOOP AGAN MOV AH,4CH INT 21H CODE ENDS END BEGIN
•
1.汇编语言程序设计的特点
计算机语言优化
•
机器语言
时间,空间均优化;只有计算机才懂 • 汇编语言 时间,空间均优化;但源程序复杂 • 高级语言 时间,空间均较差;但源程序简单
1.汇编语言程序设计的特点
从计算机语言到计算机机器码
•
机器语言
直译 汇编程序 编译程序 解释程序
•
汇编语言
高级语言
机器码
• 偏移量属性
汇编后,AG 对应确定的 IP 值
• 类型属性
若标号在段内为 NEAR 类型、在段间为 FAR 类型
微机原理与接口技术
标识符
段名的属性 段基址
过程名的属性
过程的入口地址
四章汇编语言程序设计ppt课件

指令助记符:MOV,ADD,…. 指示性(伪指令)操作符:DB,DW,SEGMENT,
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
ENDS,ASSUME,END ,…. 保留字:SEGMENT ENDS OFFSET SIZE DB
DW DD MOV PUSH ADD SUB MUL DIV INC DEC LOOP PROC ENDP CALL RET END
类别名
CODE、DATA、STACK(同名同类别段连续存放)
第4章 汇编语言程序设计
伪操作命令之三:段定义伪指令
段寄存器说明伪指令ASSUME
ASSUME 段寄存器名:段名[段寄存器名:段名[…..]]
例:
CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
MAIN:
……
CODE ENDS ENDS MAIN
;指定第一条要执行的指令标号
注:1、该伪指令用于明确用SEGMENT定义的段的类型, 使编译程序能生成目标代码程序。
2、在源程序中,该伪操作放在可执行程序的前面。 3、该指令没有给段寄存器赋予实际的初值。这项工作要通
过写指令来完成,其中代码段不需要赋值。
+、-、*、/、MOD、SHL、SHR 都可应用于数字运算。 +、- 可以用于表示存储器操作数的地址,或两个存储器
单元(同一段内)的地址偏移量之差。 例:SUM - 2
CYCLE - GO
第4章 汇编语言程序设计
运算符之二:逻辑运算符
AND、OR、XOR、NOT 按位的逻辑运算 例:IN AL,PORT_VAL
DATA2 DB 0C1H,36H,9EH,0D5H,20H;加数
DATA ENDS;数据段结束
CODE SEGMENT;定义代码段
第4章 宏汇编语言

(4)分析运算符 分析运算符有SEG、 OFFSET、TYPE、LENGTH和 SIZE。分析运算符可以把一个存储单元的地址分解为 相应的段地址和偏移量。 ①SEG运算符
格式:SEG段名
功能:计算某个逻辑段的段基址。
②OFFSET运算符
格式:OFFSET变量名或标号名
功能:算出变量名(或标号名)的地址偏移量。
2.变量、变量定义伪指令
1)变量和标号 变量代表内存操作数的存储地址,或者说变量名 就代表某个存储单元。标号代表指令地址,它为 转移指令提供了转移目标。由于标号和变量是用 一串字符命名的,从这个意义上讲,标号和变量 又称为符号地址。标号和变量的命名规则是:以 字母或者下划线开头,后跟字母、数字、下划线, 长度不超过31个字符,并且系统中保留字不能作 为标号和变量名。保留字是系统中已经专用的有 特殊意义的名字,例如,指令的操作码助记符、 运算符、寄存器名称、伪指令助记符等等。
标号被定义在代码段,变量通常被定义在数据 段、附加段或堆栈段。 标号和变量都有共同的3个属性。即: a.段属性。即标号或变量所在段的段基址,用 SEG运算符可以计算得到。 b.偏移属性。即标号或变量所代表的存储单元, 相对于段首址之间的地址偏移量(又称有效地 址),用OFFSET运算符可以计算得到。
⑤ SIZE运算符 格式:SIZE 变量名
功能:计算一个存储区域所占用的字节数。
(5)综合运算符
ASM中,综合运算符有PTR和THIS。
THIS综合运算符的功能是改变存储区的类型,THIS 运算符也被称为类型指定运算符。THIS运算符的运 算对象是数据类型(BYTE、WORD、DWORD)或 者距离类型(NEAR、FAR),用于规定所指变量或 者标号类型属性或者距离属性。
第4章-汇编语言程序设计

第4章 汇编语言程序设计
*
目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss
.data
.text
RAM
E2PROM
ROM
第4章 汇编语言程序设计
*
3. 段定义伪指令
汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分:
;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;0123h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令
;初始化数据段 ;3组数据放入.data段
第4章 汇编语言程序设计
*
汇编语言源程序:
链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。
第4章 汇编语言程序设计
*
4.2.1分段结构 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
第4章 汇编语言程序设计
*
C源文件
C编译器
汇编 源文件
汇编器
汇编 源文件
COFF 目标文件
链接器
可执行的 COFF文件
宏源文件
存档器
宏库
存档器
目标 文件库
建库工具
运行时 支持库
EPROM 编程器
交叉引用 列表器
调试工具
绝对地址 列表器
*
目标文件中的段与目标存储器之间的关系:
目标文件
目标存储器
.bss
.data
.text
RAM
E2PROM
ROM
第4章 汇编语言程序设计
*
3. 段定义伪指令
汇编器对段的处理是通过段伪指令来区别各个段的,并将段名相同的语句汇编在一起。 汇编器有5条伪指令可识别汇编语言程序的各个部分:
;初始化数据段 ;3组数据放入.data段 ;在.bss段保留10个单元 ;0123h放入.data段 ;初始化文本段 ;1字指令 ;2字指令 ;2字指令
;初始化数据段 ;3组数据放入.data段
第4章 汇编语言程序设计
*
汇编语言源程序:
链接器能够读/写所有类型的COFF文件,默认时链接器生成的是COFF2文件,采用-vn链接选项可以选择不同类型的COFF文件。
第4章 汇编语言程序设计
*
4.2.1分段结构 所谓“段”就是在存储器映像中占据连续空间的一段独立的代码或数据。每个目标文件都分成若干段。
COFF目标文件包含以下三个默认的段: .text 段:通常内含可执行代码; .data段:通常内含已初始化数据; .bss段:是为没有初始化的数据保留空间的。
第4章 汇编语言程序设计
*
C源文件
C编译器
汇编 源文件
汇编器
汇编 源文件
COFF 目标文件
链接器
可执行的 COFF文件
宏源文件
存档器
宏库
存档器
目标 文件库
建库工具
运行时 支持库
EPROM 编程器
交叉引用 列表器
调试工具
绝对地址 列表器
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个例子程序
Page 124,例4-1 程序由段的描述组成 指令语句/伪指令语句构成
§4-1 汇编语言程序格式
指令性语句 伪指令语句 数据项
汇编语言程序格式——指令语句
对象
CPU 与机器码相对应,要求CPU执行的操作
格式
[标号:] 指令助记符 [[操作数],操作数][ ;注释]
EQ、NE、LT、GT、LE、GE 对象
数据 同段内的偏移地址
结果
真:全1 假:全0
表达式——关系运算
例:
abc
equ 10h
mov ax,abc eq 10 mov ax,abc lt 10 mov ax,abc gt 10
表达式——数值返回运算
Offset、seg、type、length、size 对象
汇编语言程序格式——伪指令语句
对象
汇编程序 通知编译器,如何生成目标码。本身不产生
机器目标吗
格式
[名字] 伪指令助记符 [[操作数],操作数...][ ;注释]
汇编语言程序格式——数据项
常数
确定的数据,有固定值,没有属性
变量
存放在存储单元中的值 在程序中以变量名的形式出现,代表存放数
据的存储单元的符号地址 三属性
段属性/段内偏移量属性/类型属性
汇编语言程序格式——数据项
标号
可执行指令语句的首字节地址的符号表示 被JMP/CALL/LOOP等所使用 三属性
段属性/段内偏移量属性/类型(距离)属性
§4-2 MASM中的表达式
指令操作数形式
常数、变量、标号、表达式、关键字
…… 段名 ends
定义组合类型 NONE PUBLIC COMMON AT STACK
伪指令语句——段定义
段名 segment 定位类型 组合类型 ‘分类名’ ……
段名 ends
定义该段的分类名,分 类名相同,被组合成同 一个段
伪指令语句——数据定义
dseg segment at 0055h one db 0 two dw two three dd two four equ 10h five dw four six db 5 - four
§4-3 伪指令语句
不生成机器码,帮助解释、生成指令的 机器码
变量定义、存储器分配、段定义……
伪指令语句——数据定义
定义/分配变量的存储器单元,并初始化 存储器单元
格式
变量名 助记符 操作数,操作数… ;注释
DB
符号地址
DW
DD
伪指令语句——数据定义
DUP的使用
定义重复数据 例 abc db 10 dup(0)ቤተ መጻሕፍቲ ባይዱab db 100 dup(1,2,34 dup(0))
变量、标号
结果
值
表达式——数值返回运算
Offset
变量、标号的段内偏移地址 与 LEA 的差异???
Seg
变量、标号的段地址
表达式——数值返回运算
Type
变量、标号的类型属性
Length
外层DUP的单元个数 无DUP则返回1
表达式——数值返回运算
Size
size = length * type
dseg ends
伪指令语句——段分配语句
ASSUME
说明当前段是哪些段,帮助汇编程序产生段前缀 必须放在第一句指令之前 不得短缺
Assume cs:cseg,ds:dseg,ss:sseg,es:eseg
Assume nothing
伪指令语句——过程定义
子程序 格式
过程名 PROC …… Ret
表达式——属性修改运算
Ptr
临时改变变量、标号的类型属性 mov word ptr [bx],0 jmp far ptr sub1
This
给变量、标号赋予类型 first equ this byte table dw 2000h
表达式——属性修改运算
High/Low
字节分离 常数、常数表达式 mov al,low (offset da1)
段名 segment 定位类型 组合类型 ‘分类名’ ……
段名 ends
伪指令语句——段定义
段名 segment 定位类型 组合类型 ‘分类名’
…… 段名 ends
定义该段起始地址定 位 Para Byte Word Page
伪指令语句——段定义
段名 segment 定位类型 组合类型 ‘分类名’
表达式——逻辑运算
与、或、非、异或——按位运算 运算对象、结果
常数
禁忌
变量名
表达式——逻辑运算
例:
abc abc1 v1 mov mov mov
= 10h equ 2ah db 3ah ax,abc and 0fh ax,abc or abc1 ax,v1 and abc
表达式——关系运算
第四章 宏汇编语言程序设计
本章内容
汇编语言程序格式 MASM中的表达式 伪指令语句 DOS系统功能调用 BIOS中断调用
概述
汇编语言
利用指令的助记符、符号地址、标号来编 写的语句
汇编语言源原程序
用汇编语言编写的程序
可
源 程 序
汇 编 语 言
目
汇编程序
标
程
序
连接程序
执 行 程 序
过程名 ENDP
属性
伪指令语句——END
结束语句 标识程序的首指令 格式
END 标号
伪指令语句——段寄存器的初始化
DS/ES
指令装入 mov ax,dseg mov ds,ax mov ax,eseg mov es,ax
伪指令语句——段寄存器的初始化
表达式的构成
运算符 运算对象:常数、变量、标号 结果为常数、地址
在汇编时求值 六大类运算
表达式——算术运算
加、减、乘、除、模、左移、右移 运算对象、结果
整数
禁忌
地址相加 无法求值
表达式——算术运算
例:
abc var1 var2 mov mov mov mov
equ 35h db 10h db 0ah ax,abc shr 4 ax,abc shl 4 cx,var2 - var1 bx,abc - 5
伪指令语句——数据定义
字符串的定义 DB/DW/DD?
DB按正常的顺序排列 DW/DD只能以两个一组作定义,顺序不同
伪指令语句——数据定义
符号地址的使用 DW? DD? DB??
伪指令语句——赋值
不分配存储器空间 常数 EQU
不可重复赋值
=
可重复赋值
伪指令语句——段定义