汇编语言课件第4章.

合集下载

[所有分类]第4章 汇编语言程序设计ppt课件

[所有分类]第4章  汇编语言程序设计ppt课件

JMP_128:MOV A,R3
RL A MOV DPTR,#JMPTAB
JMP @A+DPTR JMPTAB:AJMP ROUT00
AJMP ROUT01


AJMP ROUT7F
128个子程序首址

•说明:此程序要求128个转移目的地址(ROUT00 ~ROUT7FH)必须驻 留在与绝对转移指令AJMP相同的一个2KB存储区内。
第4章 汇编语言程序设计及知识
§4.1 编程的步骤、方法和技巧 §4.2 汇编语言源程序的编辑和汇编
2021/5/19
§4.1 编程的步骤、方法和技巧
§4.1.1 编程的步骤 §4.1.2 编程的方法和技巧 §4.1.3 汇编语言程序的基本结构
2021/5/19
编程的步骤
一、分析问题 二、确定算法 三、画程序流程图 四、编写程序
LOOP : CLR C SUBB A,@R1 JNC NEXT MOV A,@R1 SJMP NEXT1
NEXT: ADD A,@R1 NEXT1: INC R1
DJNZ R2,LOOP MOV MAX,A
2021/5/19
循环结构
例:在内部RAM的20H~ 2FH连续16个单元中存放单 字节无符号数。求16个无 符号数之和,并将其和存放 在31H、30H中。用R0作加 数指针,R7作循环次数计 数器。
一、顺序结构
顺序程序是最简单的程序结构,即顺序 结构。
程序按顺序一条一条地执行指令。
2021/5/19
顺序结构举例
例1 双字节乘法子程序。 (R4) (R3)×(R2)=[(R4) ·28+ (R3) ] ·(R2) =(R4) ·(R2) ·28+ (R3) ·(R2)

四章汇编语言程序设计ppt课件

四章汇编语言程序设计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;定义代码段

汇编语言第4章PPT课件

汇编语言第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

汇编语言-4课堂课件

汇编语言-4课堂课件



;程序
MOV AX,4C00H ;程序结束返回DOS
INT 21H
CODE ENDS
;代码段结束
END START
优质内容
4
简化段定义框架
·MODEL SMALL ·386 ·STACK ┇ ;堆栈段 ·DATA ┇ ;数据段
·CODE ;代码段
·STARTUP
┇ ;程序

·EXIT ;返回DOS
• 类型属性 • 变量的类型属性是指存取该变量中的数据所对应的字节数 • 有字节(BYTE)、字(WORD)、双字(DWORD)等
优质内容
17
变量定义时用到的操作符和表达式
• 当前位置计数器($) • 当前位置计数器($)表示当前的偏移值
【例4-4】下列指令是在数据段中定义的,画出其内存中的存储结构,并计算出符号常量LEN1和 LEN2的值。 X1 DB 1,2,3,5 LEN1 EQU $-X1 X2 DW 1234H LEN2 EQU $-X2
·CODE
;代码段
·STARTUP
MOV AX,X ;乘数X→AX
IMUL Y ;X×Y→DX:AX
MOV CX,AX ;
MOV BX,DX ;结果再存放到BX:CX中暂存
MOV AX,X ;X→AX
ADD AX,125 ;X+125→AX
CWD
;将AX转换成双字→DX:AX
SUB AX,CX ;低16位减法
MOV AX,4C00H ;程序结束返回DOS
INT 21H
CODE ENDS
;代码段结束
优质内容
6
END START
·MODEL SMALL ;选择编程模式为小模式

第4章汇编语言程序设计ppt课件

第4章汇编语言程序设计ppt课件

DATA1
11
22
33 44
DATA2
11
00
22
00
44
33
DATA3
22
0
0
0
22
0
0
0
XX
66
55 44 33
28
数据定义伪指令的几点 说明
伪指令的性质决定所定义变量的类型;
定义字符串必须用DB伪指令
例:
DATA1 DB ‘ABCD’,66H
41H
‘A’
42H
‘B’
43H
‘C’
44H
‘D’
AH
DISN:T D2X1H
功能号OAH 字符串在内存中的存放地址
58
2. 定义字符缓冲区
用户自定义缓冲区格式:
N1 N2
存放字符个数:≤255
存放键入的字符 整个缓冲区
实际键入字符数 最大可键入字符数
0DH
59
输入字符串程序段
DAT1 DB 20,?,20 DUP(?)

LEA DX,DAT1 MOV AH,0AH INT 21H
定义的变量为4字型(8字节)
定义的变量为10字节型
26
数据定义伪指令例
DATA1 DB 11H,22H,33H,44H DATA2 DW 11H,22H,3344H DATA3 DD 11H*2,22H,33445566H
以上变量在内存中的 存放形式
27
数据定义伪指令例_变量在内存中的
分布
DSEG SEGMENT DATA1 DB 1,2, 3 DUP(?) DATA2 DW 1234H
DSEG ENDS ESEG SEGMENT
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
… 78 56 34 12 00 00 00 00 00 00 …
§4.3 调整偏移量伪指令
[复习]
内存储器分段管理思想:存储空间划分为若干段, 每段内的某个存储单元地址由段起始地址与在段内 的偏移量表示。 物理地址=段起始单元+偏移量(EA) 起始地址由段寄存器提供信息获得 EA由指令地址段获得
③ 注意$和IP是有极大区别的 $ 汇编程序时汇编语言源程序进行转换时, 为所生成二进制代码分配存 储空间时,表示当前位置 IP 计算机在运行机器代码程序时表示即将取 出执行的下一条指令的存储 地址(EA)
归纳小结: 最常用的:EVEN 谨用: ORG与$
§4.4 复合内存变量的定义
1. 重复说明符DUP (1)基本格式 汇编语言提供了变量的重复说明符DUP,其说明的 一般形式如下: count DUP (表达式, 表达式, …, 表达式) 解释:count是重复次数,(表达式, 表达式, …, 表达式)是被重复的部分,“表达式”可以是存储单 元的初值,也可以是含义另一个DUP的式子。如果 在表达式的括号中有多个表达式,那么,它们之间 要用逗号‘,’分开。
1. 调开偏移量伪指令作用
汇编时指示所生成代码存储偏移量
2. 偏移调整伪指令
(1)偶对起EVEN ①偶对齐伪指令格式: EVEN ②伪指令的功能是:告诉汇编程(Assember), 本伪指令下面的内存变量从下一个偶地址单元开始 分配。 如果下一个偏移量是偶地址,那么,该伪指令不 起作用;否则,汇编程序将空出一个字节,从下一 偶地址开始为其后变量分配内存单元。
2. 结构类型的定义
(1)C++的结构类型定义 以学生基本资料为例 Struet student { long num ; char name[20] char sex ; int age ; int score[50] } ;
;
;
// 学号 // 姓名 // 性别 // 年龄 // 成绩
其实质是全部是publie的数据成员,没有函数成员 的类。 其成员的引用: Student Stu ; //定义结构变量Stu Stu· num=02351105 ; //学号 Stu· age = 19 ; //年龄 for (int i=0 ; i<50 ; i++) cin 》 Stu·score[i] ;
②例如: COURSE STRUC NO DD ? CNAME DB ‘Assember’ SCORE DW 0 COURSE ENDS
A NO
s
s
e
m
b
e
r SCORE
CNAME
(2)结构类型变量的定义 在定义某个结构类型后,程序员就可以说明该结 构类型的内存变量。它的说明形式与前面介绍的简 单数据类型的变量说明基本上相一致。其说明格式 如下: [变量名] 结构名 <[字段值表]> 解释: 变量名即为该结构类型的变量名,它可省缺。如 果省缺,则不能用符号名来访问该内存单元; 字段值表是给字段赋初值,中间用逗号‘,’分 开,其字段值的排列顺序及类型应与该结构说明 时各字段相一致; 如果结构变量中某字段用其定义时的缺省值,那 么,可用逗号来表示;如果所有字段都如此,则 可省去字段值表,但必须保留尖括号“<”、“>”。
(1)基本形式: [标号] DD 表达式 (2)存储: 双字变量的定义符为 DD/DWORD (Define Double word),每个双字变量占用二个连续的字单元 (四个 字节)。 例如: DW1 DW 12345678H, ? DW2 DW 0abcd1243H 上述定义的内存分配如下所示,双字的内容也是 按“高高低低”的原则来存储的编语言中,标识符最多由31个字母、 数字及规定的特殊字符(?、@、_、$)等组成,但它 不能用数字开头。标号、内存变量名、子程序名和 宏名等都是标识符。通常情况下,汇编语言不区分 标识符中字母的大小写。
2.规则 建议: (与高级语言一致)
字母
字母 数字 下划线 或 字母 数 字 字母
… ‘I ‘ ’ ‘ ‘ a’ ‘ m’ ‘ ‘ ‘ a’ ‘ ‘s ‘ ‘ ’ t’ u’ ‘ ‘ d’ ‘ e’ ‘ ‘t n’ ’ ‘.’ …
上面的例子也可改写为另一种等价的语句:
MSG1 DB ‘I’, ‘ ‘, ‘a’, ‘m’, ‘ ‘, ‘a’, ‘ ‘, ‘s’, ’t’, ’u’, ’d’, ’e’, ’n’, ’t’, '.'
③假设有下列变量定义,且变量 word1的偏移量为0。 word1 DW 1234h byte1 DB 56h word2 DW 0abcdh ORG 1 byte2 DB ? word3 DW ? byte3 DB ?
(4) 偏移量计数器的值 ①含义:表汇编程序对汇编语言程序进行转换时, 为生成代码分配存储空间的 当前值(偏移量) ②例如: W1 DW $, $ ORG $+3 ;从当前地址开始空3个字节 B1 DB 43h 假设:在给变量W1分配内存单元 时,当前偏移量计数器的值为2。
显然,前者要比后者方便得多,所以,在程序中 都采用前者的书写方式。
4. 字变量定义
(1)基本形式: [标号] DW 表达式 (2)存储:每个字占2个字节——高字节用高地址; 低字节用低地址 例如:
Word1 DW 89H, 1909H, -1 DW 0abcdH, ?, 0
… 89 00 09 19 FF FF CD AB --00 00 …
… 78 56 34 12 ----43 12 CD AB
6. 六字节变量定义
(1)基本形式: [标号] DF 表达式 (2)存储: 六 字 节 变 量 的 定 义 符 为 DF/FWORD (Define Farword)。每个六字节变量占用六个连续的字节。 例如:
DF1 DF 1234567890abH, 0H, -1 DF 1abcd23H 第一个六字节常量1234567890abH在内存中的分 配方式如下所示,它也是按“高高低低”的原则来 存储的。其它六字节常量的存储方式与此一致。
不区分同一字母的大小 一般最好不要超过8个字符 ABCDH是标识符,0ABCDH是16#数
§ 4.2 简单内存变量的定义
1. 含义 在内存储单元起符号名,以便通过符号名访问它, 不然就要求直接通过存储单元偏移量来访问。
2. 内存变量定义的一般形式
定义内存变量语句是程序中经常使用的伪指令语句, 其一般格式如下页所示:
(1)汇编中结构类型的定义——类似C++/C ① 结构定义基本类型 结构名 STRUC [Alignment] [, NONUNIQUE] 数据定义语句序列 结构名 ENDS 其中: 结构名:是一个合法的标识符,且具有唯一性。 结构范围:从“结构名 STRUC”开始,到“结构 名 ENDS”结束 Alignment:用1,2或4(应为2的幂值)来定义 结构中字段的字节边界(Byte boundary) NONUNIQE:要求结构中的字段必须用全名才能 访问
如果下一个地址正好能被Num整除,那么,该伪 指令不起作用; 否则,汇编程序将空出若干个字节,直到下一个 地址能被Num整除为止。
试比较下面二组变量定义,它们的对齐效果一致吗? B1 DB 12H B1 DB 12H EVEN ALIGN 2 W1 DW 4567H W1 DW 4567H
(3) 调整偏移量伪指令ORG ①调整偏移量伪指令格式: ORG 数值表达式 ②伪指令的作用是:告诉汇编程序,本伪指令下 面的内存变量从该“数值表达式”所指定的偏移量 开始分配。
由于字变量的数据是按照“高高低低”的原则存 于存储单元之中的,而字节数据是按照排列顺序存 于存储单元中的,所以,它们的存储方式有所不同 。
试比较下面两个定义的存储顺序。 B1 DB ‘AB’ W1 DW ‘AB’ 其中:41H和42H分别是’A’和’B’的ASCII码。

41
42
42
41

5. 双字变量定义
… ab 90 78 56 34 12 …
7. 八字节变量
(1)基本形式: [标号] DQ 表达式 (2) 存储 : 八字节变量的定义符为 DQ/QWORD(Define Quadword)。每个八字节变量占用八个连续的字节。 例如: DQ1 DQ 12345678H, 0H, -1234H DQ ?, 1238H, ? 第一个八字节常量12345678H在内存中的分配方 式如下所示,其存储原则与前面相同。其它八字节 常量的存储方式与此一致。
③ 例子 假设有下列变量定义,并且变量B1的偏移量是 偶数。 B1 DB 12H;为了表示方便,不妨再假设其偏 移量为:xxxx0H W1 DW 4567H 可把前面的变量定义 改变成下列形式: B1 DB 12H EVEN W1 DW 4567H
(2) 对齐伪指令ALIGN
①对齐伪指令格式: ALIGN Num 其中:Num必须是2的幂,如:2、4、8和16等。 ②伪指令的作用是:告诉汇编程序,本伪指令下 面的内存变量必须从下一个能被Num整除的地址开 始分配。
②利用偏移量访问某字节——不直观,少用 例如: 设有 EXAM1 STRUC F1 DW ? F2 DB ? EVEN ;偶对齐 F3 DW ? EXAM1 ENDS 并设有定义 E1 EXAM1 <1234H, ’A’, 8765H> ;定义 EXAM1的一个变量E1
下面二种方法都可把结构变量E1中字段F3的内容 赋给寄存器AX 方法(1)用字段名直接引用 MOV AX, E1.F3 方法(2)用字段的偏移量间接引用 LEA SI, E1 MOV AX, [SI+4] ;其中4是字段F3的偏移量
… 78 56 34 12 00 00 00 00 …
8. 十字节变量
(1)基本形式: [标号] DT 表达式 (2) 存储:定义十字节变量的定义符为 DT/TBYTE (Define Tenbytes)。每个十字节变量占用十个连续 的字节。 例如:
相关文档
最新文档