汇编语言程序设计1(汇编语言源程序的结构、语句格式、伪指令)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
名字
data Hello data prog
标号
SEGMENT DB ‘Hello, world!’,0DH,0AH,’$’ ENDS SEGMENT ASSUME CS:prog,DS:data start: MOV AX,data MOV DS,AX LEA DX,hello ;取字符串首地址 MOV AH,9 INT 21H ;显示字符串 MOV AH,4CH INT 21H ;退回DOS prog ENDS END start
代码段
9
分段结构
0000:0~3FF
环境与代码运行
中断向量区 (系统专用) 堆栈段
SS:SP 栈底 最多4 个活 动段 DS
ES
数据段
CS:IP
代码段
FFFF:0
系统起始运行程序
10
4.1.2 汇编语言的语句与格式

汇编语言的语句有两种:
指令性语句——由8086指令助记符(真指令)构成 的语句 指示性语句——由伪指令构成的语句
13 13
指示性语句格式
[名字] 伪指令助记符 操作数 [,操作数,…] [ ;注释]
变量的符号地址
其后不加冒号
指示性语句中至 少有一个操作数
14 14
指令性语句(真指令)由CPU执行,每 一条指令性语句都有一条机器码指令与其 对应; ● 指示性语句(伪指令)由汇编程序执行。 它指出汇编程序应如何对源程序进行汇编, 如何定义变量、分配存储单元以及指示程 序开始和结束等。指示性语句无机器码指 令与其相对应。
AL,BYTE PTR STR1 ;合法
其它运算符

方括号:
[ ]
方括号中内容为操作数的偏移地址

段重设符
段寄存器名:[ ]
用于修改默认的段基地址
32 32
§4.2 伪指令
掌握:

伪指令的格式及实现的操作
伪指令的应用
33 33
伪指令

由汇编程序执行的“指令系统” 作用:




定义变量; 分配存储区 定义逻辑段; 指示程序开始和结束; 定义过程等。
TYPE
则 TYPE
VAR = 2
LENGTH VAR = 5
SIZE VAR = 10
29
6)属性运算符——PTR
用来指定地址操作数的类型。
格式:<类型> PTR <地址操作数>
类型∈{BYTE, WORD, DWORD和 NEAR, FAR ,SHORT}
BYTE、WORD、DWORD
用于描述数据存储单元(变量)地址 NEAR、FAR (SHORT ?) 用于描述转移、调用的目的地址
(1)机器语言——二进制数形式的指令和数据。 B0 64 是什么意思?这就是机器语言。既不直观,又不 易理解和记忆. MOV AL,64H ;很容易记忆理解,这就是助记符。 (2)助记符——用便于记忆的英语单词表示的指令操作 码。它反映了指令的功能和主要特征,便于人们理解和记忆。
4
指令除了操作码以外,还有一个操作数问题。
11
1. 汇编语言语句类型
指令性语句
CPU执行的语句, 能够生成目标代码
指示性语句
CPU不执行,而由汇 编程序执行的语句, 不生成目标代码
12 12
2. 汇编语言语句格式
指令性语句:
[标号:] [前缀] 助记符 [操作数],[操作数] [ ;注释]
指令的符号地址 标号后要有冒号
操作码 注释前加分号
关系运算的结果是一个逻辑值:真或假
关系为真,结果为全1 关系为假,结果为全0
例: MOV BX, PORT GT 300H 若PORT的值大于300H为真,则汇编后为: MOV BX, 0FFFFH 若为假,则汇编后为: MOV BX, 0
26
取值运算符

用于分析存储器操作数的属性

获取变量的属性值 取得其后变量或标号的偏移地址 取得其后变量或标号的段地址 取变量的类型 取所定义存储区的长度 取所定义存储区的字节数
第4章 汇编语言程序设计
mov ax,12h call display Jmp 1234h
1
主要内容:

汇编语言源程序的结构 汇编语言语句格式 伪指令 功能调用

汇编语言程序设计
2
§4.1 汇编语言源程序
了解:

汇编语言源程序的结构 汇编语言语句类型及格式
3
3
4.1 汇编语言源程序
DATA3 DD 11H*2,22H,33445566H
以上变量在内存 中的存放形式
38 38
数据定义伪指令例_变量在内存中的分

DATA3 DATA1
DATA2
11 22 33 44 11 00 22 00 44 33
22 0 0 0 22 0 0 0 XX 66 55 44 33
39 39
数据定义伪指令的几点说明
5
汇编程序(翻译程序)
汇编源程序需翻译成机器语言,变成可执行文件, 机器才能执行,这个翻译过程叫汇编。——高级语言 中称该过程为“解释”或“编译”。执行翻译的程 序称为“汇编程序”。
汇编语言 源程序
汇编程序
机器语言 目标程序
源程序的编译程序
6
2. 汇编语言程序设计与执行过程


输入汇编语言源程序(EDIT) 源文件 . ASM
汇编(MASM)
目标文件 .OBJ 可执行文件.EXE


链接(LINK)
调试(TD)
最终程序
7
7
4.1.1 汇编语言源程序的结构
汇编语言源程序通常由一个或几个程序模 块组成,每个模块一般由3个(或4个)逻辑段组 成: 数据段——存放数据、变量 (附加数据段——存放数据、变量) 堆栈段——堆栈区域 代码段——存放程序指令

注意: 指令性语句汇编时生成机器码;
指示性语句汇编时不生成机器码。
15
语句的构成元素:



标号——指令的符号地址,用来代表指令在存储器中的地址。 只能出现在指令性语句中,标号后应加上冒号。 名字——段、过程、变量的名字,用来代表它们在存储器中 的地址。只能出现在指示性语句中,名字后不加冒号。 指令助记符——8086助记符、伪指令 操作数——即指令的操作对象 对指令性语句(真指令)——0,1,2个 对指示性语句(伪指令)——根据需要而定 操作数之间以逗号分隔 操作数可以是:寄存器、存储单元、常数或表达式 例如:AX,[DI+BX+10],200,16*8+TABLE,等等

变量在程序中作为存储器操作数被引用。
21

标号和变量名的使用规则: 组成:A-Z(不分大小写), 0-9, ?@ . _ $ 不能以数字开头,句号(.)只能作为首字符 长度小于31个字符 不能与保留字(指令助记符、伪指令、预定义符号等) 重名 不能重复定义
例如: 正确的:LP1, AGAIN, NEXT, _GO, OK_1 错误的:4M, LOOP, AAA, #HELP, +ONE
34 34
常用伪指令
数据定义伪指令
符号定义伪指令
段定义伪指令
结束伪指令
过程定义伪指令
宏命令伪指令
35 35
一、数据定义伪指令

用于定义数据区中变量的类型及大小 格式:
[变量名] 伪指令助记符 操作数,… ;[注释]
符号地址 定义变量类型
定义变量值 及区域大小
36 36
1. 数据定义伪指令助常量、标号/名字、变量及表达式。

数字常量 字符串常量 例:‘A’

用单引号引起的字符或字符串
MOV AL,’A’
汇编时被译成对应的ASCII 码41H,42H,43H,44H

例:’ABCD’
19 19
2.标号/名字——指令或数据所在内存单元的符号地址
8

一个基本的汇编语言程序框架如下:
stack stack data
SEGMENT PARA ‘stack‘ DB 100 DUP(‘stack’) ENDS SEGMENT <数据、变量在此定义> ENDS
堆栈段 数据段
data
code
SEGMENT ASSUME CS:code, DS:data, ES:data, SS:stack start: MOV AX, data MOV DS, AX MOV ES, AX 真指令 <此处加入你自己的程序段> MOV AL, 4CH INT 21H code ENDS END start
如 Start : MOV AX, data JMP/CALL Start
PTR
Hello
有三个属性:
DB 06H,45H,44H
段地址:即标号所在段的段地址; 偏移量:标号所代表存储单元的段内偏移地址; 类 型:NEAR或FAR:(SHORT ?) NEAR—表示标号所在语句与转移指令/调用指令在 同一码段内,跳转时只需改变IP即可。 FAR —标号所在语句与转移指令/调用指令不在同 一代码段内。跳转时需改变CS和IP即可。 若没有对类型进行说明,默认为NEAR。 标号通常作为转移指令或CALL指令的转移地址。
27 27
OFFSET SEG
TYPE LENGTH SIZE
取值运算符例
MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA
LEA BX,DATA
等价于
28 28
5)取值运算符——TYPE、LENGTH、SIZE
取变量的类型(1,2,4) LENGTH 取所定义变量的长度 (即变量中元素的个数) SIZE 取所定义存储区的字节数 (=TYPE * LENGTH) 例:VAR DW 1,2,3,4,5
操作数可能放在存储器中,这就涉及操作数的地址。 程序中遇到转移指令或调用指令,也需要知道转移地址, 若采用具体地址就很不方便,一旦有错,改动也很麻烦。 于是人们采用标号或符号来代替地址,例:
LP1: MOV AX,VAR … LOOP LP1
(3)汇编语言——指令助记符,符号地址,标号,
伪指令等语言元素的集合以及这些元素使用的规则。 用汇编语言编写的程序叫汇编语言源程序。
16

注释——以分号开头,可放在指令后,也可 单独一行。 注意注解的写法。要写指令(段)在程序中 的作用,而不要写指令的操作。
例如:以下为同一条指令写的注释 1)MOV CX,100 ;传送100到CX 2)MOV CX,100 ;循环计数器置初值
显然,第二种写法要比第一种写法要好。
17
汇编语言的一个实例: hello.asm
逻辑运算符只能用于数字表达式中。 例: MOV CL,36H AND 0FH 经汇编后:MOV CL,06H
注意: 不要把逻辑运算符与逻辑运算指令混淆: 例:AND AX, 3FC0H AND 0FF00H 汇编后源操作数被翻译为:3F00H,所以上述指令与 AND AX, 3F00H等价。
25
3)关系运算符——EQ、NE、LT、GT、LE、GE

DB DW DD DQ DT
定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10字节型
37 37
数据定义伪指令例

DATA1 DB 11H,22H,33H,44H


DATA2 DW 11H,22H,3344H
23
1)算术运算符—— +、-、*、/,MOD 用于数字表达式, 例: MOV AX,4*1024 汇编后的形式为: MOV AX,4096 用于地址表达式, 例: LEA SI,TAB+3 若TAB的偏移地址为1000H,则汇编后的形式为: LEA SI,[1003H]
24
2)逻辑运算符—— AND、OR、XOR、NOT
22
4.表达式
如 Start : MOV AX, 16*8+TABLE
表达式是常数、寄存器、标号、变量与运算
符的组合。
有数字表达式和地址表达式两种。 汇编时按优先规则对表达式进行计算,计算
出具体的数值或地址。运行时不能改变。
表达式中的运算符有6类:算术、逻辑、关
系、取地址、属性、杂类。
30
例:MOV BYTE PTR[DI],0 ;字节类型 MOV WORD PTR[DI],0 ;字类型 MOV [DI],0B5H ;类型不定
PTR也可用来进行强制类型转换
例:STR1 DW ? MOV AX,STR1 MOV MOV AL,STR1
;STR1定义为字类型 ;合法 ;非法

31
20
3.变量
如 Start : MOV AX, data
PTR
变量——即内存中的存储单元或数据区。 变量名——是存储单元(数据区)的符号地址 或 名字。

变量也有三个属性: 段地址—变量所在段的段地址 偏移量—变量单元地址与段首地址之间的位移量。

型—有BYTE、WORD 、DWORD三种之一。
相关文档
最新文档