CH4(1) 汇编语言程序设计
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
2、汇编语言源程序执行过程
源程序
汇编程序
机器代码
程序设计 算法 语法
8086系统:MASM规范
5
第四章
三、完整汇编源程序实例
DATA SEGMENT DA1 DB 12H DA2 DB 34H DA3 DB 00H DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA
N表示复制次数,表达式为复制内容
例:2 DUP(1,2) 等价于 1,2,1,2
SIZE:SIZE=LENGTH*TYPE
22
第四章
数值返回运算符(续) 例:设DS=0200H,从偏移量为0000H定义以下变量: DA1 DW 1234H,5678H DA2 DD 5 DUP(1,2)
……….
:0F7H;
字符串:用单引号‘ ’括起来字符或字符串,如:‘A’,
‘123H’。
注:字符串汇编时被翻译成对应的ASCII码,机内也以ASCII码 12 第四章
2、变量
数据的符号地址; 名称可以代表后面数据项第一字节的地址;
例:DA1 DB 10H,20H,30H,… ;定义变量DA1,初值为…,DA1表示‘10H’的地址
16
第四章
4.2 MASM中的表达式
表达式:运算对象与运算符组成;
运算对象:常数、变量、标号;
运算符:MASM中有六类
算术运算符、逻辑运算符、关系运算符、 数值返回运算符、修改属性运算符、其它运算符
注意:所有表达式由MASM处理(即:在汇编时进行 运算),结果为常数或存储器地址;
掌握:常用运算符及表达式的结果
汇编时能否形成对应的机器码(本质)。
9
第四章
1、指令性语句 格式: 标号:指令助记符 操作数,操作数;注释
标号-符号地址;必须加“:”;命名规则;可省
略
指令助记符-指令名称,不可省略 操作数-操作对象;多个时用“,”隔开 注释-以“;”开头;说明性语句,可省略
10 例: NEXT:MOV AH,0FH
有部分固定的程序框架(程序结构) 基本组成---语句
有些是前面学过的指令语句,其他是MASM中规定 的格式、语法语句。
7
第四章
一般程序框架
段名1 SEGMENT ;段开始 ……… 段名1 ENDS ;段结束 段名2 SEGMENT ASSUME CS:段名2, DS:段名1
;段分配
返回DOS方法二
;将0FH送入AH中 第四章
2、伪指令语句(也称汇编命令语句)
格式:
名字 伪指令指示符
操作数,操作数;注释
名字-符号地址;不加“:”;变量名、段名等;可省
略
伪指令指示符-MASM中规定的符号;如变量定义DB等 操作数-操作对象;不同伪指令有不同要求,多个时
用“,”隔开
注释-以“;”开头;说明性语句,可省略
类型 返回值
1 2 4
21
类型
返回值 -1 [FFH] -2 [FEH]
变量
DB DW DD
标号
NEAR FAR
第四章
数值返回运算符(续)
LENGTH:返回变量长度
• 对于一般变量,返回1; • 对于DUP定义的变量,返回单元数(以DUP形式表
示的第一组变量被重复设置的次数,所以直接返 回第一个DUP前的N值); 说明:DUP为复制操作符,格式:N DUP(表达式);
1第四章汇编语言程序设计第四章40概述41汇编语言程序格式42masm中的表达式43伪指令语句44程序设计方法45dos系统功能调用2第四章40概述从使用者的角度看一般可分成以下三种
第四章
汇编语言程序设计
4.0 概述 4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 程序设计方法 4.5 DOS系统功能调用
格式1:变量名 格式2:变量名
助记符 助记符
opr,opr…;注释 N DUPቤተ መጻሕፍቲ ባይዱopr,opr…);注释
助记符:
DB:定义字节变量,表示每个opr占一个字节
DW:定义字变量,表示每个opr占2个字节 DD:定义双字变量,表示每个opr占4个字节 N:重复次数,正整数
掌握:变量占的总字节数;在内存中的存放格式
29
第四章
汇编后存放格式如下图:
例1: opr 是常数或表达式 若数据定义语句如下: DA1 DB 10,5,10H DA2 DW 100H,100,-4
关系运算符常与逻辑运算符组合起来使用
例:MOV CX,((PORT LT 5)AND 100)OR((PORT GE 5)AND 200) 若PORT<5,MOV CX,100
若PORT≥5,MOV CX,200
20
第四章
四、数值返回运算符(分析运算符) 包括:OFFSET,SEG,TYPE,LENGTH,SIZE 格式:运算符 变量或标号 功能: OFFSET:取偏移地址值; SEG:取段基址; TYPE:返回长度(变量)或距离(标号)属性值;
相当于高级语言中的数组; 在程序中作为存储器操作数来使用。
13
第四章
变量有三种属性:
⑴段值:变量所在段的段基址。
⑵段内偏移地址:指变量所在地址与所在段首地
址之间的地址偏移字节数。
⑶类型:长度属性,指变量中每个元素所包含的
字节数,类型有字节变量(BYTE)、字变量(WORD)、
双字变量(DWORD)等。
3
第四章
一般应用:
混合语言
汇编语言加高级语言等组合编程;各取所长,相
互调用
汇编语言实现:硬件操作 高级语言实现:复杂算法
4
第四章
二、汇编语言程序执行过程
1、几个名词
汇编语言:用助记符来表示指令的语言 汇编语言源程序:用汇编语言编写的程序。 汇编:将源程序翻译成机器代码的过程。 汇编程序:将源程序翻译成机器代码的程序。
第四章
五、修改属性运算符
段操作符
ES:,DS:,SS:,CS:
修改段基址的来源
例: MOV AX,[BX] ;默认段基址在DS中
MOV AX,ES:[BX] ;段基址在ES中
PTR
格式:类型/距离
PTR
变量或标号
功能:临时改变或指明变量或标号的类型属性, 常与BYTE、WORD、NEAR、FAR等连用。
MAIN PROC FAR …… …… PUSH DS MOV AX,0 PUSH AX …… …… RET MAIN ENDP
START:MOV AX,DATA MOV DS,AX ;送段基址 …………… MOV AH,4CH ;返回DOS方法一 INT 21H 段名2 ENDS END START ;源程序结束
18
MOV MOV MOV MOV
AX,150 AL,1 AL,6 AL,4
第四章
二、逻辑运算符 包括:AND,OR,NOT,XOR
特点:①位运算;
②只能用于数字表达式 例:MOV BL,8CH AND 73H MOV BL,AL AND OFFH MOV BX,NOT 0FFH 注意:AND MOV BL,00H
14
第四章
3、标号
指令性语句的符号地址; 名称代表后面可执行指令语句的开始地址; 可作为转移指令的目的操作数。
例:
JMP NEXT
……
NEXT:MOV AH,0FH
15
第四章
标号也有三种属性:
⑴段值:标号所在段的段基址,总在CS中。 ⑵段内偏移地址:指标号所在地址与所在段首地址之 间的地址偏移字节数。 ⑶类型:指标号可转移的距离,也称距离属性。 NEAR:近标号,实现段内转移或调用; FAR: 远标号,实现段间转移或调用。 若没有对类型进行说明,默认为NEAR。
汇编时
(×) MOV BX,0FF00H
AX,8CH AND 73H (两‘AND’不同)
区别:⑴前为指令助记符,后为运算符;⑵处理 时间不同;⑶前影响PSW,后不影响
19
第四章
三、关系运算符 包括:EQ,NE,LT,GT,LE,GE
特点:①运算对象:数据或同一段内的地址;
②运算结果:关系为真,结果全1;假,全0 MOV AX,0FFFFH 例:MOV AX,10H GE 16 MOV AL,10H GE 16 MOV AL,0FFH
17
第四章
一、算术运算符 包括:+,-,*,/(取商),MOD(取余),SHL,SHR
特点:①运算对象及结果均为整数
②地址只能加减 例: DA1 DA2 MOV MOV MOV MOV DB 1,2,3,4 DB 20 AX,30*5 汇编时 AL,31MOD5 AL,31/5 AL,DA2-DA1
MOV MOV MOV L1:MOV MOV MOV MOV
AX,OFFSET DA1 汇编时 AX,OFFSET DA2 AX,SEG DA1 AX,TYPE DA2 AX,TYPE L1 汇编时 AX,LENGTH DA1 AX,SIZE DA2
23
MOV AX,0000H MOV AX,0004H MOV AX,0200H MOV MOV MOV MOV AX,4 AX,0FFH AX,1 AX,20
8
第四章
4.1 汇编语言程序格式
一、汇编源程序的语句 MASM中的语句分为两类:
指令性语句:与机器指令相对应,可译成目标代
码(机器指令代码)。
伪指令语句:无对应的机器指令,汇编时对伪指
令进行处理,可完成数据定义、存储区分配、段 定义、段分配、指示程序开始和结束等功能。
差别:格式及功能不同(形式);
24
第四章
例:DA1 DB DA2 DW
15H,36H 1122H,3344H
MOV AX,DA1(×) ;长度不一致
MOV AL,DA2(×) ;长度不一致 MOV [BX],10H(×);类型不明 改:MOV AX,WORD PTR DA1 MOV AL,BYTE PTR DA2 ;临时改变变量类型 MOV WORD PTR [BX],10H ;临时指明操作类型 思考:这三条指令执行后的结果分别是多少?
段分配,指示程序开始和结束等功能。
常用:
• 数据定义(变量定义)语句:DB,DW,DD • 符号定义语句:EQU • 段定义语句:SEGMENT…ENDS • 段分配语句:ASSUME • 过程定义语句:PROC…ENDP • 程序开始、结束语句:ORG,END
28
第四章
一、数据定义(变量定义)语句(DB,DW,DD)
(下接右边)
START: MOV AX,DATA MOV DS,AX MOV BL,DA1 ADD BL,DA2 MOV DA3,BL MOV AH,4CH INT 21H CODE ENDS END START
分析程序的结构、功能、组成
6
第四章
汇编源程序特点
分段的结构
4个段,至少有代码段,其他视需要而定;
1
第四章
4.0 概述
一、计算机程序设计语言 从使用者的角度看,一般可分成以下三种: 1、机器语言(Machine Language)
用‘0’、‘1’数字代码来表示机器操作;
如:加法:1001、1D、2B…… 特点:计算机能够直接识别,执行速度快;
但不方便记忆和编程
2
第四章
2、汇编语言(Assembly Language) 用助记符来表示指令,如:加法:ADD…… 特点:机器不能识别,需翻译;但仍然面向硬件, 执行速度较快;多用于编制系统程序、实时控制和 通信程序。 3、高级语言(High-level Language) 用数学语言和自然语言编程; 如:加法:+,输出:Printf… 特点:编程方便简单,无需了解机器硬件;但机器 不能识别,需要庞大的翻译系统,速度较慢。
26
第四章
例: 若 DA1 DB 01H,02H,03H DA2 DW 5566H COUNT EQU $-DA1 则:COUNT的值为5 COUNT表示:DA1,DA2占的字节总数(长度之和) 七、优先级(P134 表4-3)
27
第四章
4.3 伪指令语句
在汇编时进行处理,主要完成变量定义,段定义,
11 第四章 例:DA1 DB 10H,20H,30H;定义变量DA1,并赋初值
与指令系统中 介绍的一样
二、数据项
MASM中使用的数据项:常数、寄存器、存储器、变量、标号
或表达式。
1、常数
是固定值,没有属性,是确定的数据。 二进制:字母“B”结尾,如:00110100B; 十进制:字母“D”结尾或省略,如:1234D、5678; 十六进制:字母“H”结尾,“A~F”开头时,前面加0,如
AX=3615H,AL=22H,(BX)=0010H
25
第四章
六、其他运算符
( ):改变优先级; [ ]:内存单元地址或多变量下标
补充
$:地址计数器的当前值
例:DA1 DW 1,2,$+4,0AH 若DA1偏移量为1000H,则上述变量定义等效为: DA1 DW 1,2,1008H,0AH