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

code segment …
添加标题
注意:默认是8086 方式。
数据与符号定义伪指令
定义符号伪指令
包括EQU, =, LABEL,它们只用来定义名字,不分配存储空间.
格式: 名字 EQU 表达式
名字 =
表达式
注意 (1)EQU的表达式可以是常量,变量名,标号,指令助记符,寄存器名;而=的表 达式只能是数字表达式,主要用来定义符号常量. 同一个源程序,EQU符号名不能重复定义,=则可以. 同一个源程序中同一符号名,不能同时用EQU和=语句定义.
NOT; AND ; OR,XOR; SHORT
从高到低排列:
4.2 汇编伪指令语句
添加标题
方式伪指令
添加标题
code ends
添加标题
包 括:.8086, .386, . 386P等,用来指定 CPU的类型.
添加标题
例如: .386
添加标题
.8086
添加标题
code segment …
添加标题
○ COUNT =60*60 ○ MOV ECX, COUNT ; COUNT=3600 ECX
算法运算符共7种: +, -, *, /, MOD, SHR, SHL
○ 对于语句:MOV AL,2
可用下列语句替换:
VAL EQU 5
MOV AL, VAL SHL 1 ; VAL=5=00000101B 逻辑右移1 位为:00000010B=2
地址表达式
地址表达式形成的结果是存储器的地址,用来表标指令中的标号或变量操作数,有 3个属性:段地址,EA和类型。
而数值表达式的结果只有大小没有属性。 地址表达式可由变量、标号、常量、寄存器及一些运算符组成。
添加标题
注意:默认是8086 方式。
数据与符号定义伪指令
定义符号伪指令
包括EQU, =, LABEL,它们只用来定义名字,不分配存储空间.
格式: 名字 EQU 表达式
名字 =
表达式
注意 (1)EQU的表达式可以是常量,变量名,标号,指令助记符,寄存器名;而=的表 达式只能是数字表达式,主要用来定义符号常量. 同一个源程序,EQU符号名不能重复定义,=则可以. 同一个源程序中同一符号名,不能同时用EQU和=语句定义.
NOT; AND ; OR,XOR; SHORT
从高到低排列:
4.2 汇编伪指令语句
添加标题
方式伪指令
添加标题
code ends
添加标题
包 括:.8086, .386, . 386P等,用来指定 CPU的类型.
添加标题
例如: .386
添加标题
.8086
添加标题
code segment …
添加标题
○ COUNT =60*60 ○ MOV ECX, COUNT ; COUNT=3600 ECX
算法运算符共7种: +, -, *, /, MOD, SHR, SHL
○ 对于语句:MOV AL,2
可用下列语句替换:
VAL EQU 5
MOV AL, VAL SHL 1 ; VAL=5=00000101B 逻辑右移1 位为:00000010B=2
地址表达式
地址表达式形成的结果是存储器的地址,用来表标指令中的标号或变量操作数,有 3个属性:段地址,EA和类型。
而数值表达式的结果只有大小没有属性。 地址表达式可由变量、标号、常量、寄存器及一些运算符组成。
汇编第4章

4.2 伪操作 由于ASSUME伪操作只是指定某个段分配给哪一个段寄 存器,它并不能把段地址装入段寄存器中,所以在代码 段中,还必须把段地址装入相应的段寄存器中。代码段 不需要这样做。代码段的这一操作是在程序初始化时完 成的。 为了对段定义作进一步地控制,SEGMENT伪操作还可 以增加类型及属性的说明,其格式如下:
4.2 伪操作 4.2.3 程序开始和结束伪操作 表示源程序结束的伪操作的格式为: END [label] 其中标号(label)指示程序开始执行的起始地址。如果多个 (label) 程序模块相连接,则只有主程序要使用标号,其他子程 序模块则只用END而不必指定标号。 MASM6.0版增加了定义程序的入口点和出口点的伪操作。 .STARTUP 用来定义程序的初始入口点,并且产生设置 DS,SS和SP的代码。如果程序使用了.STARTUP,则结 束程序的END伪操作中不必再指定程序的入口点标号。
4.2 伪操作 (2)组合类型(combine_type)说明程序连接时的段合并方法, 它们可以是: PRIVATE 该段为私有段,在连接时将不与其他模块中 的同名分段合并。 PUBLIC 该段连接时可以把不同模块中的同名段相连接 而形成一个段,其连接次序由连接命令指定。每一分段 都从小段的边界开始,因此各模块的原有段之间可能存 在小于16字节的间隙。 COMMON 该段在连接时可以把不同模块中的同名段重 叠而形成一个段,由于各同名分段有相同的起始地址, 所以会产生覆盖。COMMON的连接长度是各分段中的最 大长度。重叠部分的内容取决于排列在最后一段的内容。
4.2 伪操作 (2)简化的段定义伪操作 汇编程序给出的标准段有下列几种: Code Initialized data Uninitialized data Far initialized data Far uninitialized data Constants Stack 代码段 初始化数据段 未初始化数据段 远初始化数据段 远未初始化数据段 常数段 堆栈段
汇编语言第四章程序流程控制语句及程序设计PPT课件

•第4章 程序设计方法
4.3.2 常用的DOS系统功能调用
1.单字符输入(1号调用) 2.单字符显示(2号调用) 3.打印输出(5号调用) 4.结束调用(4CH号调用) 5.显示字符串(9号调用) 6.字符串输入(10号调用)
•第4章 程序设计方法
1.单字符输入(1号调用) 格式:MOV AH,1
SEGMENT STACK
DB 200 DUP(0)
STACK
ENDS
CODE
SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START: MOV AX,DATA
MOV DS,AX
•第4章 程序设计方法
LEA MOV INT LEA MOV
INT LEA MOV MOV ADD LEA
2.流程图符号表示
(1)起止框:表示程序 的开始和结束。
•起止框
•第4章 程序设计方法
(2)判断框 (3)处理框 (4)调用框
•第4章 程序设计方法
(5)指向线 (6)连接框
•第4章 程序设计方法
4.2 顺序程序设计
下面举例说明顺序程序的设计。 【例】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中,
5.显示字符串(9号调用)
格式:LEA DX,待显示字符串首偏移地址
MOV AH,9
INT
21H
功能:将当前数据区中以‘$’结尾的字符串送显示器显示。
6.字符串输入(10号调用)
格式:LEA DX,缓冲区首偏移地址
MOV AH,10
INT 21H
汇编语言 第四章 汇编语言

4.1.4 特殊运算符
1.属性替换运算符
(3)短取代运算符SHORT 告诉汇编程序,目标标号在本条指令的 -128~+127 个字节的范 围内,生成节省一个字节的机器指令。一般情况下可以不用。 例如: JMP SHORT NEXTBRACH … NEXTBRACH: MOV EAX,ECX
4.1.4 特殊运算符
4.1.4 特殊运算符
1.属性替换运算符
(2)段地址取代运算符“:” 又称为段地址运算或者跨段前缀。用于临时给定变量,标号或 者地址表达式指定一个段属性,地址表达式EA和类型保持不变。在 指令中替代默认的段以形成物理地址。 例如: MOV DX,ES:[BX + DI];EA = BX +DI,PA =ES ;*16 + EA,临时替换默认的DS
4.1.4 特殊运算符
2.属性分离运算符
TYPE运算符 格式:TYPE 变量或标号 功能:分离出其后变量或标号的类型。如果是变量,将返回该变 量的类型对应字节数;如果是标号,则返回代表标号类型的数值。 MOV CL,TYPE ARRAYW ;若变量ARRAYW为字类型,则CL=2
4.1.4 特殊运算符
(1)LENGTH运算符 功能:当变量由数据定义伪指令定义,并且表达式带有一个DUP项 时,LENGTH取DUP项前面的重复系数;如果表达式有多个DUP项 嵌套时,仍然取第一个DUP项前的数字,LENGTH变量的取值为1. DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 4,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX
汇编 第四章伪指令及汇编语言源程序结构

MOV AL, BUF1
ADD AL, BUF2 MOV SUM, AL
;取第一个加数
;两数加 ;和放入SUM单元
3
伪指令(指 示性)语句: 提供相关辅 助信息。
指令性语句: 完成一定功 能,能翻译 成机器码。
伪指令语句
DATA SEGMENT ;DATA段定义开始 BUF1 DB 34H BUF2 DB 27H SUM DB ? DATA ENDS ;DATA段定义结束 CODE SEGMENT ;CODE段定义开始 ASSUME CS:CODE ASSUME DS:DATA ;段性质规定 START: MOV AX,DATA MOV DS,AX ;给DS赋值 MOV AL, BUF1 ;取第一个加数 ADD AL, BUF2 ;两数加 MOV SUM, AL ;和放入SUM单元 MOV AH,4CH INT 21H ;返回DOS CODE ENDS ;CODE段定义结束 END START ;源程序结束
14
二、= 等号伪指令
格式:符号名 = 表达式 功能:为常量、表达式及其他各种符号定义一个等价的符号 名,并能对所定义的符号多次重复定义,且以最后一次定义 的值为准。 例:COST = 20 M = MOV LOST = COST+10 ;30→LOST M = ADD ;M=ADD 注 : “ = ” 伪 指 令 的 格 式 和 功 能 与 EQU 类 似 。 二者区别:在同一程序中,“=”可以对一个符号重 复定义,EQU不能对同一符号重复定义。
26
三、变量、标号的分析运算和合成运算
例:DATA SEGMENT A DB ‘ABCDEF’ B DW 10 DUP(1,2DUP(2)) C DB 3,20 DUP(0) DATA ENDS ┆ MOV AX,LENGTH A ;1→AX MOV BX,LENGTH B ;10→BX MOV CX,LENGTH C ;1→CX ┆
汇编语言第4章

• 输入要编译的源文件文件名后,按 Enter键。 • 目标文件(*.obj)是我们对一个源程序进 行编译要得到的最终结果(二进制文件)。 • 编译程序默认要输出的目标文件名为1.obj, 所以可以不必再另行指定文件名。
• 列表文件是编译器将源程序编译为目 标文件的过程中产生的中间结果。 • 可以不生成这个文件,直接按 Enter键 即可。
• 输入要编译的源文件文件名后,按 Enter键。 • 目标文件(*.obj)是我们对一个源程序进 行编译要得到的最终结果(二进制文件)。 • 编译程序默认要输出的目标文件名为1.obj, 所以可以不必再另行指定文件名。
• 列表文件是编译器将源程序编译为目 标文件的过程中产生的中间结果。 • 可以不生成这个文件,直接按 Enter键 即可。
汇编程序功能 汇编语言程序的上机过程 伪操作 汇编语言程序格式
现在我们将开始编写完整的汇编语言 程序,用编译器将它们编译成为可执 行文件(如:*.exe文件),在操作系 统中运行。 这一章,我们将编写第一个这样的程序。
汇编语言程序的建立及执行过程
编辑程序
. ASM 文件
汇编程序
. OBJ 文件
汇编语言程序的上机过程 1、 编辑源程序 • 进入DOS方式,运行Edit,在其中编辑程序,如下图所示:
2、编译
• 进入DOS方式,进入 C:\masm 目录,运行 masm.exe。 • 如果源程序文件不是以 asm 为扩展名的 话,就要输入它的全名。比如p1.txt。 • 在输入源程序文件名的时候一定要指明它 所在的路径。如果文件就在当前路径下, 只输入文件名就可以。
• 映像文件是连接程序将目标文件连接为可 执行文件过程中产生的中间结果。 • 可以不生成这个文件,直接按 Enter 键即 可。
第四章 汇编语言程

J X G
微机原理及应用
第四章 汇编语言程序设计
在这一章中将介绍汇编语言的语句分类(指令语句、 在这一章中将介绍汇编语言的语句分类(指令语句、 伪指令语句和宏指令语句),汇编语言源程序的结构, ),汇编语言源程序的结构 伪指令语句和宏指令语句),汇编语言源程序的结构, 汇编语言程序设计。并能进行简单的程序设计。 汇编语言程序设计。并能进行简单的程序设计。
微机原理及应用 4.2 8086/8088汇编语言 8086/8088汇编语言
如果变量A1在它段内的偏移量为0100H, 如果变量A1在它段内的偏移量为0100H,则 A1在它段内的偏移量为0100H MOV MOV BX, BX,OFFSET BX, BX, 0100H A1等价于 A1等价于
J X G
J X G
J X G
微机原理及应用 4.1 程序设计语言概述
汇编语言是用指令的助记符、符号地址、 汇编语言是用指令的助记符、符号地址、标号等来表 示指令的程序语言。 示指令的程序语言。用汇编语言编写的程序称为汇编语 言源程序。 言源程序。把汇编语言源程序翻译成机器语言的目标程 序的过程称为汇编, 序的过程称为汇编,完成这个翻译任务的程序称为汇编 程序。 程序。 以上两种都是低级语言。 以上两种都是低级语言。尽管汇编语言具有执行速度 快和易于实现对硬件的控制等优点, 快和易于实现对硬件的控制等优点,但它仍然存在着机 器语言的某些缺点: CPU的硬件结构紧密相关 的硬件结构紧密相关, 器语言的某些缺点:①与CPU的硬件结构紧密相关,移植 性差; 要用汇编语言进行程序设计, 性差;②要用汇编语言进行程序设计,必须了解所使用 的CPU硬件的结构和功能。 CPU硬件的结构和功能。 硬件的结构和功能
4.2
J X G
微机原理及应用
第四章 汇编语言程序设计
在这一章中将介绍汇编语言的语句分类(指令语句、 在这一章中将介绍汇编语言的语句分类(指令语句、 伪指令语句和宏指令语句),汇编语言源程序的结构, ),汇编语言源程序的结构 伪指令语句和宏指令语句),汇编语言源程序的结构, 汇编语言程序设计。并能进行简单的程序设计。 汇编语言程序设计。并能进行简单的程序设计。
微机原理及应用 4.2 8086/8088汇编语言 8086/8088汇编语言
如果变量A1在它段内的偏移量为0100H, 如果变量A1在它段内的偏移量为0100H,则 A1在它段内的偏移量为0100H MOV MOV BX, BX,OFFSET BX, BX, 0100H A1等价于 A1等价于
J X G
J X G
J X G
微机原理及应用 4.1 程序设计语言概述
汇编语言是用指令的助记符、符号地址、 汇编语言是用指令的助记符、符号地址、标号等来表 示指令的程序语言。 示指令的程序语言。用汇编语言编写的程序称为汇编语 言源程序。 言源程序。把汇编语言源程序翻译成机器语言的目标程 序的过程称为汇编, 序的过程称为汇编,完成这个翻译任务的程序称为汇编 程序。 程序。 以上两种都是低级语言。 以上两种都是低级语言。尽管汇编语言具有执行速度 快和易于实现对硬件的控制等优点, 快和易于实现对硬件的控制等优点,但它仍然存在着机 器语言的某些缺点: CPU的硬件结构紧密相关 的硬件结构紧密相关, 器语言的某些缺点:①与CPU的硬件结构紧密相关,移植 性差; 要用汇编语言进行程序设计, 性差;②要用汇编语言进行程序设计,必须了解所使用 的CPU硬件的结构和功能。 CPU硬件的结构和功能。 硬件的结构和功能
4.2
J X G
汇编语言第4章PPT课件

3
2. 汇编语言程序设计与执行过程
输入汇编语言源程序(EDIT) 汇编(MASM) 链接(LINK) 调试(TD)
源文件 . ASM 目标文件 .OBJ 可执行文件.EXE 最终程序
4
3. 汇编语言源程序结构
由多个逻辑段组成,包含: 代码段:存放源程序的所有
数据段名 SEGMENT …
数据段名 ENDS
26
一、数据定义伪指令
用途:定义变量类型,给存储器赋初值,或仅给变量分配存储单 元,而不赋予特定的值。
格式: [变量名] DB 操作数;定义字节 [变量名] DW 操作数;定义字 [变量名] DD 操作数;定义双字 [变量名] DQ 操作数;定义8个字节 [变量名] DT 操作数;定义10个字节
操作数——是赋给变量的初始值,可以有一个,也可以有多个, 但不能超出数据类型范围。操作数可以是数值、字 符串、?、或者DUP。
CLC
;CF=0
LPER:MOV AL,DATA2[SI]
ADC DATA1[SI],AL
INC SI
DEC CX
JNZ LPER
MOV AH,4CH
INT 21H
;返回DOS
CODE ENDS
END START
7
二、汇编语言语句类型及格式
1. 汇编语言语句分类
指令性语句
CPU执行的语句, 能够生成目标代码
段 值 变量所在段的段地址 偏移量 变量单元地址与段首地址之
间的位移量。 类 型 字节型、字型和双字型
14
3)表达式
组成:操作数:常量、寄存器名字、存储器操作数 运算符:
算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
15
2. 汇编语言程序设计与执行过程
输入汇编语言源程序(EDIT) 汇编(MASM) 链接(LINK) 调试(TD)
源文件 . ASM 目标文件 .OBJ 可执行文件.EXE 最终程序
4
3. 汇编语言源程序结构
由多个逻辑段组成,包含: 代码段:存放源程序的所有
数据段名 SEGMENT …
数据段名 ENDS
26
一、数据定义伪指令
用途:定义变量类型,给存储器赋初值,或仅给变量分配存储单 元,而不赋予特定的值。
格式: [变量名] DB 操作数;定义字节 [变量名] DW 操作数;定义字 [变量名] DD 操作数;定义双字 [变量名] DQ 操作数;定义8个字节 [变量名] DT 操作数;定义10个字节
操作数——是赋给变量的初始值,可以有一个,也可以有多个, 但不能超出数据类型范围。操作数可以是数值、字 符串、?、或者DUP。
CLC
;CF=0
LPER:MOV AL,DATA2[SI]
ADC DATA1[SI],AL
INC SI
DEC CX
JNZ LPER
MOV AH,4CH
INT 21H
;返回DOS
CODE ENDS
END START
7
二、汇编语言语句类型及格式
1. 汇编语言语句分类
指令性语句
CPU执行的语句, 能够生成目标代码
段 值 变量所在段的段地址 偏移量 变量单元地址与段首地址之
间的位移量。 类 型 字节型、字型和双字型
14
3)表达式
组成:操作数:常量、寄存器名字、存储器操作数 运算符:
算术运算 逻辑运算 关系运算 取值运算和属性运算 其它运算
15
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2012-8-12 24
4.3 汇编语言程序格式
3.关系运算符 1) 运算符包括EQ、NE、LT、GT、LE、GE。 2)运算结果为一个数字值。关系成立结果为0FFFFH,结 果不成立结果为0。 例:MOV AX,1234H GT 1024H MOV BX,0LT0 相当于 MOV AX,0FFFFH MOV BX,0
2012-8-12 17
4.2 伪指令
六、过程定义伪指令 可以把具有独立功能的程序段定义为过程 (相当于高级语言中的子程序),供其它程序 调用。 过程定义的语法格式为: <过程名> PROC [NEAR]/FAR ┆ RET <过程名> ENDP
2012-8-12 18
4.3 汇编语言程序格式
语句的种类和格式 表达式的表示
2012-8-12 12
4.2 伪指令
7)定义其他类型数据项DQ,DT DQ定义8字节数据项 DT定义10字节数据项 2.重复操作符DUP 格式:count DUP (表达式[,表达式…]) 1)可以用来定义数组,定义数据缓冲区; 2)count是重复次数; 3)允许嵌套; 例:BUF DB 3 DUP(0);BUF DB 0,0,0 例:BUF1 DB 3,2,5 DUP(1,2,2 DUP(0))
2012-8-12
7
4.2 伪指令
3.SEGMENT伪操作可增加说明 格式:段名 SEGMENT [定位类型][组合类型][使用类 型][类别] …….. 段名 ENDS 1)当需要连接程序把本程序与其他程序模块连接时,需 要使用这些说明。 2)定位类型:说明段的起始地址应有怎样的边界值。 3)组合类型:说明程序连接时的段合并方法。 4)使用类型:说明是16位或32位寻址方式。 5)类别:在引号中给出连接时组成段组的类别。
2012-8-12
23
4.3 汇编语言程序格式
三、操作数项 操作数项可以是由标号,变量,常数和表达式组成. 1.常数 1)十进制、十六进制、二进制、八进制数 D、H、B、Q 2)字符串常数 用引号括起来的一个或多个字符,只是包括在引号中的字 符的ASCII代码值。 例:‘A’的值是41H,’ab’的值是6162H 2.算术运算符 有+、-、*、/、MOD(模)、+(正)、-(负),意义和高 级语言中同样运算符的意义相似。 例:ADD AX,-3*3+32H/5
伪操作:又称伪指令,在程序运行期间不被执行, 只是在汇编程序对源程序汇编期间由汇编程序 处理的操作,他们可以完成如定义程序模式、 定义数据、分配存储区、指示程序结束等功能。
2012-8-12
4
4.2 伪指令
一.段定义伪操作 1.段开始和结束语句 格式:段名 SEGMENT …….. 段名 ENDS 1)段开始语句中的段名与结束语句中的段名要相同; 2)删节号部分,对于数据段、附加段和堆栈段来说, 一般是存储单元的定义、分配等伪指令,对于代 码段是指令及伪指令。
2012-8-12 5
4.2 伪指令
2.段使用设定语句 格式:ASSUME 段寄存器名:段名[,段寄存器名: 段名..] 1)ASSUME语句说明段寄存器与程序段的对应关系; 2)段名必须是由SEGMENT定义的段中的段名。 3)ASSUME语句是伪指令语句,它不能把段地址装 入段寄存器,在代码段中还需要通过指令语句 来给段寄存器赋值.但代码段不需要这么做。 4) ASSUME NOTHING,可取消前面由ASSUME所指定 的段寄存器。
2012-8-12 10
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 3)定义字数据项DW 每一字数据项占用两个字节存储单元 例:FLAG DW 2FCDH,1024,-1 VECT DW 0 DW 2047 4)定义双字数据项DD 每一双字数据项要占用四个字节存储单元 例:VECTOR DD 4 FARPTR DD 12345678H,0
2012-8-12 29
例:有如下数据段定义: VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678H BUFF DB 10 DUP(?) MESS DB ‘HELLO’ 设:变量VARW的逻辑地址为2000H:0100H 1)SEG VARW=2000H 2)OFFSET VARW=0100H,OFFSET VARB=0104H 3)TYPE VARW=2,TYPE VARB=1 TYPE VARD=4 4)LENGTH VARW=1,LENGTH BUFF=10 LENGTH MESS=1 5)SIZE VARW=2,SIZE BUFF=10,SIZE MESS=1
2012-8-12 13
DATAB 例: DATAB DB 18H,-1,30 DATAW DATAW DW 18H,2A45H DATAD DD 18H,2F3A124BH DATAD 在内存中的存储情况如图所示。
18 FF 1E 18 00 45 2A 18 00 00 00 4B 12 3A 2F
2012-8-12
8
4.2 伪指令
二、程序结束伪操作 格式:END [标号] 1)告诉汇编程序源程序到此为止,不再对其后的 任何语句进行汇编; 2)标号是一个已在程序中定义过的标号,表示程 序要从标号所对应的指令开始执行; 3)源程序必须有一个END语句.
2012-8-12
9
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 1)格式:[变量名] 数据定义符 表达式[,表达式…] ; 注释 变量名代表该语句所定义若干数据项中的第一个数据 项. 变量名和注释都可缺省。 2)定义字节数据项DB 每一字节数据项占用一个字节存储单元 例:COUNT DB 100 DB 0DH,0AH,’$’ TABLE DB 0,2,3
2012-8-12 20
该程序的功能是完成两个字节数据相加。 DATA SEGMENT ;段定义开始(DATA段) BUF1 DB 34H ;第1个加数 BUF2 DB 2AH ;第2个加数 SUM DB ? ;准备用来存放和数的单元 伪指令语句 DATA ENDS ;段定义结束(DATA段) CODE SEGMENT ;段定义开始(CODE段) ASSUME CS:CODE,DS:DATA ;规定DATA、CODE分别为数据段和代码段 START: MOV AX,DATA MOV DS,AX ;给数据段寄存器DS赋值 MOV AL,BUF1 ;取第1个加数 ADD AL,BUF2 ;和第2个加数相加 指令语句 MOV SUM,AL ;存放结果 MOV AH,4CH ; INT 21H ;返回DOS状态 CODE ENDS ;段定义结束(CODE段) END START ;整个源程序结束
2012-8-12
26
4.3 汇编语言程序格式
5.HIGH和LOW运算符 1)HIGH 表达式:数值表达式的高8位 2)LOW 表达式:数值表达式的低8位 例: MOV AX,HIGH 1234H MOV AX,LOW (1234H+5) 相当于 MOV AX,12H MOV AX,39H
2012-8-12
2012-8-12
25
4.3 汇编语言程序格式
4.逻辑运算符 1)运算符包括AND(与)、OR(或)、XOR(异或)、 NOT(非)、SHL(左移位)、SHR(右移位) 2)运算结果是数值。 例:MOV AX,1 SHL 3 MOV CX,3 AND 47H 相当于 MOV AX,8 MOV CX,3
2012-8-12 6
例1: DSEG1 DSEG1 DSEG2 DSEG2 CSEG
START:
CSEG
SEGMENT …….. ENDS SEGMENT …… ENDS SEGMENT ASSUME CS:CSEG,DS:DSEG1,SS:SSEG2 MOV AX,DSEG1 MOV DS,AX MOV AX,DSEG2 MOV SS,AX ……. ENDS END START
2012-8-12 22
4.3 汇编语言程序格式
二、变量和标号 1、变量和标号代表存储单元的符号地址。 2、变量表示的存储单元中存放数值,在除代码段以外的其 他段中定义,后面不跟冒号,经常出现在操作数字段。 3、标号表示的存储单元中存放指令代码,在代码段中定义, 后面跟冒号,经常在转移指令或CALL指令使用。 4、属性 1)段值:变量或标号对应存储单元所在段的段值; 2)偏移:变量或标号对应存储单元的起始地址的段内偏移; 2)类型:变量类型有BYTE,WORD,DWORD;标号类型有NEAR,FAR
27
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 1) SEG:返回变量所在段的段值 格式:SEG 变量名或符号 2)OFFSET:返回变量或标号的偏移 格式:OFFSET 变量名或标号
2012-8-12
28
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 3)TYPE:返回变量或标号的类型 格式:TYPE 变量名或标号 其中:BYTE WORD DWORD NEAR FAR 1 2 4 -1 -2 4)LENGTH:返回利用DUP定义的数组中元素的个数, 亦即count值. 格式: LENGTH 变量名 5)SIZE:返回用DUP定义的数组占用的字节数. 即:SIZE 变量=(LENGTH 变量)*(TYPE 变量) 格式:SIZE 变量名
第四章 汇编语言程序格式
本章重点:1、汇编语言语句格式 2、伪指令 3、源程序结构形式 本章作业: P155 4.1 4.5 4.11 4.13 4.14 4.16
2012-8-12 1
4.1汇编程序功能
汇编源程序 .ASM 编辑程序 如:全屏幕编辑工具 EDIT 汇编程序 如:宏汇编程序 MASM 连接程序 如:连接程序LINK
2012-8-12
19
4.3 汇编语言程序格式
3.关系运算符 1) 运算符包括EQ、NE、LT、GT、LE、GE。 2)运算结果为一个数字值。关系成立结果为0FFFFH,结 果不成立结果为0。 例:MOV AX,1234H GT 1024H MOV BX,0LT0 相当于 MOV AX,0FFFFH MOV BX,0
2012-8-12 17
4.2 伪指令
六、过程定义伪指令 可以把具有独立功能的程序段定义为过程 (相当于高级语言中的子程序),供其它程序 调用。 过程定义的语法格式为: <过程名> PROC [NEAR]/FAR ┆ RET <过程名> ENDP
2012-8-12 18
4.3 汇编语言程序格式
语句的种类和格式 表达式的表示
2012-8-12 12
4.2 伪指令
7)定义其他类型数据项DQ,DT DQ定义8字节数据项 DT定义10字节数据项 2.重复操作符DUP 格式:count DUP (表达式[,表达式…]) 1)可以用来定义数组,定义数据缓冲区; 2)count是重复次数; 3)允许嵌套; 例:BUF DB 3 DUP(0);BUF DB 0,0,0 例:BUF1 DB 3,2,5 DUP(1,2,2 DUP(0))
2012-8-12
7
4.2 伪指令
3.SEGMENT伪操作可增加说明 格式:段名 SEGMENT [定位类型][组合类型][使用类 型][类别] …….. 段名 ENDS 1)当需要连接程序把本程序与其他程序模块连接时,需 要使用这些说明。 2)定位类型:说明段的起始地址应有怎样的边界值。 3)组合类型:说明程序连接时的段合并方法。 4)使用类型:说明是16位或32位寻址方式。 5)类别:在引号中给出连接时组成段组的类别。
2012-8-12
23
4.3 汇编语言程序格式
三、操作数项 操作数项可以是由标号,变量,常数和表达式组成. 1.常数 1)十进制、十六进制、二进制、八进制数 D、H、B、Q 2)字符串常数 用引号括起来的一个或多个字符,只是包括在引号中的字 符的ASCII代码值。 例:‘A’的值是41H,’ab’的值是6162H 2.算术运算符 有+、-、*、/、MOD(模)、+(正)、-(负),意义和高 级语言中同样运算符的意义相似。 例:ADD AX,-3*3+32H/5
伪操作:又称伪指令,在程序运行期间不被执行, 只是在汇编程序对源程序汇编期间由汇编程序 处理的操作,他们可以完成如定义程序模式、 定义数据、分配存储区、指示程序结束等功能。
2012-8-12
4
4.2 伪指令
一.段定义伪操作 1.段开始和结束语句 格式:段名 SEGMENT …….. 段名 ENDS 1)段开始语句中的段名与结束语句中的段名要相同; 2)删节号部分,对于数据段、附加段和堆栈段来说, 一般是存储单元的定义、分配等伪指令,对于代 码段是指令及伪指令。
2012-8-12 5
4.2 伪指令
2.段使用设定语句 格式:ASSUME 段寄存器名:段名[,段寄存器名: 段名..] 1)ASSUME语句说明段寄存器与程序段的对应关系; 2)段名必须是由SEGMENT定义的段中的段名。 3)ASSUME语句是伪指令语句,它不能把段地址装 入段寄存器,在代码段中还需要通过指令语句 来给段寄存器赋值.但代码段不需要这么做。 4) ASSUME NOTHING,可取消前面由ASSUME所指定 的段寄存器。
2012-8-12 10
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 3)定义字数据项DW 每一字数据项占用两个字节存储单元 例:FLAG DW 2FCDH,1024,-1 VECT DW 0 DW 2047 4)定义双字数据项DD 每一双字数据项要占用四个字节存储单元 例:VECTOR DD 4 FARPTR DD 12345678H,0
2012-8-12 29
例:有如下数据段定义: VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678H BUFF DB 10 DUP(?) MESS DB ‘HELLO’ 设:变量VARW的逻辑地址为2000H:0100H 1)SEG VARW=2000H 2)OFFSET VARW=0100H,OFFSET VARB=0104H 3)TYPE VARW=2,TYPE VARB=1 TYPE VARD=4 4)LENGTH VARW=1,LENGTH BUFF=10 LENGTH MESS=1 5)SIZE VARW=2,SIZE BUFF=10,SIZE MESS=1
2012-8-12 13
DATAB 例: DATAB DB 18H,-1,30 DATAW DATAW DW 18H,2A45H DATAD DD 18H,2F3A124BH DATAD 在内存中的存储情况如图所示。
18 FF 1E 18 00 45 2A 18 00 00 00 4B 12 3A 2F
2012-8-12
8
4.2 伪指令
二、程序结束伪操作 格式:END [标号] 1)告诉汇编程序源程序到此为止,不再对其后的 任何语句进行汇编; 2)标号是一个已在程序中定义过的标号,表示程 序要从标号所对应的指令开始执行; 3)源程序必须有一个END语句.
2012-8-12
9
4.2 伪指令
三.数据定义及存储器分配伪操作 1.数据定义语句 1)格式:[变量名] 数据定义符 表达式[,表达式…] ; 注释 变量名代表该语句所定义若干数据项中的第一个数据 项. 变量名和注释都可缺省。 2)定义字节数据项DB 每一字节数据项占用一个字节存储单元 例:COUNT DB 100 DB 0DH,0AH,’$’ TABLE DB 0,2,3
2012-8-12 20
该程序的功能是完成两个字节数据相加。 DATA SEGMENT ;段定义开始(DATA段) BUF1 DB 34H ;第1个加数 BUF2 DB 2AH ;第2个加数 SUM DB ? ;准备用来存放和数的单元 伪指令语句 DATA ENDS ;段定义结束(DATA段) CODE SEGMENT ;段定义开始(CODE段) ASSUME CS:CODE,DS:DATA ;规定DATA、CODE分别为数据段和代码段 START: MOV AX,DATA MOV DS,AX ;给数据段寄存器DS赋值 MOV AL,BUF1 ;取第1个加数 ADD AL,BUF2 ;和第2个加数相加 指令语句 MOV SUM,AL ;存放结果 MOV AH,4CH ; INT 21H ;返回DOS状态 CODE ENDS ;段定义结束(CODE段) END START ;整个源程序结束
2012-8-12
26
4.3 汇编语言程序格式
5.HIGH和LOW运算符 1)HIGH 表达式:数值表达式的高8位 2)LOW 表达式:数值表达式的低8位 例: MOV AX,HIGH 1234H MOV AX,LOW (1234H+5) 相当于 MOV AX,12H MOV AX,39H
2012-8-12
2012-8-12
25
4.3 汇编语言程序格式
4.逻辑运算符 1)运算符包括AND(与)、OR(或)、XOR(异或)、 NOT(非)、SHL(左移位)、SHR(右移位) 2)运算结果是数值。 例:MOV AX,1 SHL 3 MOV CX,3 AND 47H 相当于 MOV AX,8 MOV CX,3
2012-8-12 6
例1: DSEG1 DSEG1 DSEG2 DSEG2 CSEG
START:
CSEG
SEGMENT …….. ENDS SEGMENT …… ENDS SEGMENT ASSUME CS:CSEG,DS:DSEG1,SS:SSEG2 MOV AX,DSEG1 MOV DS,AX MOV AX,DSEG2 MOV SS,AX ……. ENDS END START
2012-8-12 22
4.3 汇编语言程序格式
二、变量和标号 1、变量和标号代表存储单元的符号地址。 2、变量表示的存储单元中存放数值,在除代码段以外的其 他段中定义,后面不跟冒号,经常出现在操作数字段。 3、标号表示的存储单元中存放指令代码,在代码段中定义, 后面跟冒号,经常在转移指令或CALL指令使用。 4、属性 1)段值:变量或标号对应存储单元所在段的段值; 2)偏移:变量或标号对应存储单元的起始地址的段内偏移; 2)类型:变量类型有BYTE,WORD,DWORD;标号类型有NEAR,FAR
27
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 1) SEG:返回变量所在段的段值 格式:SEG 变量名或符号 2)OFFSET:返回变量或标号的偏移 格式:OFFSET 变量名或标号
2012-8-12
28
4.3 汇编语言程序格式
6.析值操作符:数值回送操作符 3)TYPE:返回变量或标号的类型 格式:TYPE 变量名或标号 其中:BYTE WORD DWORD NEAR FAR 1 2 4 -1 -2 4)LENGTH:返回利用DUP定义的数组中元素的个数, 亦即count值. 格式: LENGTH 变量名 5)SIZE:返回用DUP定义的数组占用的字节数. 即:SIZE 变量=(LENGTH 变量)*(TYPE 变量) 格式:SIZE 变量名
第四章 汇编语言程序格式
本章重点:1、汇编语言语句格式 2、伪指令 3、源程序结构形式 本章作业: P155 4.1 4.5 4.11 4.13 4.14 4.16
2012-8-12 1
4.1汇编程序功能
汇编源程序 .ASM 编辑程序 如:全屏幕编辑工具 EDIT 汇编程序 如:宏汇编程序 MASM 连接程序 如:连接程序LINK
2012-8-12
19