第4章 汇编语言程序设计-D10
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
16
格式:
段名 SEGMENT[定位类型] ,[组合类型],[字长选 择],[类别] SEGMENT[定位类型] 组合类型] 类别] (段体) ••• 段名 ENDS
–段名:自己选定,前后一致 –定位类型: – PAGE:段的首地址后两位为00H,页边界开始 PAGE:段的首地址后两位为00H – PARA:(隐含)段的首地址后1位为0H,节边界 PARA:(隐含)段的首地址后1位为0 –DWORD:4的倍数 DWORD: –WORD: 偶地址 WORD: BYTE: BYTE:任一字节
13
n DUP(
式
–符号定义语句
◎等值语句(EQU) ◎等值语句(EQU) 格式:符号 EQU 表达式
功能:将表达式的值赋给EQU左边的符号。表 功能:将表达式的值赋给EQU左边的符号。表 达式可以是常数、变量、标号、数值或地址表达式。 ◎等号语句 格式:符号 = 表达式 等号语句(=)与EQU语句有同样的功能,区别 等号语句(=)与EQU语句有同样的功能,区别 在于等号语句定义的符号允许重新定义,使用更加方 在于等号语句定义的符号允许重新定义,使用更加方 便灵活。
LOOP: LOOP:MOV AX,0000 AX,
…
JMP LOOP
7
三、 伪指令(指示语言) 伪指令(指示语言)
指示性语句又称伪指令,它没有对应的机器 指令,不由CPU执行,而是在汇编程序汇编时 指令,不由CPU执行,而是在汇编程序汇编时 识别,用于说明CPU的类型、段结构、源程序 识别,用于说明CPU的类型、段结构、源程序 起止信息和段内存的安排等。 MASM的伪指令可分为变量定义语句、符号 MASM的伪指令可分为变量定义语句、符号 定义语句、段定义语句、段分配语句、过程定 义语句、群定义语句、结构定义语句、记录定 义语句等。
4. CS的装入 :由起始标号确定CS和IP CS的装入 :由起始标号确定CS和
21
例:DATA SEGMENT BCDBUF DB 22H DATA ENDS EXTRA SEGMENT BUFF DB 20 DUP(00H) EXTRA ENDS STACK SEGMENT STACK SBUFF DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX CODE ENDS 22 END START
14
例1:
ACOS EQU 1250H COUNT EQU 100 BUF EQU ACOS+1000H
MOV CL,COUNT
例2:
ONE =100 COUNT =100 A=ONE S=COUNT+100 A=A+100
15
–段定义指令 ※
在汇编程序设计中,需要将存储器分成若干段, 80486CPU访问存储器时,凭籍段寄存器对各个段 80486CPU访问存储器时,凭籍段寄存器对各个段 进行访问。通常用段定义语句(SEGMENT/ENDS 进行访问。通常用段定义语句(SEGMENT/ENDS )来定义各种类型的逻辑段。 (一)完整段定义伪指令 1. 段定义语句
程序中凡数据或代码的长度不大于64KB时为近程, 程序中凡数据或代码的长度不大于64KB时为近程, 否则为远程。
23
• 简化段定义 DOSSEG • MODEL SMALL • STACK DB 200H • DATA BCDBUF DB 12H • CODE START: MOV AX,DATA MOV DS,AX … END
5
–变量
变量用来定义存放在存储器单元中的数据。 其三重属性为: ◎ 段属性(SEG) 属性(SEG) ◎ 偏移地址属性(OFFSET) 偏移地址属性(OFFSET) ◎ 类型属性(TYPE) 类型属性(TYPE) 例:DATA
变量名 SEGMENT FIRST DB 5AH
对变量的操作:
LEA AX,FIRST AX, MOV AX,SECOND AX, MOV AX, AX,FIRST[DI]
3. 段寄存器的装入 ASSUME语句只建立当段和段寄存器之间的联系,但 ASSUME语句只建立当段和段寄存器之间的联系,但 ASSUME语句不能将各段的段基值装入各个段寄存器, ASSUME语句不能将各段的段基值装入各个段寄存器, 段基址的装入是用程序的办法。
19
◎DS、ES、FS和GS的装入 DS、ES、FS和GS的装入 DS、ES、FS和GS不能用立即数寻址方式直接装入 DS、ES、FS和GS不能用立即数寻址方式直接装入 ,段基值需先送入通用寄存器,再传送给段寄存器。 例:MOV AX, 例:MOV AX,DATA MOV DS,AX DS, ◎SS及SP的装入: SS及SP的装入: –在段定义伪指令中,选用 “STACK”参数项,在 STACK”参数项,在 ASSUME语句中,把堆栈段分配给SS, SS和SP自 ASSUME语句中,把堆栈段分配给SS,则SS和SP自 动装入。 –如未使用“STACK”参数项,则用程序实现SS和SP的 如未使用“STACK”参数项,则用程序实现SS和SP的 装入
2
–指示语句(pseude instruction statements) 指示语句(pseude 指示词句又称伪指令,它不要求CPU执行某种操 指示词句又称伪指令,它不要求CPU执行某种操 作,汇编时也不产生对应的机器代码,而仅仅告诉 汇编程序,对它后面的指令语句和操作数应该如何 产生机器目标代码。 伪指令的格式为: [名字] 名字] 伪指令定义符号 [操作数] 操作数] [;注释] [;注释]
9
(1)用数值表达式定义变量。例如: 用数值表达式定义变量。例如: 用数值表达式定义变量
K1 K2 K3 DB DW DD K1 K2 5AH 2354H 2A00 4455H 5AH 54H 23H K3 55H 44H 00H 2AH
10
;将5AH赋给字节变量K1 ;将2354H赋给字变量K2 ;将2A00 4455H赋给双字变量K3
6
SECOND DW 1122H DATA ENDS
变量名:存放数据存储单元的符号地址
–标号:
给指令语句所在地址取的名字 ◎ 段属性(SEG) 属性(SEG) ◎ 偏移地址属性(OFFSET) 偏移地址属性(OFFSET) ◎ 距离属性(Distance) 距离属性(Distance) 例: (隐含为NEAR) 隐含为NEAR)
18
2. 段分配语句(ASSUME) 段分配语句(ASSUME) 段分配语句用来完成段的分配,说明当前哪些逻辑 段被分别定义为代码段、数据段、堆栈段和附加段。
格式:ASSUME 段寄存器:段名,[ 格式:ASSUME 段寄存器:段名,[段寄存器:段名 ┄ ] 功能:说明源程序中定义的段由哪个段寄存器去寻址。段 寄存器可以是CS,SS,DS,ES,FS或GS。 寄存器可以是CS,SS,DS,ES,FS或GS。
(4)用数组表达式定义变量。例如:
A1 A2 DB DW 00H,11H,22H,33H 3456H,1025,25*25,1000/3,10A0H ;(AL)=33H ;(AX)=1025
12
例:MOV AL,A1[3] MOV AX,A2[1]
◎格式二 格式 2 用于定义重复变量,其格式为: DB DW 变 量 名 DD DF DQ DT :TAB1 DB TAB3 DB 10 DUP 4 DUP 0 1,2 DUP 50H TAB2 DW 2 DUP
START
24
20
例: STACK2 SEGMENT DW 40 DUP(?) TOP LABEL WORD STACK2 ENDS CODE SEGMENT ASSUME CS:CODE …SS:STACK2 … AX,STACK2 SS,AX SP,OFFSET TOP … CODE ENDS END START START: MOV MOV MOV
第4章 汇编语言程序设计
主要内容
1 MASM宏汇编语言结构 MASM宏汇编语言结构 2 MASM汇编语言数据、表达式和运算符 MASM汇编语言数据 汇编语言数据、 3 伪指令 4 程序设计 5 DOS功能调用 DOS功能调用 6 实用程序设计举例
1
一、MASM 汇编语句结构
MASM 有两种基本语句,它们是指令语句 和指示语句(又称伪指令) 指令语句(Instruction 指令语句(Instruction statements) 指令语句又称可执行语句,它要求 CPU执行某种操作。 CPU执行某种操作。 指令语句的格式为: [符号:] 指令助记符 [操作数] [ ;注释] 符号:] 操作数] ;注释] 一条指令一条语句可分为4个字段, 一条指令一条语句可分为4个字段,其中方 . 括号中的字段为可选项。
(二)简化段定义伪指ቤተ መጻሕፍቲ ባይዱ 1. 段次序语句(DOSSEG) 段次序语句(DOSSEG)
格式:DOSSEG 格式:DOSSEG 功能:各段在内存的顺序按DOS段次序预定排列。 功能:各段在内存的顺序按DOS段次序预定排列。
2. 内存模式语句(.MODEL) 内存模式语句(.MODEL)
格式:MODEL 模式类型[.高级语言] 格式:MODEL 模式类型[.高级语言] 功能:指定数据和代码允许使用的长度。 说明:[高级语言]是可选项,可用C BASIC、FORTRAN、 说明:[高级语言]是可选项,可用C、BASIC、FORTRAN、
17
•组合类型: •NONE:(隐含)与同名段不连接,独立存在。 •STACK:表明该段为堆栈段,不可缺省。 •AT 表达式:表示本段可定义在表达式指示的节边界上。 例:MCODE SEGMENT AT 2050H 则该段的首地址为20500H。 •字长选择: •USE16:段字长为16位,最大段长为64KB •USE32:段字长为32位,最大段长为4GB •分类名:用单引号括起,分类名相同的逻辑段存放在连 续存储空间。
(2)用字符串定义变量。例如:
ONE DB “HOW ARE YOU” ;将“HOW ARE YOU” 字符串赋给变量ONE。 TWO DW ‘OK’ ;将‘OK’字符串赋给变 量TWO ONE ‘H’ ‘O’ ‘W’ … TWO ‘O’ ‘K’
11
(3)存放结果时,用(?)定义不确定值的变量
ABOV BLOW CLER DB ? DW ? DD ? ;定义变量ABOV为不确定值的字节变量 ;定义变量BLOW为不确定值的字变量 ;定义变量BLOW为不确定值的双字变量
区别:伪指令名字后无冒号
3
二、 MASM 汇编语言数据、 汇编语言数据、 表达式和运算符
–常数 常数是没有任何属性的纯数值。 常数分为两种类型:数值型常数和字符 串型常数。
4
◎数值型常数 1.二进制数:以字母B结尾,如01011101B 1.二进制数:以字母B结尾, 01011101B 2.八进制数:以字母Q或O结尾,如723Q,211Q。 2.八进制数:以字母Q 结尾, 723Q,211Q。 3.十进制数:以字母D(或省略)结尾,如1995D,3508。 3.十进制数:以字母D(或省略)结尾,如1995D,3508。 4.十六进制数:以字母H结尾,如3A40H,8BH。 4.十六进制数:以字母H结尾,如3A40H,8BH。 ◎字符型常数 用单引号括起来的字符串。如‘ABCD’,‘$123456’等。 用单引号括起来的字符串。如‘ABCD’,‘$123456’等。 每个字符在机内以ASCII码存放,例如‘A’, 每个字符在机内以ASCII码存放,例如‘A’,再内存为 41H。 41H
8
–变量定义语句 ※
变量定义语句用来定义字节、字或双字变量,变 量定义语句有两种不同的格式。 ◎格式一 [变量名] DB / DW / DD / DF / DQ / DT 表达式 变量名] 功能:为变量分配 1 个字节/字/双字/长字/四 个字节/ 双字/长字/ 字/十字节的存储单元,并赋值。 具体形式: