HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院制作者 钱晓捷主讲人 钱晓捷
Assembly Language
Programming
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院为什么要学习汇编语言
教学目的
从软件角度,理解计算机工作原理
为相关课程提供基本知识
全面理解计算机程序设计语言
应用目的
编写高效,底层的核心程序
编写直接控制硬件或容量较小的程序
信息安全关键程序的编写与分析
……
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院教学内容
第 1章 汇编语言基础知识
第 2章 8086的指令系统
第 3章 汇编语言程序格式
第 4章 基本汇编语言程序设计
第 5章 高级汇编语言程序设计 ( 简介 )
第 6章 32位指令及其编程 ( 简介 )
大学微机技术系列课程教学辅助网站
http://www2.zzu.edu.cn/qwfw
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院教学重点第 1章是用汇编语言进行程序设计所需要了解的基本知识 。 在课堂上,我们重点掌握几个内容:
PC机软硬件系统
认识汇编语言
基础是熟悉寄存器组
难点是各种寻址方式第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.1 计算机系统概述
硬件 ( Hardware)
中央处理单元 CPU
控制器,运算器,寄存器
存储器
主存储器,RAM和 ROM
辅助存储器:磁盘,光盘,U盘
外部设备
输入设备和输出设备
软件 ( Software)
系统软件
应用软件第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院微型计算机的系统组成
I/O
接口主存储器系统总线
CPU
寄存器控制器运算器 辅助存储器输入设备输出设备第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言程序员看到的硬件
中央处理单元 CPU( Intel 80x86)
对汇编语言程序员,最关心其中的 寄存器
存储器 ( 主存储器 )
呈现给汇编语言程序员的,是 存储器地址
外部设备 ( 接口电路 )
汇编语言程序员看到的是 端口 ( I/O地址 )
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器( Register)
寄存器是 CPU内部的高速存储单元
它们为处理器提供各种操作所需要的数据或地址等信息
汇编语言程序采用它们各自的符号名
16位 Intel 8086/80286 CPU中有
AX BX CX DX
SI DI BP SP
32位 80386/80486/Pentium系列 CPU中有
EAX EBX ECX EDX
ESI EDI EBP ESP
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储器地址( Address)
存储器是由大量存储单元组成,需要用编号区别每个单元,编号=地址
存储器地址 是存储器中存储单元的编号
每个存储单元存放一个字节量的数据
一个字节 B( Byte) = 8个二进制位 b( bit)
采用十六进制数来表达地址
Intel 8086具有 1兆字节 ( 1MB) 存储器容量
存储器地址表示为,00000H~ FFFFFH
其中大写 H( 或小写 h) 表示是十六进制数第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院端口( Port)
I/O接口电路由接口寄存器组成,需要用编号区别各个寄存器,编号=地址
I/O地址 是接口电路中寄存器的编号
端口 是 I/O地址的通俗说法
系统通过这些端口与外设进行通信
采用十六进制数来表达端口
Intel 8086支持 64K个 8位端口
I/O地址可以表示为,0000H~ FFFFH
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院计算机的程序设计语言
机器语言 ( MachineLanguage)
B8 64 00 05 00 01
汇编语言 ( AssemblyLanguage)
mov ax,100;取得一个数据 100( MOV是传送指令 )
add ax,256;实现 100+256( ADD是加法指令 )
高级语言 ( High-levelLanguage)
100+ 256
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院什么是汇编语言
以助记符形式表示计算机指令
助记符 ( mnemonic) 是便于人们记忆,并能描述指令功能和指令操作数的符号
助记符是表明指令功能的英语单词或其缩写
汇编格式指令以及使用它们编写程序的规则就形成汇编语言 ( AssemblyLanguage)
汇编语言程序:用汇编语言书写的程序
汇编程序:将汇编语言程序,汇编,成机器代码目标模块的程序汇编语言程序与汇编程序是两个概念第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的比较 -1
汇编语言与处理器密切相关
↘ 汇编语言程序的通用性,可移植性较差
高级语言与具体计算机无关
↗ 高级语言程序是标准化语言,可在多种计算机上编译后执行汇编语言,× 高级语言,√
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的比较 -2
汇编语言功能有限,涉及硬件细节
↘ 程序编写比较繁琐,调试比较困难
高级语言提供了强大的功能,不必关心琐碎问题
↗ 类似自然语言的语法,易于掌握和应用汇编语言,× 高级语言,√
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的比较 -3
汇编语言本质上就是机器语言
↗ 可以直接,有效地控制计算机硬件
↗ 易于产生速度快,容量小的高效率目标程序
高级语言不针对具体计算机系统
↘ 不易直接控制计算机的各种操作
↘ 目标程序比较庞大,运行速度较慢汇编语言,√ 高级语言,×
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言的特点
汇编语言的优点:
直接控制计算机硬件部件
编写,时间,和,空间,两方面最有效程序
汇编语言的缺点:
与处理器密切有关
需要熟悉计算机硬件系统,考虑许多细节
编写繁琐,调试,维护,交流和移植困难汇编语言,? 高级语言,?
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的混合编程
汇编语言的优点使得它在程序设计中占有重要的位置,不可被取代
汇编语言的缺点使得人们主要采用高级语言进行程序开发工作
有时需要采用高级语言和汇编语言混合编程,
互相取长补短,更好地解决实际问题混合编程 取长补短第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.2 数据表示
1.2.1数制
二进制数,十六进制数
它们与十进制数的相互转换
1.2.2编码
BCD码和 ASCII码的规律
1.2.3有符号数的表示法
有符号整数的补码表示
1.2.4二进制运算
二进制的算术运算和逻辑运算
十进制的加减运算第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
BCD码 ( Binary Coded Decimal)
二进制编码的十进制数
一个十进制数位 0~ 9用 4位二进制编码来表示
常用 8421BCD码:低 10个 4位二进制编码表示
压缩 BCD码:一个字节表达两位 BCD码
非压缩 BCD码:一个字节表达一位 BCD码 ( 低
4位表达数值,高 4位常设置为 0)
BCD码很直观
BCD码,01001001 0111 1000.0001 0100 1001
十进制真值,4978.149
BCD码便于输入输出,表达数值准确第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
ASCII码 (美国标准信息交换码)
标准 ASCII码用 7位二进制编码,有 128个
不可显示的控制字符前 32个和最后一个编码回车 CR,0DH 换行 LF,0AH 响铃 BEL,07H
可显示和打印的字符,20H后的 94个编码
数码 0~ 9,30H~ 39H
大写字母 A~ Z,41H~ 5AH
小写字母 a~ z,61H~ 7AH
空格,20H
扩展 ASCII码:最高 D7位为 1,表达制表符第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院真值和机器数
真值,现实中真实的数值
机器数,计算机中用 0和 1数码组合表达的数值
无符号数,只表达 0和正整数的定点整数
有符号数,表达负整数,0和正整数的定点整数
符号位需要占用一个位
常用机器数的最高位
0表示正数,1表示负数
定点数,固定小数点的位置表达数值的机器数
定点整数:将小数点固定在机器数的最右侧表达的整数
定点小数:将小数点固定在机器数的最左侧表达的小数
浮点数,小数点浮动表达的实数第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院补码
有符号整数在计算机中默认采用补码
最高位表示符号:正数用 0,负数用 1
正数补码:直接表示数值大小 ( 同无符号数 )
负数补码:将对应正数补码取反加 1
[105]补码 = 01101001B
[-105]补码 = [01101001B]取反+ 1
= 10010110B+ 1= 10010111B
8位二进制补码表示的数值范围,-128~ +127
16位二进制补码表示的数值范围,-215~ +215-1
32位二进制补码表示的数值范围,-231~ +231-1
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院负数求补
负数真值,取反加 1”得机器数补码
负数补码,取反加 1”得到负数真值补码,11100000B
真值,-([11100000]求反+ 1)= -(00011111+1)
= -00100000= -25= -32
负数求补运算,等效于用带借位的 0作减法真值,-8,补码,[-8]补码 = 00H-08H= F8H
补码,11111000,真值,-(00H-F8H)= -08H= -8
用十六进制表达和运算,方便 !
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院十六进制数的加减运算
二进制和十六进制数之间具有对应关系
整数从左向右
小数从右向左
每 4个二进制位对应一个十六进制位
00111010B= 3AH,F2H= 11110010B
十六进制数的加减运算类似十进制
逢 16进位 1,借 1当 16
23D9H+ 94BEH= B897H
A59FH- 62B8H= 42E7H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.3 Intel 80x86系列微处理器
80386
80486
奔腾奔腾 II
奔腾 4
80286
8086
奔腾 III
IA-64(安腾)
4004
不是我不明白,
这世界变化太快。
扎扎实实掌握知识,
以不变应万变!
IA-32
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.4 PC微型计算机
本课程采用 16位或 32位个人计算机
16位 PC机
8088 CPU的 IBM PC和 IBM PC/XT
80286CPU的 IBM PC/AT
16位 80x86CPU的 PC兼容机
32位 PC机
采用 32位 80x86CPU而形成的微机
基本结构仍然源于 PC/AT机
人们日常谈论的 PC机或微机是上述微型计算机系统的统称第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院微机的软件
系统软件,DOS平台
MS-DOS6.22实地址方式
Windows的 MS-DOS模拟环境
应用软件:开发汇编语言程序涉及
文本编辑器
汇编程序
连接程序
调试程序
集成化开发环境本教材提供
DOS-MASM615.EXE
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院文本编辑器( Editor)
文本编辑器用于编辑无任何格式的文档
程序设计要采用文本编辑器编写源程序
常见的文本编辑软件有很多,如
MS-DOS的 EDIT全屏幕编辑器
Windows的 Notepad计事本
程序开发系统中的程序编辑器
Turbo C
Visual Studio
MASM的 PWB
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编程序( Assembler)
汇编程序将汇编语言源程序翻译 ( 称为,汇编,) 成机器代码目标模块
本课程采用微软的 MASM6.15
MASM的最后一个独立版本 MASM6.11
可免费升级为 MASM6.14( 支持 SSE)
Visual C++中有 MASM 6.15( 支持 SSE2)
Visual C++.NET 2003有 MASM 7.10
Visual C++.NET 2005的 MASM支持 Penium 4
的 SSE3指令系统,同时有 ML64.EXE程序用于支持 64位指令系统第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院连接程序( Linker)
连接程序将汇编后的目标模块转换为可执行程序
每个程序开发环境都有连接程序
连接程序的文件名通常是,LINK.EXE
32位 Windows连接程序不同于 16位 DOS连接程序源程序 可执行文件目标模块文本编辑器 汇编程序 连接程序 调试程序第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院调试程序( Debugger)
调试程序进行程序排错,分析等
本课程采用 MASM的 CodeView
DOS的 DEBUG程序
还有 TurboDebugger等源程序 可执行文件目标模块文本编辑器 汇编程序 连接程序 调试程序第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院集成化开发环境
进行程序设计使用的各种软件的有机集合,
有文本编辑器,有语言翻译程序,有连接程序,还组合有调试程序等
大型的程序设计项目往往要借助这种集成开发环境,也就是软件开发工具 ( 包 )
MASM提供程序员工作平台 PWB
微软的 VisualStudio开发系统第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
MASM编程环境的使用
1,进入模拟 DOS环境
2,将 MASM目录作为当前目录
3,开发汇编语言程序
ml /Fl filename.asm
4,运行可执行程序
5,调试可执行程序定制进入 MASM快捷方式 ML615
创建快速开发文件 MLL.BAT
构造方便的调试环境 CV.BAT
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.5 8086微处理器
微处理器是微机的硬件核心,主要包含指令执行的运算和控制部件,还有多种寄存器
对程序员来说,微处理器抽象为以名称存取的寄存器
8086内部结构有两个功能模块,完成一条指令的取指和执行功能
总线接口单元 BIU:负责读取指令和操作数
执行单元 EU:负责指令译码和执行
8086的内部结构内部暂存器
IP
ES
SS
DS
CS
输入 /输出控制电路外部总线执行部分控制电路 1 2 3 4 5 6
∑
ALU
标志寄存器
AH AL
BH BL
CH CL
DH DL
SP
BP
SI
DI
通用寄存器地址加法器指令队列缓冲器执行部件 ( EU) 总线接口部件 ( BIU)
16位
20位
16位
8位
8086的寄存器组第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
8086的通用寄存器
8086的 16位通用寄存器是:
AX BX CX DX
SI DI BP SP
其中前 4个数据寄存器都还可以分成高 8位和低 8位两个独立的寄存器
8086的 8位通用寄存器是:
AH BH CH DH
AL BL CL DL
对其中某 8位的操作,并不影响另外对应 8位的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据寄存器
数据寄存器用来存放计算的结果和操作数,
也可以存放地址
每个寄存器又有它们各自的专用目的
AX--累加器,使用频度最高,用于算术,逻辑运算以及与外设传送信息等;
BX--基址寄存器,常用做存放存储器地址;
CX--计数器,作为循环和串操作等指令中的隐含计数器;
DX--数据寄存器,常用来存放双字长数据的高 16位,或存放外设端口地址 。
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院变址及指针寄存器
变址寄存器常用于存储器寻址时提供地址
SI是源变址寄存器
DI是目的变址寄存器
指针寄存器用于寻址内存 堆栈 内的数据
SP为堆栈指针寄存器,指示栈顶的偏移地址,
不能再用于其他目的,具有专用目的
BP为基址指针寄存器,表示数据在堆栈段中的基地址
SI和 DI在串操作指令有特殊用法
SP和 BP寄存器与 SS段寄存器联合使用确定堆栈段中的存储单元地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院堆栈( Stack)
堆栈是主存中一个特殊的区域
它采用 先进后出 FILO( First In Last Out)
或后进先出 LIFO( Last In First Out) 的原则进行存取操作,而不是随机存取操作方式
堆栈通常由处理器自动维持
在 8086中,由堆栈段寄存器 SS和堆栈指针寄存器 SP共同指示第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令指针 IP
指令指针寄存器 IP,指示代码段中指令的偏移地址
它与代码段寄存器 CS联用,确定下一条指令的物理地址
计算机通过 CS,IP寄存器来控制指令序列的执行流程
IP寄存器是一个专用寄存器第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院标志寄存器
标志 ( Flag) 用于反映指令执行结果或控制指令执行形式,形成 16位标志寄存器 FLAGS( 程序状态字 PSW寄存器 )
状态标志--用来记录程序运行结果的状态信息,
许多指令的执行都将相应地设置它
CF ZF SF PF OF AF
控制标志--可由程序根据需要用指令设置,用于控制处理器执行指令的方式
DF IF TF
OF
1115 12
DF
10
IF
9
TF
8
SF
7
ZF
6 5
AF
4 3
PF
2 1
CF
0
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院进位标志 CF( Carry Flag)
当运算结果的最高有效位有进位 ( 加法 ) 或借位 ( 减法 ) 时,进位标志置 1,即 CF = 1;
否则 CF= 0。
3AH + 7CH= B6H,没有进位,CF= 0
AAH + 7CH= ( 1) 26H,有进位,CF= 1
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院零标志 ZF( Zero Flag)
若运算结果为 0,则 ZF= 1;
否则 ZF = 0
3AH + 7CH= B6H,结果不是零,ZF= 0
84H + 7CH= ( 1) 00H,结果是零,ZF= 1
注意,ZF为 1表示的结果是 0
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院符号标志 SF( Sign Flag)
运算结果最高位为 1,则 SF = 1;否则
SF = 0
3AH + 7CH= B6H,最高位 D7= 1,SF= 1
84H + 7CH= ( 1) 00H,最高位 D7= 0,SF= 0
有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的状态第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院奇偶标志 PF( Parity Flag)
当运算结果最低字节中,1”的个数为零或偶数时,PF = 1;否则 PF = 0
3AH + 7CH= B6H= 10110110B
结果中有 5个 1,是奇数,PF= 0
PF标志仅反映最低 8位中,1”的个数是偶或奇,即使是进行 16位字操作第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院溢出标志 OF( Overflow Flag)
若算术运算的结果有溢出,则 OF= 1;
否则 OF= 0
3AH + 7CH= B6H,产生溢出,OF= 1
AAH + 7CH= ( 1) 26H,没有溢出,OF= 0
问题什么是溢出?
溢出和进位有什么区别?
处理器怎么处理,程序员如何运用?
如何判断是否溢出?
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院什么是溢出
处理器内部以补码表示有符号数
8位表达的整数范围是:+ 127~- 128
16位表达的范围是:+ 32767~- 32768
如果运算结果超出这个范围,就产生了溢出
有溢出,说明有符号数的运算结果不正确
3AH+ 7CH= B6H,就是 58+ 124= 182,
已经超出- 128~+ 127范围,产生溢出,故 OF= 1;
另一方面,补码 B6H表达真值是 -74,
显然运算结果也不正确第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院溢出和进位的对比例 1,3AH+ 7CH= B6H
无符号数运算,58+ 124= 182
范围内,无进位有符号数运算,58+ 124= 182
范围外,有溢出例 2,AAH+ 7CH= ( 1) 26H
无符号数运算,170+ 124= 294
范围外,有进位有符号数运算,- 86+ 124= 28
范围内,无溢出第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院如何运用溢出和进位
处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志 CF;
同时,根据是否超出有符号数的范围设置溢出标志 OF
应该利用哪个标志,则由程序员来决定 。 也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,
则要注意是否溢出第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院溢出的判断
判断运算结果是否溢出的简单规则:
只有当两个相同符号数相加 ( 包括不同符号数相减 ),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确
其他情况下,则不会产生溢出第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院方向标志 DF( Direction Flag)
用于串操作指令,控制地址的变化方向:
设置 DF= 0,存储器地址自动增加;
设置 DF= 1,存储器地址自动减少 。
CLD指令复位方向标志,DF= 0
STD指令置位方向标志,DF= 1
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据信息的表达单位
计算机中信息的单位
二进制位 Bit,存储一位二进制数,0或 1
字节 Byte,8个二进制位,D7~ D0
字 Word,16位,2个字节,D15~ D0
双字 DWord,32位,4个字节,D31~ D0
最低有效位 LSB:数据的最低位,D0位
最高有效位 MSB:数据的最高位,对应字节,
字,双字分别指 D7,D15,D31位第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据的存储格式
D7 D0 字节
D15 D0 字
D31 D0 双字
D7 D0
00006H
78H 00005H
56H 00004H
12H 00003H
34H 00002H
00001H
00000H 低地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储单元及其存储内容
主存储器需要利用地址区别
每个存储单元都有一个编号;被称为存储器地址
每个存储单元存放一个字节的内容
0002H单元存放有一个数据 34H
表达为 [0002H]= 34H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院多字节数据存放方式
多字节数据在存储器中占 连续的多个存储单元,
存放,低字节存入低地址,高字节存入高地址
表达:用 低地址表示 多字节数据占据的地址空间
2号,字,单元的内容为:
[0002H] = 1234H
2号,双字,单元的内容为:
[0002H] = 78561234H
80x86处理器采用,低对低,高对高,,小端方式 LittleEndian
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储器的分段管理
8086 CPU有 20条地址线
最大可寻址空间为 220= 1MB
物理地址范围从 00000H~ FFFFFH
8086CPU 将 1MB 空 间 分 成 许 多 逻辑段
( Segment)
每个段最大限制为 64KB
段地址的低 4位为 0000B
这样,一个存储单元除具有一个唯一的 物理地址 外,还具有多个 逻辑地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院物理地址和逻辑地址
每个物理存储单元有一个唯一的 20位编号,即物理地址:
00000H~ FFFFFH
分段后用户编程时,采用逻辑地址:
段基地址,段内偏移地址分隔符第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院逻辑地址
段地址 说明逻辑段在主存中的起始位置
8086规定段地址必须是模 16地址,xxxx0H
省略低 4位 0000B,段地址就可以用 16位数据表示,就能用 16位 段寄存器 表达段地址
偏移地址 说明主存单元距离段起始位置的偏移量
每段不超过 64KB,偏移地址也可用 16位 数据表示第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院物理地址和逻辑地址的转换
将逻辑地址中的段地址左移 4位,加上偏移地址就得到 20位物理地址
一个物理地址可以有多个逻辑地址逻辑地址 1460:100,1380:F00
物理地址 14700H 14700H
14600H
+ 100H
14700H
13800H
+ F00H
14700H
段地址左移 4位加上偏移地址得到物理地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段寄存器
8086有 4个 16位段寄存器,每个段寄存器确定一个逻辑段的起始地址,每种逻辑段均有各自的用途
CS( Code Segment)
指明代码段的起始地址
SS( Stack Segment)
指明堆栈段的起始地址
DS( Data Segment)
指明数据段的起始地址
ES( Extra Segment)
指明附加段的起始地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院代码段 ( Code Segment)
代码段用来存放程序的指令序列
代码段寄存器 CS存放代码段的段地址
指令指针寄存器 IP指示下条指令的偏移地址
处理器利用 CS:IP取得下一条要执行的指令第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院堆栈段 ( Stack Segment)
堆栈段确定堆栈所在的主存区域
堆栈段寄存器 SS存放堆栈段的段地址
堆栈指针寄存器 SP指示堆栈栈顶的偏移地址
处理器利用 SS:SP操作堆栈顶的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据段 ( Data Segment)
数据段存放运行程序所用的数据
数据段寄存器 DS存放数据段的段地址
各种主存寻址方式 ( 有效地址 EA) 得到存储器中操作数的偏移地址
处理器利用 DS:EA存取数据段中的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院附加段 ( Extra Segment)
附加段是附加的数据段,也用于数据的保存:
附加段寄存器 ES存放附加段的段地址
各种主存寻址方式 ( 有效地址 EA) 得到存储器中操作数的偏移地址
处理器利用 ES:EA存取附加段中的数据
串操作指令将附加段作为其目的操作数的存放区域第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院如何分配各个逻辑段
程序的 指令序列 必须安排在代码段
程序使用的 堆栈 一定在堆栈段
程序中的 数据 默认是安排在数据段,
也经常安排在附加段,尤其是串操作的目的区必须是附加段
数据的存放比较灵活,实际上可以存放在任何一种逻辑段中第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段超越前缀指令
没有指明时,一般的数据访问在 DS段;使用
BP访问主存,则在 SS段
默认的情况允许改变,需要使用段超越前缀指令; 8086指令系统中有 4个:
CS,;代码段超越,使用代码段的数据
SS,;堆栈段超越,使用堆栈段的数据
DS,;数据段超越,使用数据段的数据
ES,;附加段超越,使用附加段的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段超越的示例
没有段超越的指令实例:
MOV AX,[2000H] ; AX←DS,[2000H];从默认的 DS数据段取出数据
采用段超越前缀的指令实例:
MOV AX,ES:[2000H] ; AX←ES,[2000H];从指定的 ES附加段取出数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段寄存器的使用规定访问存储器的方式 默认 可超越 偏移地址取指令 CS 无 IP
堆栈操作 SS 无 SP
一般数据访问 DS CS ES SS 有效地址 EA
BP基址的寻址方式 SS CS ES DS 有效地址 EA
串操作的源操作数 DS CS ES SS SI
串操作的目的操作数 ES 无 DI
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.6 8086的寻址方式
指令系统设计了多种操作数的来源
寻找操作数的过程就是操作数的寻址
操作数采取哪一种寻址方式,会影响机器运行的速度和效率
如何寻址一个操作数对程序设计很重要上机实践的建议配合调试程序单步执行每条指令或调用 IO.LIB的子程序显示结果第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令的组成
指令由操作码和操作数两部分组成
操作码 说明计算机要执行哪种操作,如传送,运算,移位,跳转等操作,它是指令中不可缺少的组成部分
操作数 是指令执行的参与者,即各种操作的对象
有些指令不需要操作数,通常的指令都有一个或两个操作数,个别指令有 3个甚至 4个操作数操作码 操作数第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令的操作码和操作数
每种指令的 操作码,
用一个唯一的助记符表示 ( 指令功能的英文缩写 )
对应着机器指令的一个二进制编码
指令中的 操作数,
可以是一个具体的数值
可以是存放数据的寄存器
或指明数据在主存位置的存储器地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令的助记符格式操作码 操作数 1,操作数 2 ; 注释
操作数 2,称为 源操作数 src,它表示参与指令操作的一个对象
操作数 1,称为 目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果
分号后的内容是对指令的解释第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院传送指令 MOV的格式
MOV dest,src ; dest←src
功能:将源操作数 src传送至目的操作数 dest
MOV AL,05H ; AL← 05H
MOV BX,AX ; BX←AX
MOV AX,[SI] ; AX←DS,[SI]
MOV AX,[BP+06H] ; AX←SS,[BP+06H]
MOV AX,[BX+SI] ; AX←DS,[BX+SI]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院传送指令 MOV的功能源操作数 src
目的操作数 dest30H
30H
被传送的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院立即数寻址方式
指令中的操作数直接存放在机器代码中,紧跟在操作码之后 ( 操作数作为指令的一部分存放在操作码之后的主存单元中 )
这种操作数被称为立即数 imm
它可以是 8位数值 i8( 00H~ FFH)
也可以是 16位数值 i16( 0000H~ FFFFH)
立即数寻址方式常用来给寄存器赋值
MOV AL,05H ; AL← 05H
MOV AX,0102H ; AX← 0102H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院立即数寻址指令
MOV AX,0102H ; AX← 0102H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器寻址方式
操作数存放在 CPU的内部寄存器 reg中:
8位寄存器 r8:
AH,AL,BH,BL,CH,CL,DH,DL
16位寄存器 r16:
AX,BX,CX,DX,SI,DI,BP,SP
4个段寄存器 seg:
CS,DS,SS,ES
MOVAX,1234H ; AX← 1234H
MOVBX,AX ; BX←AX
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器寻址指令
MOV BX,AX ; BX←AX
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储器寻址方式
指令中给出操作数的主存地址信息 ( 偏移地址,称之为有效地址 EA),而段地址在默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
1,直接寻址方式
2,寄存器间接寻址方式
3,寄存器相对寻址方式
4,基址变址寻址方式
5,相对基址变址寻址方式第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院直接寻址方式
有效地址在指令中直接给出
默认的段地址在 DS段寄存器,可使用段超越前缀改变
MOV AX,[2000H]; AX←DS,[2000H];指令代码,A100 20
MOV AX,ES:[2000H]; AX←ES,[2000H];指令代码,26A1 00 20
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院直接寻址指令
MOVAX,[2000H] ; AX←DS,[2000H]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器间接寻址方式
有效地址存放在基址寄存器 BX或变址寄存器 SI,DI中
默认的段地址在 DS段寄存器,可使用段超越前缀改变
MOVAX,[SI] ; AX←DS,[SI]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器相对寻址方式
有效地址是寄存器内容与有符号 8位或 16位位移量之和,寄存器可以是 BX/BP或 SI/DI
有效地址= BX/BP/SI/DI+ 8/16位位移量
段地址对应 BX/SI/DI寄存器默认在 DS,对应 BP寄存器默认在 SS;可用段超越前缀
MOVAX,[DI+06H] ; AX←DS,[DI+06H]
MOVAX,[BP+06H] ; AX←SS,[BP+06H]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院基址变址寻址方式
有效地址由基址寄存器 ( BX或 BP) 的内容加上变址寄存器 ( SI或 DI) 的内容构成:
有效地址= BX/BP+ SI/DI
段地址对应 BX基址寄存器默认是 DS,对应
BP基址寄存器默认是 SS;可用段超越前缀
MOV AX,[BX+SI] ; AX←DS,[BX+SI]
MOV AX,[BP+DI] ; AX←SS,[BP+DI]
MOV AX,DS:[BP+DI] ; AX←DS,[BP+DI]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院相对基址变址寻址方式
有效地址是基址寄存器 (BX/BP),变址寄存器 (SI/DI)与一个 8位或 16位位移量之和:
有效地址= BX/BP+ SI/DI+ 8/16位位移量
段地址对应 BX基址寄存器默认是 DS,对应
BP基址寄存器默认是 SS;可用段超越前缀
MOVAX,[BX+SI+06H]; AX←DS,[BX+SI+06H]
位移量可用符号表示同一寻址方式有多种表达形式
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院第 1章 教学要求
1,了解微机系统的基本软硬件组成
2,熟悉汇编语言的基本概念和应用特点
3,掌握 8086的寄存器组和存储器组织
4,掌握 8086的寻址方式
Assembly Language
Programming
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院为什么要学习汇编语言
教学目的
从软件角度,理解计算机工作原理
为相关课程提供基本知识
全面理解计算机程序设计语言
应用目的
编写高效,底层的核心程序
编写直接控制硬件或容量较小的程序
信息安全关键程序的编写与分析
……
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院教学内容
第 1章 汇编语言基础知识
第 2章 8086的指令系统
第 3章 汇编语言程序格式
第 4章 基本汇编语言程序设计
第 5章 高级汇编语言程序设计 ( 简介 )
第 6章 32位指令及其编程 ( 简介 )
大学微机技术系列课程教学辅助网站
http://www2.zzu.edu.cn/qwfw
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院教学重点第 1章是用汇编语言进行程序设计所需要了解的基本知识 。 在课堂上,我们重点掌握几个内容:
PC机软硬件系统
认识汇编语言
基础是熟悉寄存器组
难点是各种寻址方式第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.1 计算机系统概述
硬件 ( Hardware)
中央处理单元 CPU
控制器,运算器,寄存器
存储器
主存储器,RAM和 ROM
辅助存储器:磁盘,光盘,U盘
外部设备
输入设备和输出设备
软件 ( Software)
系统软件
应用软件第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院微型计算机的系统组成
I/O
接口主存储器系统总线
CPU
寄存器控制器运算器 辅助存储器输入设备输出设备第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言程序员看到的硬件
中央处理单元 CPU( Intel 80x86)
对汇编语言程序员,最关心其中的 寄存器
存储器 ( 主存储器 )
呈现给汇编语言程序员的,是 存储器地址
外部设备 ( 接口电路 )
汇编语言程序员看到的是 端口 ( I/O地址 )
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器( Register)
寄存器是 CPU内部的高速存储单元
它们为处理器提供各种操作所需要的数据或地址等信息
汇编语言程序采用它们各自的符号名
16位 Intel 8086/80286 CPU中有
AX BX CX DX
SI DI BP SP
32位 80386/80486/Pentium系列 CPU中有
EAX EBX ECX EDX
ESI EDI EBP ESP
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储器地址( Address)
存储器是由大量存储单元组成,需要用编号区别每个单元,编号=地址
存储器地址 是存储器中存储单元的编号
每个存储单元存放一个字节量的数据
一个字节 B( Byte) = 8个二进制位 b( bit)
采用十六进制数来表达地址
Intel 8086具有 1兆字节 ( 1MB) 存储器容量
存储器地址表示为,00000H~ FFFFFH
其中大写 H( 或小写 h) 表示是十六进制数第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院端口( Port)
I/O接口电路由接口寄存器组成,需要用编号区别各个寄存器,编号=地址
I/O地址 是接口电路中寄存器的编号
端口 是 I/O地址的通俗说法
系统通过这些端口与外设进行通信
采用十六进制数来表达端口
Intel 8086支持 64K个 8位端口
I/O地址可以表示为,0000H~ FFFFH
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院计算机的程序设计语言
机器语言 ( MachineLanguage)
B8 64 00 05 00 01
汇编语言 ( AssemblyLanguage)
mov ax,100;取得一个数据 100( MOV是传送指令 )
add ax,256;实现 100+256( ADD是加法指令 )
高级语言 ( High-levelLanguage)
100+ 256
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院什么是汇编语言
以助记符形式表示计算机指令
助记符 ( mnemonic) 是便于人们记忆,并能描述指令功能和指令操作数的符号
助记符是表明指令功能的英语单词或其缩写
汇编格式指令以及使用它们编写程序的规则就形成汇编语言 ( AssemblyLanguage)
汇编语言程序:用汇编语言书写的程序
汇编程序:将汇编语言程序,汇编,成机器代码目标模块的程序汇编语言程序与汇编程序是两个概念第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的比较 -1
汇编语言与处理器密切相关
↘ 汇编语言程序的通用性,可移植性较差
高级语言与具体计算机无关
↗ 高级语言程序是标准化语言,可在多种计算机上编译后执行汇编语言,× 高级语言,√
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的比较 -2
汇编语言功能有限,涉及硬件细节
↘ 程序编写比较繁琐,调试比较困难
高级语言提供了强大的功能,不必关心琐碎问题
↗ 类似自然语言的语法,易于掌握和应用汇编语言,× 高级语言,√
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的比较 -3
汇编语言本质上就是机器语言
↗ 可以直接,有效地控制计算机硬件
↗ 易于产生速度快,容量小的高效率目标程序
高级语言不针对具体计算机系统
↘ 不易直接控制计算机的各种操作
↘ 目标程序比较庞大,运行速度较慢汇编语言,√ 高级语言,×
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言的特点
汇编语言的优点:
直接控制计算机硬件部件
编写,时间,和,空间,两方面最有效程序
汇编语言的缺点:
与处理器密切有关
需要熟悉计算机硬件系统,考虑许多细节
编写繁琐,调试,维护,交流和移植困难汇编语言,? 高级语言,?
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编语言和高级语言的混合编程
汇编语言的优点使得它在程序设计中占有重要的位置,不可被取代
汇编语言的缺点使得人们主要采用高级语言进行程序开发工作
有时需要采用高级语言和汇编语言混合编程,
互相取长补短,更好地解决实际问题混合编程 取长补短第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.2 数据表示
1.2.1数制
二进制数,十六进制数
它们与十进制数的相互转换
1.2.2编码
BCD码和 ASCII码的规律
1.2.3有符号数的表示法
有符号整数的补码表示
1.2.4二进制运算
二进制的算术运算和逻辑运算
十进制的加减运算第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
BCD码 ( Binary Coded Decimal)
二进制编码的十进制数
一个十进制数位 0~ 9用 4位二进制编码来表示
常用 8421BCD码:低 10个 4位二进制编码表示
压缩 BCD码:一个字节表达两位 BCD码
非压缩 BCD码:一个字节表达一位 BCD码 ( 低
4位表达数值,高 4位常设置为 0)
BCD码很直观
BCD码,01001001 0111 1000.0001 0100 1001
十进制真值,4978.149
BCD码便于输入输出,表达数值准确第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
ASCII码 (美国标准信息交换码)
标准 ASCII码用 7位二进制编码,有 128个
不可显示的控制字符前 32个和最后一个编码回车 CR,0DH 换行 LF,0AH 响铃 BEL,07H
可显示和打印的字符,20H后的 94个编码
数码 0~ 9,30H~ 39H
大写字母 A~ Z,41H~ 5AH
小写字母 a~ z,61H~ 7AH
空格,20H
扩展 ASCII码:最高 D7位为 1,表达制表符第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院真值和机器数
真值,现实中真实的数值
机器数,计算机中用 0和 1数码组合表达的数值
无符号数,只表达 0和正整数的定点整数
有符号数,表达负整数,0和正整数的定点整数
符号位需要占用一个位
常用机器数的最高位
0表示正数,1表示负数
定点数,固定小数点的位置表达数值的机器数
定点整数:将小数点固定在机器数的最右侧表达的整数
定点小数:将小数点固定在机器数的最左侧表达的小数
浮点数,小数点浮动表达的实数第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院补码
有符号整数在计算机中默认采用补码
最高位表示符号:正数用 0,负数用 1
正数补码:直接表示数值大小 ( 同无符号数 )
负数补码:将对应正数补码取反加 1
[105]补码 = 01101001B
[-105]补码 = [01101001B]取反+ 1
= 10010110B+ 1= 10010111B
8位二进制补码表示的数值范围,-128~ +127
16位二进制补码表示的数值范围,-215~ +215-1
32位二进制补码表示的数值范围,-231~ +231-1
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院负数求补
负数真值,取反加 1”得机器数补码
负数补码,取反加 1”得到负数真值补码,11100000B
真值,-([11100000]求反+ 1)= -(00011111+1)
= -00100000= -25= -32
负数求补运算,等效于用带借位的 0作减法真值,-8,补码,[-8]补码 = 00H-08H= F8H
补码,11111000,真值,-(00H-F8H)= -08H= -8
用十六进制表达和运算,方便 !
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院十六进制数的加减运算
二进制和十六进制数之间具有对应关系
整数从左向右
小数从右向左
每 4个二进制位对应一个十六进制位
00111010B= 3AH,F2H= 11110010B
十六进制数的加减运算类似十进制
逢 16进位 1,借 1当 16
23D9H+ 94BEH= B897H
A59FH- 62B8H= 42E7H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.3 Intel 80x86系列微处理器
80386
80486
奔腾奔腾 II
奔腾 4
80286
8086
奔腾 III
IA-64(安腾)
4004
不是我不明白,
这世界变化太快。
扎扎实实掌握知识,
以不变应万变!
IA-32
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.4 PC微型计算机
本课程采用 16位或 32位个人计算机
16位 PC机
8088 CPU的 IBM PC和 IBM PC/XT
80286CPU的 IBM PC/AT
16位 80x86CPU的 PC兼容机
32位 PC机
采用 32位 80x86CPU而形成的微机
基本结构仍然源于 PC/AT机
人们日常谈论的 PC机或微机是上述微型计算机系统的统称第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院微机的软件
系统软件,DOS平台
MS-DOS6.22实地址方式
Windows的 MS-DOS模拟环境
应用软件:开发汇编语言程序涉及
文本编辑器
汇编程序
连接程序
调试程序
集成化开发环境本教材提供
DOS-MASM615.EXE
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院文本编辑器( Editor)
文本编辑器用于编辑无任何格式的文档
程序设计要采用文本编辑器编写源程序
常见的文本编辑软件有很多,如
MS-DOS的 EDIT全屏幕编辑器
Windows的 Notepad计事本
程序开发系统中的程序编辑器
Turbo C
Visual Studio
MASM的 PWB
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院汇编程序( Assembler)
汇编程序将汇编语言源程序翻译 ( 称为,汇编,) 成机器代码目标模块
本课程采用微软的 MASM6.15
MASM的最后一个独立版本 MASM6.11
可免费升级为 MASM6.14( 支持 SSE)
Visual C++中有 MASM 6.15( 支持 SSE2)
Visual C++.NET 2003有 MASM 7.10
Visual C++.NET 2005的 MASM支持 Penium 4
的 SSE3指令系统,同时有 ML64.EXE程序用于支持 64位指令系统第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院连接程序( Linker)
连接程序将汇编后的目标模块转换为可执行程序
每个程序开发环境都有连接程序
连接程序的文件名通常是,LINK.EXE
32位 Windows连接程序不同于 16位 DOS连接程序源程序 可执行文件目标模块文本编辑器 汇编程序 连接程序 调试程序第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院调试程序( Debugger)
调试程序进行程序排错,分析等
本课程采用 MASM的 CodeView
DOS的 DEBUG程序
还有 TurboDebugger等源程序 可执行文件目标模块文本编辑器 汇编程序 连接程序 调试程序第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院集成化开发环境
进行程序设计使用的各种软件的有机集合,
有文本编辑器,有语言翻译程序,有连接程序,还组合有调试程序等
大型的程序设计项目往往要借助这种集成开发环境,也就是软件开发工具 ( 包 )
MASM提供程序员工作平台 PWB
微软的 VisualStudio开发系统第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
MASM编程环境的使用
1,进入模拟 DOS环境
2,将 MASM目录作为当前目录
3,开发汇编语言程序
ml /Fl filename.asm
4,运行可执行程序
5,调试可执行程序定制进入 MASM快捷方式 ML615
创建快速开发文件 MLL.BAT
构造方便的调试环境 CV.BAT
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.5 8086微处理器
微处理器是微机的硬件核心,主要包含指令执行的运算和控制部件,还有多种寄存器
对程序员来说,微处理器抽象为以名称存取的寄存器
8086内部结构有两个功能模块,完成一条指令的取指和执行功能
总线接口单元 BIU:负责读取指令和操作数
执行单元 EU:负责指令译码和执行
8086的内部结构内部暂存器
IP
ES
SS
DS
CS
输入 /输出控制电路外部总线执行部分控制电路 1 2 3 4 5 6
∑
ALU
标志寄存器
AH AL
BH BL
CH CL
DH DL
SP
BP
SI
DI
通用寄存器地址加法器指令队列缓冲器执行部件 ( EU) 总线接口部件 ( BIU)
16位
20位
16位
8位
8086的寄存器组第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
8086的通用寄存器
8086的 16位通用寄存器是:
AX BX CX DX
SI DI BP SP
其中前 4个数据寄存器都还可以分成高 8位和低 8位两个独立的寄存器
8086的 8位通用寄存器是:
AH BH CH DH
AL BL CL DL
对其中某 8位的操作,并不影响另外对应 8位的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据寄存器
数据寄存器用来存放计算的结果和操作数,
也可以存放地址
每个寄存器又有它们各自的专用目的
AX--累加器,使用频度最高,用于算术,逻辑运算以及与外设传送信息等;
BX--基址寄存器,常用做存放存储器地址;
CX--计数器,作为循环和串操作等指令中的隐含计数器;
DX--数据寄存器,常用来存放双字长数据的高 16位,或存放外设端口地址 。
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院变址及指针寄存器
变址寄存器常用于存储器寻址时提供地址
SI是源变址寄存器
DI是目的变址寄存器
指针寄存器用于寻址内存 堆栈 内的数据
SP为堆栈指针寄存器,指示栈顶的偏移地址,
不能再用于其他目的,具有专用目的
BP为基址指针寄存器,表示数据在堆栈段中的基地址
SI和 DI在串操作指令有特殊用法
SP和 BP寄存器与 SS段寄存器联合使用确定堆栈段中的存储单元地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院堆栈( Stack)
堆栈是主存中一个特殊的区域
它采用 先进后出 FILO( First In Last Out)
或后进先出 LIFO( Last In First Out) 的原则进行存取操作,而不是随机存取操作方式
堆栈通常由处理器自动维持
在 8086中,由堆栈段寄存器 SS和堆栈指针寄存器 SP共同指示第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令指针 IP
指令指针寄存器 IP,指示代码段中指令的偏移地址
它与代码段寄存器 CS联用,确定下一条指令的物理地址
计算机通过 CS,IP寄存器来控制指令序列的执行流程
IP寄存器是一个专用寄存器第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院标志寄存器
标志 ( Flag) 用于反映指令执行结果或控制指令执行形式,形成 16位标志寄存器 FLAGS( 程序状态字 PSW寄存器 )
状态标志--用来记录程序运行结果的状态信息,
许多指令的执行都将相应地设置它
CF ZF SF PF OF AF
控制标志--可由程序根据需要用指令设置,用于控制处理器执行指令的方式
DF IF TF
OF
1115 12
DF
10
IF
9
TF
8
SF
7
ZF
6 5
AF
4 3
PF
2 1
CF
0
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院进位标志 CF( Carry Flag)
当运算结果的最高有效位有进位 ( 加法 ) 或借位 ( 减法 ) 时,进位标志置 1,即 CF = 1;
否则 CF= 0。
3AH + 7CH= B6H,没有进位,CF= 0
AAH + 7CH= ( 1) 26H,有进位,CF= 1
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院零标志 ZF( Zero Flag)
若运算结果为 0,则 ZF= 1;
否则 ZF = 0
3AH + 7CH= B6H,结果不是零,ZF= 0
84H + 7CH= ( 1) 00H,结果是零,ZF= 1
注意,ZF为 1表示的结果是 0
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院符号标志 SF( Sign Flag)
运算结果最高位为 1,则 SF = 1;否则
SF = 0
3AH + 7CH= B6H,最高位 D7= 1,SF= 1
84H + 7CH= ( 1) 00H,最高位 D7= 0,SF= 0
有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的状态第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院奇偶标志 PF( Parity Flag)
当运算结果最低字节中,1”的个数为零或偶数时,PF = 1;否则 PF = 0
3AH + 7CH= B6H= 10110110B
结果中有 5个 1,是奇数,PF= 0
PF标志仅反映最低 8位中,1”的个数是偶或奇,即使是进行 16位字操作第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院溢出标志 OF( Overflow Flag)
若算术运算的结果有溢出,则 OF= 1;
否则 OF= 0
3AH + 7CH= B6H,产生溢出,OF= 1
AAH + 7CH= ( 1) 26H,没有溢出,OF= 0
问题什么是溢出?
溢出和进位有什么区别?
处理器怎么处理,程序员如何运用?
如何判断是否溢出?
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院什么是溢出
处理器内部以补码表示有符号数
8位表达的整数范围是:+ 127~- 128
16位表达的范围是:+ 32767~- 32768
如果运算结果超出这个范围,就产生了溢出
有溢出,说明有符号数的运算结果不正确
3AH+ 7CH= B6H,就是 58+ 124= 182,
已经超出- 128~+ 127范围,产生溢出,故 OF= 1;
另一方面,补码 B6H表达真值是 -74,
显然运算结果也不正确第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院溢出和进位的对比例 1,3AH+ 7CH= B6H
无符号数运算,58+ 124= 182
范围内,无进位有符号数运算,58+ 124= 182
范围外,有溢出例 2,AAH+ 7CH= ( 1) 26H
无符号数运算,170+ 124= 294
范围外,有进位有符号数运算,- 86+ 124= 28
范围内,无溢出第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院如何运用溢出和进位
处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志 CF;
同时,根据是否超出有符号数的范围设置溢出标志 OF
应该利用哪个标志,则由程序员来决定 。 也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,
则要注意是否溢出第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院溢出的判断
判断运算结果是否溢出的简单规则:
只有当两个相同符号数相加 ( 包括不同符号数相减 ),而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确
其他情况下,则不会产生溢出第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院方向标志 DF( Direction Flag)
用于串操作指令,控制地址的变化方向:
设置 DF= 0,存储器地址自动增加;
设置 DF= 1,存储器地址自动减少 。
CLD指令复位方向标志,DF= 0
STD指令置位方向标志,DF= 1
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据信息的表达单位
计算机中信息的单位
二进制位 Bit,存储一位二进制数,0或 1
字节 Byte,8个二进制位,D7~ D0
字 Word,16位,2个字节,D15~ D0
双字 DWord,32位,4个字节,D31~ D0
最低有效位 LSB:数据的最低位,D0位
最高有效位 MSB:数据的最高位,对应字节,
字,双字分别指 D7,D15,D31位第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据的存储格式
D7 D0 字节
D15 D0 字
D31 D0 双字
D7 D0
00006H
78H 00005H
56H 00004H
12H 00003H
34H 00002H
00001H
00000H 低地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储单元及其存储内容
主存储器需要利用地址区别
每个存储单元都有一个编号;被称为存储器地址
每个存储单元存放一个字节的内容
0002H单元存放有一个数据 34H
表达为 [0002H]= 34H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院多字节数据存放方式
多字节数据在存储器中占 连续的多个存储单元,
存放,低字节存入低地址,高字节存入高地址
表达:用 低地址表示 多字节数据占据的地址空间
2号,字,单元的内容为:
[0002H] = 1234H
2号,双字,单元的内容为:
[0002H] = 78561234H
80x86处理器采用,低对低,高对高,,小端方式 LittleEndian
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储器的分段管理
8086 CPU有 20条地址线
最大可寻址空间为 220= 1MB
物理地址范围从 00000H~ FFFFFH
8086CPU 将 1MB 空 间 分 成 许 多 逻辑段
( Segment)
每个段最大限制为 64KB
段地址的低 4位为 0000B
这样,一个存储单元除具有一个唯一的 物理地址 外,还具有多个 逻辑地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院物理地址和逻辑地址
每个物理存储单元有一个唯一的 20位编号,即物理地址:
00000H~ FFFFFH
分段后用户编程时,采用逻辑地址:
段基地址,段内偏移地址分隔符第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院逻辑地址
段地址 说明逻辑段在主存中的起始位置
8086规定段地址必须是模 16地址,xxxx0H
省略低 4位 0000B,段地址就可以用 16位数据表示,就能用 16位 段寄存器 表达段地址
偏移地址 说明主存单元距离段起始位置的偏移量
每段不超过 64KB,偏移地址也可用 16位 数据表示第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院物理地址和逻辑地址的转换
将逻辑地址中的段地址左移 4位,加上偏移地址就得到 20位物理地址
一个物理地址可以有多个逻辑地址逻辑地址 1460:100,1380:F00
物理地址 14700H 14700H
14600H
+ 100H
14700H
13800H
+ F00H
14700H
段地址左移 4位加上偏移地址得到物理地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段寄存器
8086有 4个 16位段寄存器,每个段寄存器确定一个逻辑段的起始地址,每种逻辑段均有各自的用途
CS( Code Segment)
指明代码段的起始地址
SS( Stack Segment)
指明堆栈段的起始地址
DS( Data Segment)
指明数据段的起始地址
ES( Extra Segment)
指明附加段的起始地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院代码段 ( Code Segment)
代码段用来存放程序的指令序列
代码段寄存器 CS存放代码段的段地址
指令指针寄存器 IP指示下条指令的偏移地址
处理器利用 CS:IP取得下一条要执行的指令第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院堆栈段 ( Stack Segment)
堆栈段确定堆栈所在的主存区域
堆栈段寄存器 SS存放堆栈段的段地址
堆栈指针寄存器 SP指示堆栈栈顶的偏移地址
处理器利用 SS:SP操作堆栈顶的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院数据段 ( Data Segment)
数据段存放运行程序所用的数据
数据段寄存器 DS存放数据段的段地址
各种主存寻址方式 ( 有效地址 EA) 得到存储器中操作数的偏移地址
处理器利用 DS:EA存取数据段中的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院附加段 ( Extra Segment)
附加段是附加的数据段,也用于数据的保存:
附加段寄存器 ES存放附加段的段地址
各种主存寻址方式 ( 有效地址 EA) 得到存储器中操作数的偏移地址
处理器利用 ES:EA存取附加段中的数据
串操作指令将附加段作为其目的操作数的存放区域第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院如何分配各个逻辑段
程序的 指令序列 必须安排在代码段
程序使用的 堆栈 一定在堆栈段
程序中的 数据 默认是安排在数据段,
也经常安排在附加段,尤其是串操作的目的区必须是附加段
数据的存放比较灵活,实际上可以存放在任何一种逻辑段中第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段超越前缀指令
没有指明时,一般的数据访问在 DS段;使用
BP访问主存,则在 SS段
默认的情况允许改变,需要使用段超越前缀指令; 8086指令系统中有 4个:
CS,;代码段超越,使用代码段的数据
SS,;堆栈段超越,使用堆栈段的数据
DS,;数据段超越,使用数据段的数据
ES,;附加段超越,使用附加段的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段超越的示例
没有段超越的指令实例:
MOV AX,[2000H] ; AX←DS,[2000H];从默认的 DS数据段取出数据
采用段超越前缀的指令实例:
MOV AX,ES:[2000H] ; AX←ES,[2000H];从指定的 ES附加段取出数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院段寄存器的使用规定访问存储器的方式 默认 可超越 偏移地址取指令 CS 无 IP
堆栈操作 SS 无 SP
一般数据访问 DS CS ES SS 有效地址 EA
BP基址的寻址方式 SS CS ES DS 有效地址 EA
串操作的源操作数 DS CS ES SS SI
串操作的目的操作数 ES 无 DI
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
1.6 8086的寻址方式
指令系统设计了多种操作数的来源
寻找操作数的过程就是操作数的寻址
操作数采取哪一种寻址方式,会影响机器运行的速度和效率
如何寻址一个操作数对程序设计很重要上机实践的建议配合调试程序单步执行每条指令或调用 IO.LIB的子程序显示结果第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令的组成
指令由操作码和操作数两部分组成
操作码 说明计算机要执行哪种操作,如传送,运算,移位,跳转等操作,它是指令中不可缺少的组成部分
操作数 是指令执行的参与者,即各种操作的对象
有些指令不需要操作数,通常的指令都有一个或两个操作数,个别指令有 3个甚至 4个操作数操作码 操作数第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令的操作码和操作数
每种指令的 操作码,
用一个唯一的助记符表示 ( 指令功能的英文缩写 )
对应着机器指令的一个二进制编码
指令中的 操作数,
可以是一个具体的数值
可以是存放数据的寄存器
或指明数据在主存位置的存储器地址第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院指令的助记符格式操作码 操作数 1,操作数 2 ; 注释
操作数 2,称为 源操作数 src,它表示参与指令操作的一个对象
操作数 1,称为 目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果
分号后的内容是对指令的解释第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院传送指令 MOV的格式
MOV dest,src ; dest←src
功能:将源操作数 src传送至目的操作数 dest
MOV AL,05H ; AL← 05H
MOV BX,AX ; BX←AX
MOV AX,[SI] ; AX←DS,[SI]
MOV AX,[BP+06H] ; AX←SS,[BP+06H]
MOV AX,[BX+SI] ; AX←DS,[BX+SI]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院传送指令 MOV的功能源操作数 src
目的操作数 dest30H
30H
被传送的数据第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院立即数寻址方式
指令中的操作数直接存放在机器代码中,紧跟在操作码之后 ( 操作数作为指令的一部分存放在操作码之后的主存单元中 )
这种操作数被称为立即数 imm
它可以是 8位数值 i8( 00H~ FFH)
也可以是 16位数值 i16( 0000H~ FFFFH)
立即数寻址方式常用来给寄存器赋值
MOV AL,05H ; AL← 05H
MOV AX,0102H ; AX← 0102H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院立即数寻址指令
MOV AX,0102H ; AX← 0102H
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器寻址方式
操作数存放在 CPU的内部寄存器 reg中:
8位寄存器 r8:
AH,AL,BH,BL,CH,CL,DH,DL
16位寄存器 r16:
AX,BX,CX,DX,SI,DI,BP,SP
4个段寄存器 seg:
CS,DS,SS,ES
MOVAX,1234H ; AX← 1234H
MOVBX,AX ; BX←AX
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器寻址指令
MOV BX,AX ; BX←AX
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院存储器寻址方式
指令中给出操作数的主存地址信息 ( 偏移地址,称之为有效地址 EA),而段地址在默认的或用段超越前缀指定的段寄存器中
8086设计了多种存储器寻址方式
1,直接寻址方式
2,寄存器间接寻址方式
3,寄存器相对寻址方式
4,基址变址寻址方式
5,相对基址变址寻址方式第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院直接寻址方式
有效地址在指令中直接给出
默认的段地址在 DS段寄存器,可使用段超越前缀改变
MOV AX,[2000H]; AX←DS,[2000H];指令代码,A100 20
MOV AX,ES:[2000H]; AX←ES,[2000H];指令代码,26A1 00 20
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院直接寻址指令
MOVAX,[2000H] ; AX←DS,[2000H]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器间接寻址方式
有效地址存放在基址寄存器 BX或变址寄存器 SI,DI中
默认的段地址在 DS段寄存器,可使用段超越前缀改变
MOVAX,[SI] ; AX←DS,[SI]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院寄存器相对寻址方式
有效地址是寄存器内容与有符号 8位或 16位位移量之和,寄存器可以是 BX/BP或 SI/DI
有效地址= BX/BP/SI/DI+ 8/16位位移量
段地址对应 BX/SI/DI寄存器默认在 DS,对应 BP寄存器默认在 SS;可用段超越前缀
MOVAX,[DI+06H] ; AX←DS,[DI+06H]
MOVAX,[BP+06H] ; AX←SS,[BP+06H]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院基址变址寻址方式
有效地址由基址寄存器 ( BX或 BP) 的内容加上变址寄存器 ( SI或 DI) 的内容构成:
有效地址= BX/BP+ SI/DI
段地址对应 BX基址寄存器默认是 DS,对应
BP基址寄存器默认是 SS;可用段超越前缀
MOV AX,[BX+SI] ; AX←DS,[BX+SI]
MOV AX,[BP+DI] ; AX←SS,[BP+DI]
MOV AX,DS:[BP+DI] ; AX←DS,[BP+DI]
第 1 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院相对基址变址寻址方式
有效地址是基址寄存器 (BX/BP),变址寄存器 (SI/DI)与一个 8位或 16位位移量之和:
有效地址= BX/BP+ SI/DI+ 8/16位位移量
段地址对应 BX基址寄存器默认是 DS,对应
BP基址寄存器默认是 SS;可用段超越前缀
MOVAX,[BX+SI+06H]; AX←DS,[BX+SI+06H]
位移量可用符号表示同一寻址方式有多种表达形式
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院第 1章 教学要求
1,了解微机系统的基本软硬件组成
2,熟悉汇编语言的基本概念和应用特点
3,掌握 8086的寄存器组和存储器组织
4,掌握 8086的寻址方式