[计算机软件及应用]新版汇编语言程序设计  第1讲 汇编语言基础知识_第1页
[计算机软件及应用]新版汇编语言程序设计  第1讲 汇编语言基础知识_第2页
[计算机软件及应用]新版汇编语言程序设计  第1讲 汇编语言基础知识_第3页
[计算机软件及应用]新版汇编语言程序设计  第1讲 汇编语言基础知识_第4页
[计算机软件及应用]新版汇编语言程序设计  第1讲 汇编语言基础知识_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,汇编语言程序设计,主讲教师:张 莉邮箱:QQ:576842831办公室:Z-105电话学习资源,微辅网/qwfw/华中科技大学6/huibian1/site/index.jsp,课程介绍,什么是汇编语言?为什么要学汇编语言?怎样学好汇编语言?,什么是汇编语言?,什么是汇编语言,什么是汇编语言,.model small.stack.data msgdbHello, world!,0dh,0ah,$.code.startup movdx, offset msg movah, 9 int21h.exit 0 end,为什么要学习汇编语言,解密程序、跟踪与反跟踪、病毒木马分析和防止的首选理解C语言程序的最好途径了解操作系统运行细节的最佳方式特定场合下编写程序的必然选择了解计算机工作原理和后继课程学习的基础,怎样学好汇编语言,兴趣是最好的老师深刻理解计算机工作的本质掌握语法:指令格式(关键:寻址方式)掌握语义:指令功能(关键:分类记忆)灵活应用:阅读、编写程序(关键:实践),考核要求,平时成绩(作业、出勤、上机练习编程情况)10期中成绩()20期末成绩()70,第1章 汇编语言基础知识,本章主要内容:了解程序设计语言的发展及特点了解数据在计算机中的存储表示理解计算机的工作原理理解并掌握8086寄存器的功能与特点理解并掌握8086的寻址方式,第1章 汇编语言基础知识,本章学习的难点与重点汇编语言、汇编源程序、汇编程序的概念8086寄存器的名称与用途物理地址与逻辑地址的概念、物理地址的形成有符号数、无符号数及其计算对标志寄存器的影响8086的7种寻址方式,第1讲 汇编语言基础知识,1.1 计算机系统概述1.2 数据表示1.3 Intel 80x86处理器1.4 微型计算机系统1.5 8086的寻址方式,1.1 计算机系统概述,1、计算机系统构成,计算机系统,硬件系统,软件系统,系统软件:如操作系统,支撑软件:如编译程序、汇编程序、DBMS,应用软件:如Office、图书馆管理系统,1.1 计算机系统概述,2、计算机程序设计语言(1)机器语言机器指令:指挥计算机完成某一基本操作的命令。特点:由0和1组成的二进制代码为被计算机直接识别并执行依赖于某一类型的机器,依赖于硬件格式:操作码明确了运算种类地址码指明了操作数和结果存放的位置,例如:100+256B8 64 0005 00 01,1.1 计算机系统概述,指令系统:某特定处理器支持的所有机器指令的集合就是该处理器的指令系统。机器语言:机器指令系统以及使用它们编写程序的规则被称为机器语言。机器语言程序:用机器语言编写的程序。它是计算机唯一能够直接识别并执行的程序,被称为目标程序。优点: 能被计算机硬件直接识别并执行,效率高缺点: 难理解、易出错也难以发现错误,并且依赖于硬件,可移植性差,1.1 计算机系统概述,(2)汇编语言汇编指令:用助记符表示的指令汇编语言:用指令助记符书写、其主要操作与机器指令一一对应、并遵循一定语法规则的语言。汇编语言程序:用汇编语言书写的程序,又称为汇编源程序汇编程序:将汇编语言程序翻译成机器代码目标模块的程序,Mov ax,100Add ax,256,注意:汇编程序与汇编语言程序是不同的概念!,编辑程序、汇编程序和连接程序,编辑程序:录入、修改源程序的文本编辑软件。汇编语言程序输入到计算机后以ASM作为文件扩展名。汇编程序:将汇编语言源程序翻译成机器代码。我们采用微软的MASM 6.11.EXE。连接程序:将汇编后得到的扩展名为.OBJ文件连接得到计算机可以执行的.EXE文件。我们使用的连接程序是LINK.EXE。,编辑程序、汇编程序和连接程序,源程序,汇编,目标程序,连接,执行文件,汇编程序,连接程序,1.1 计算机系统概述,(3)高级语言由语句组成优点: 接近人类自然语言的语法习惯和数学表达,与硬件无关,可移植性强缺点: 必须经过编译或解释成对应的机器语言程序才能被执行编译生成目标程序解释对一条语句进行翻译后就执行,不会生成目标程序,100+256,汇编语言和高级语言的比较-1,汇编语言与处理器密切相关 汇编语言程序的通用性、可移植性较差高级语言与具体计算机无关高级语言程序是标准化语言,可在多种计算机上编译后执行,汇编语言和高级语言的比较-2,汇编语言功能有限、涉及硬件细节 程序编写比较繁琐,调试比较困难高级语言提供了强大的功能,不必关心琐碎问题类似自然语言的语法,易于掌握和应用,汇编语言和高级语言的比较-3,汇编语言本质上就是机器语言 可以直接、有效地控制计算机硬件易于产生速度快、容量小的高效率目标程序高级语言不针对具体计算机系统不易直接控制计算机的各种操作目标程序比较庞大、运行速度较慢,汇编语言的特点,汇编语言的优点:直接控制计算机硬件部件编写“时间”和“空间”两方面最有效程序汇编语言的缺点:与处理器密切有关需要熟悉计算机硬件系统、考虑许多细节编写繁琐,调试、维护、交流和移植困难,汇编语言和高级语言的混合编程,汇编语言的优点使得它在程序设计中占有重要的位置,不可被取代汇编语言的缺点使得人们主要采用高级语言进行程序开发工作有时需要采用高级语言和汇编语言混合编程,互相取长补短,更好地解决实际问题,汇编语言的应用场合,程序要具有较快的执行时间,或者只能占用较小的存储容量程序与计算机硬件密切相关,程序要直接、有效地控制硬件大型软件需要提高性能、优化处理的部分没有合适的高级语言、或只能采用汇编语言的时候分析具体系统尤其是该系统的低层软件、加密解密软件、分析和防治计算机病毒等等,汇编语言的作用实在不小 !,1.2 数据表示,1.2.1 数制1.2.2 编码1.2.3 有符号数的表示法1.2.4 二进制运算,1.2.1 数制,常用的进制有二、八、十、十六等十进制采用的数符有:0、1、2、3、4、5、6、7、8、9二进制采用的数符有:0、1计算机中的数据都是以二进制形式存储的八进制采用的数符有:0、1 、2、3、4、5、6、7十六进制采用的数符有:0、1 、2、3、4、5、6、7、8、9、A、B、C、D、E、F用于表达二进制数,相互转换简单,十进制数转换为r进制数,整数部分转换:除以r取余法十进制数整数部分不断除以基数2、8或16,并记下余数,直到商为0为止由最后一个余数起逆向取各个余数,则为转换成的二进制、八进制和十六进制数例:(137)D=( )B(137)D=( )H,10001001,89,十进制数转换为r进制数,小数部分转换:乘以r取整法分别乘以各自的基数,记录整数部分,直到小数部分为0为止或满足指定的精度例:(0.8125)D( )B(0.8125)D( )H,0.1101,0.D,r制数转换为十进制数,方法:求出按权展开多项式的合即可二进制数转换为十进制数(0011.1010)B12112012-102-212-3(3.625)D十六进制数转换为十进制数(1.2)H11602161(1.125)D,二进制与十六进制的互换,二进制十六进制从小数点开始分别向左、向右按每4位一组划分,不足4位的组以“0”补足(整数部分在高位补0,小数部分在低位补0),然后将每组4位二进制数转换为等值的一位十六进制数。例:(1101101110.110101)B=( . )B十六进制二进制每位十六进制可用4位二进制数表示。例: (2C1D.3) D=( )B,1110,E,0110,6,0011,3,1101,D,0100,4,=( 36E.D4 )H,0010,2,1100,C,0001,1,1101,D,.0011,3,1.2.2 编码,1、BCD码(Binary Coded Decimal)二进制编码的十进制数一个十进制数位09用4位二进制编码来表示压缩BCD码:一个字节表达两位BCD码非压缩BCD码:一个字节表达一位BCD码(低4位表达数值,高4位常设置为0)BCD码很直观BCD码:0100 1001 0111 1000.0001 0100 1001十进制真值:4978.149,BCD码便于输入输出,表达数值准确,1.2.2 编码,2、ASCII码(美国标准信息交换码)标准ASCII码用7位二进制编码,有128个不可显示的控制字符 前32个和最后一个编码 回车CR:0DH 换行LF:0AH 响铃BEL:07H可显示和打印的字符:20H后的94个编码数码09:30H39H大写字母AZ:41H5AH小写字母az:61H7AH空格:20H扩展ASCII码:最高D7位为1,1.2.3 有符号数的表示法,真值:现实中真实的数值机器数:计算机中用0和1数码组合表达的数值无符号数:只表达0和正整数的定点整数有符号数:表达负整数、0和正整数的定点整数符号位需要占用一个位常用机器数的最高位0表示正数、1表示负数,带符号数的原码表示,(1)原码规定正数的符号位为0,负数的符号位为1,其它位按照一般的方法来表示数的绝对值。例:求出X1=(+102)10,X2=(- 43)10的原码 X1原=(01100110)2 X2原=(10101011)2原码表示的整数范围是(2n-11)(2n-11),其中n为机器字长。+0和-0的表示方法不同。,带符号数的反码表示,(2)反码对于一个带符号的数来说,正数的反码与其原码相同,负数的反码为其原码除符号位以外的各位按位取反。例:求出X1=(+102)10,X2=(-43)10的反码 X1反=(01100110)2 X2反=(11010100)2负数的反码与负数的原码有很大的区别,反码通常用作求补码过程中的中间形式。反码表示的整数范围与原码相同。0也有两种表示形式。,带符号数的补码表示,(3)补码对于一个带符号的数来说,正数的补码与其原码相同,负数的补码为其反码加1。例:求出X1=(+102)10,X2=(-43)10的补码 X1补 =(01100110)2 X2补=(11010101)20只有1种表示形式。补码表示的整数范围是2n-1(2n-11),其中n为机器字长。采用补码表示数据时,两数相减,可先求减数相反数的补码,然后再和被减数做加法运算。,带符号数的原码、反码、补码表示:,带符号数的补码表示,带符号数的补码表示,(4)补码与真值之间的转换:给定机器数的真值可以通过补码的定义来完成真值到补码的转换,若已知某数的补码求其真值,计算方法如下:正数补码的真值等于补码的本身;负数补码转换为其真值时,将补码按位求反末位加1,即可得到该负数补码对应的真值。,带符号数的补码表示,例: 给定 X补码(01011001)2,求真值X;给定X补码(11011010)2,求真值X。(1)由于X补码代表的数是正数,则其真值:X1011001(126124123120)(89)10(2)由于X补码代表的数是负数,则其真值:X(1011010求反1)(01001011)(0100110)(125122121)(38)10,定点数 定点数是小数点位置固定的数。 根据小数点隐含固定位置不同,可分为: 定点小数: 定点整数: 例如:(-1011011)2表示为,1.2.3 有符号数的表示法,.小数点,浮点数 浮点数是小数点位置不固定,根据需要而浮动的数。它既有整数部分又有小数部分。 通过阶码和尾数表示: N=2E (S),阶码(E):补码定点整数,表示该数小数点位置尾数(S):补码定点小数,表示数据的有效位数,1.2.3 有符号数的表示法,例:二进制数101.1和10.11的浮点表示形式为,阶码,尾数,阶符,尾符,浮点数的表示,运算法则: 000 011 101 1110进位0,例:1010+0011=? 1 0 1 0+ 0 0 1 1,1、二进制加法,产生进位,1,0,1,1,一、算术运算,1.2.4 二进制运算,运算法则: 000 101 110 011有借位,例:1110-0011=? 1 1 1 0- 0 0 1 1,2、二进制减法,产生借位,1,1,0,1,产生借位,1.2.4 二进制运算,十六进制数的加减运算,十六进制数的加减运算类似十进制逢16进位1,借1当1623D9H94BEHB897HA59FH62B8H42E7H,运算法则: 000 010 100 111,例:10100011=? 1 0 1 0 0 0 1 1 1 0 1 0 + 1 0 1 0,3、二进制乘法,0,1,1,1,1,1.2.4 二进制运算,运算法则:除法是乘法的逆运算。与十进制类似,从除数的最高位开始检查,并定出需要超过除数的位数。找到这个位时商记1,并用选定的被除数减除数。然后把被除数的下一位移到余数上。若余数不够减,则商记0,然后把被除数的下一位移到余数上;若余数够减除数,则商1,余数去减除数,这样反复进行,直至全部被除数的位都下移完为止。,4、二进制除法,例:100011101=? 1 0 1)1 0 0 0 1 1,0,0,0,1,1 0 1,0 1 1,1,1,1 0 1,0 1 0,1,1,1 0 1,0,1.2.4 二进制运算,1. 基本的逻辑运算 逻辑变量之间的运算称为逻辑运算。它包括三种基本运算:逻辑加法(或运算)、逻辑乘法(与运算)和逻辑否定(非运算)。由这3种基本运算还可导出其它的逻辑运算,如异或运算、同或运算,与或非运算等。,二、逻辑运算,1.2.4 二进制运算,与运算也叫逻辑乘法、逻辑积。其符号是“”、“”或“”。它的运算规则为: 0 00 0 10 1 00 1 11,例:1010111111000010=? 1 0 1 0 1 1 1 1 1 1 0 0 0 0 1 0 ,2、与运算,0,1,0,0,0,0,0,1,1.2.4 二进制运算,或运算也叫逻辑加法、逻辑和。其符号是“”、“”或“U”。它的运算规则为: 000 011 101 111,例:1010111111000010=? 1 0 1 0 1 1 1 1 1 1 0 0 0 0 1 0,3、或运算,1,1,1,1,0,1,1,1,1.2.4 二进制运算,非运算又称逻辑否定。其表示方法是在逻辑变量上方加一横线或在变量前加上“”。运算规则为: 0=1 1=0,5、非运算,例: 10101111 =01010000 11000010 =00111101,1.2.4 二进制运算,其运算符是。运算规则为: 00=0 01=1 10=1 11=0,6、异或运算,例:1010111111000010=? 1 0 1 0 1 1 1 1 1 1 0 0 0 0 1 0,1,0,1,1,0,1,1,0,1.2.4 二进制运算,1.3 Intel 80x86系列微处理器,80386,80486,奔腾,奔腾II,奔腾4,80286,8086,奔腾III,IA-64(安腾),4004,不是我不明白,这世界变化太快。扎扎实实掌握知识,以不变应万变!,IA-32,8008,8086,16位结构的微处理器:数据总线为16位主存容量1MB:地址总线为20位时钟频率5MHz(IBM PC使用4.77MHz)准16位微处理器8088:外部数据总线为8位IBM PC和PC/XT机使用Intel 8088 CPU8086的16位指令系统:Intel 80x86基本指令集80186/80188的核心是8086/8088,配以支持电路80186/80188指令系统比8086指令系统新增了若干条实用的指令涉及堆栈操作、移位指令、输入输出指令、过程指令和边界检测及乘法指令,80286,16位数据总线,24位地址总线(16MB主存)实方式(Real Mode)与8086工作方式一样保护方式(Protected Mode)存储管理、保护机制和多任务管理的硬件支持IBM PC/AT机使用Intel 80286 CPU80286指令系统新增15条保护方式指令,16位Intel 80x86 CPU:8086 / 80186 / 8028632位Intel 80x86 CPU(IA-32微处理器):80386,80486,Pentium系列英特尔32位结构:IA-32(Intel Architecture-32),80386,32位结构数据总线32位,地址总线32位,寻址4GB主存虚拟8086方式(Virtual 8086 Mode)保护方式下的8086工作方式系统管理方式(System Management Mode)低功耗节能状态80386指令系统全面升级为32位兼容原来16位指令系统新增有关位操作、条件设置指令以及对控制、调试和测试寄存器的传送指令等,80486,8048680386803878KB Cache浮点处理单元FPU8086/8088:808780286:8028780386:80387高速缓冲存储器Cache复杂指令集计算机CISC融合精简指令集计算机RISC的技术特点80486指令系统新增用于多处理器和内部Cache操作的6条指令,Pentium,俗称的80586微处理器,奔腾微处理器32位结构,连接主存的数据总线是64位超标量(Superscalar)技术Pentium指令系统新增一条8字节比较交换指令一条处理器识别指令4条系统专用指令,Pentium II,多媒体扩展指令(MMX指令)MMX(MutliMedia eXtension)整数运算多媒体指令优化图像、音频、视频和通信方面的程序进行提升微机对多媒体的处理能力Pentium MMX(多能奔腾):MMX指令应用于Pentium处理器Pentium II:MMX指令应用于Pentium Pro,Pentium III,数据流SIMD扩展指令(SSE指令)SSE(Streaming SIMD Extensions)浮点单精度多媒体运算指令提高浮点3D数据的处理能力。SSE指令类似于AMD公司发布的3D Now!指令Pentium III:SSE指令应用于Pentium II 单指令多数据SIMDSingle Instruction Multiple Data表示一条指令具有同时处理多组数据的能力,Pentium 4,NetBurst的微结构(Microarchitecture) 进一步发掘指令之间可以同时执行的能力超线程HT(Hyper Threading)发掘程序中的并行性一个物理处理器形成两个逻辑处理器SSE2指令增强浮点双精度多媒体运算能力SSE3指令增强和完善MMX,SSE和SSE2指令,Pentium Pro,原称P6,中文名称为“高能奔腾”两个芯片组成扩展的超标量技术动态执行技术Pentium Pro新增3条指令,Intel 80x86微处理器,Celeron(赛扬)微处理器面向低端(低价位)PC机Xeon(至强)微处理器面向高端服务器、工作站AMD微处理器AMD公司生产的IA-32微处理器兼容芯片Intel公司最主要的竞争对手双核微处理器单芯片多处理器SMP技术Intel的Pentium D:单芯片双Pentium 4核心64位微处理器AMD的K8核心:兼容IA-32的64位微处理器Intel的EM64T(扩展64位技术): IA-32的64位扩展,80x86微处理器概况,1.4.1 微型机的硬件构成1.4.2 存储器1.4.3 堆栈,1.4 微型计算机系统,1.4.1 微型机的硬件构成,运算器,控制器,中央处理器(CPU),内存,外存,输入设备,输出设备,ROM(只读存储器),RAM(随机存储器),Cache(高速缓冲存储器),外设,主机,硬件系统,1.4.1 微型机的硬件构成,总线分为:数据总线、地址总线和控制总线三类,需利用:数据寄存器、状态寄存器和命令寄存器,汇编语言程序员看到的硬件,中央处理单元 CPU(Intel 80x86)对汇编语言程序员,最关心其中的寄存器存储器(主存储器)呈现给汇编语言程序员的,是存储器地址外部设备(接口电路)汇编语言程序员看到的是端口(I/O地址),端口(Port),I/O接口电路由接口寄存器组成,需要用编号区别各个寄存器:编号地址I/O地址是接口电路中寄存器的编号端口是I/O地址的通俗说法系统通过这些端口与外设进行通信采用十六进制数来表达端口Intel 8086支持64K个8位端口I/O地址可以表示为:0000H FFFFH,1.4.1 微型机的硬件构成,微处理器(CPU)是微机的硬件核心,主要包含指令执行的运算和控制部件,还有多种寄存器完成指令的过程可以分为取指令、分析指令和执行指令三个阶段8086内部结构有两个功能模块,完成一条指令的取指和执行功能 总线接口单元BIU:负责读取指令和操作数 执行单元EU :负责指令译码和执行,8086的内部结构,8086的寄存器组,8086的通用寄存器,8086的16位通用寄存器是:AXBXCXDXSIDIBPSP其中前4个数据寄存器都还可以分成高8位和低8位两个独立的寄存器8086的8位通用寄存器是:AHBHCHDHALBLCLDL对其中某8位的操作,并不影响另外对应8位的数据,数据寄存器,数据寄存器用来存放计算的结果和操作数,也可以存放地址每个寄存器又有它们各自的专用目的AX累加器,使用频度最高,用于算术、逻辑运算以及与外设传送信息等;BX基址寄存器,常用做存放存储器地址;CX计数器,作为循环和串操作等指令中的隐含计数器;DX数据寄存器,常用来存放双字长数据的高16位,或存放外设端口地址。,变址及指针寄存器,变址寄存器常用于存储器寻址时提供地址SI是源变址寄存器DI是目的变址寄存器指针寄存器用于寻址内存堆栈内的数据SP为堆栈指针寄存器,指示栈顶的偏移地址,不能再用于其他目的,具有专用目的BP为基址指针寄存器,表示数据在堆栈段中的基地址SI和DI在串操作指令有特殊用法SP和BP寄存器与SS段寄存器联合使用确定堆栈段中的存储单元地址,指令指针IP,指令指针寄存器IP,指示代码段中指令的偏移地址它与代码段寄存器CS联用,确定下一条指令的物理地址计算机通过CS : IP寄存器来控制指令序列的执行流程IP寄存器是一个专用寄存器,标志寄存器,标志(Flag)用于反映指令执行结果或控制指令执行形式,形成16位标志寄存器FLAGS(程序状态字PSW寄存器)状态标志用来记录程序运行结果的状态信息,许多指令的执行都将相应地设置它CF ZF SF PF OF AF控制标志可由程序根据需要用指令设置,用于控制处理器执行指令的方式DF IF TF,进位标志CF(Carry Flag),当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF = 1;否则CF = 0。,3AH + 7CHB6H没有进位:CF = 0AAH + 7CH(1)26H有进位:CF = 1,零标志ZF(Zero Flag),若运算结果为0,则ZF = 1;否则ZF = 0,3AH + 7CHB6H结果不是零:ZF = 084H + 7CH(1)00H结果是零:ZF = 1,注意:ZF为1表示的结果是0,符号标志SF(Sign Flag),运算结果最高位为1,则SF = 1;否则SF = 0,3AH + 7CHB6H最高位D71:SF = 184H + 7CH(1)00H最高位D70:SF = 0,有符号数据用最高有效位表示数据的符号所以,最高有效位就是符号标志的状态,奇偶标志PF(Parity Flag),当运算结果最低字节中“1”的个数为零或偶数时,PF = 1;否则PF = 0,3AH + 7CHB6H10110110B结果中有5个1,是奇数:PF = 0,PF标志仅反映最低8位中“1”的个数是偶或奇,即使是进行16位字操作,溢出标志OF(Overflow Flag),若在进行算术运算时,结果有溢出OF = 1;否则OF = 08位表达的整数范围是:12712816位表达的范围是:3276732768如果运算结果超出这个范围,就产生了溢出有溢出,说明有符号数的运算结果不正确,3AH7CH结果为B6H,就是58124182,已经超出128127范围,产生溢出,故OF1;,溢出的判断,判断运算结果是否溢出的简单规则:当两个相同符号数相加(包括不同符号数相减),而运算结果的符号与原数据符号相反时,产生溢出当不同符号数相减时,差的符号与被减数的符号不同时,产生溢出其他情况下,则不会产生溢出,例:AAH + 7CH有符号数运算:无溢出,OF=0 AAH - 7CH 有符号数运算: 有溢出,OF=1,溢出和进位,溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,超出范围后加上进位或借位运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,超出范围后运算结果不正确。处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF应该利用哪个标志,则由程序员来决定。,溢出和进位的对比,例1:3AH + 7CHB6H无符号数运算:58124182范围内,无进位,CF=0有符号数运算: 58124182范围外,有溢出,OF=1,例2:AAH + 7CH(1)26H无符号数运算:170124294范围外,有进位,CF=1有符号数运算:8612428范围内,无溢出,OF=0,辅助进位标志AF,3AH + 7CHB6HD3有进位:AF = 1,运算时D3位(低半字节)有进位或借位时,AF = 1;否则AF = 0。,这个标志主要由处理器内部使用,用于十进制算术运算调整指令中,用户一般不必关心,方向标志DF(Direction Flag),用于串操作指令,控制地址的变化方向:设置DF0,存储器地址自动增加;设置DF1,存储器地址自动减少。,CLD指令复位方向标志:DF0STD指令置位方向标志:DF1,中断允许标志IF,用于控制外部可屏蔽中断是否可以被处理器响应:设置IF1,则允许中断;设置IF0,则禁止中断。,CLI指令复位中断标志:IF0STI指令置位中断标志:IF1,陷阱标志TF(Trap Flag),用于控制处理器进入单步操作方式:设置TF0,处理器正常工作;设置TF1,处理器单步执行指令。,单步执行指令处理器在每条指令执行结束时,便产生一个编号为1的内部中断这种内部中断称为单步中断所以TF也称为单步标志利用单步中断可对程序进行逐条指令的调试这种逐条指令调试程序的方法就是单步调试,显示、修改寄存器命令R,DEBUG.EXE是DOS操作系统提供的一个调试汇编语言程序的工具程序。在DOS或MS-DOS命令提示符下输入“DEBUG”即可启动。若要退出DEBUG,在DEBUG命令提示符“-”键入命令Q,即可结束DEBUG的运行,返回DOS操作系统。,显示、修改寄存器命令R,显示所有寄存器内容格式:-R功能:以十六进制形式显示CPU内部各寄存器的值,以符号形式显示标志寄存器各标志位(除TF)的值。,显示、修改寄存器命令R,修改寄存器格式: -R 寄存器名功能:DEBUG首先显示指定寄存器的当前值,并在下一行首给出提示符“:”,等待用户输入新值。修改标志值格式:-RF功能:先用符号显示当前各标志位的值,并在末尾给出提示符“-”,然后等待用户以符号形式输入新的标志值。对输入的次序没有要求。,1.4.2 存储器,存储器是由大量存储单元组成,每个存储单元存放一个字节量的数据一个字节B(Byte)8个二进制位b(bit)需要用编号区别每个单元:编号地址存储器地址是存储器中存储单元的编号0002H单元存放有一个数据34H,表达为0002H34H采用十六进制数来表达地址Intel 8086具有1兆字节(1MB)存储器容量存储器地址表示为:00000H FFFFFH其中大写H(或小写h)表示是十六进制数,主存空间的分配,地址最低端的640KB空间由DOS进行管理,128KB主存空间保留给显示缓冲存储区显示RAM区并没有被完全使用,I/O接口电路卡上的ROM,ROM-BIOS程序,数据信息的表达单位,计算机中信息的单位二进制位Bit:存储一位二进制数:0或1字节Byte:8个二进制位,D7D0字Word:16位,2个字节,D15D0双字DWord:32位,4个字节,D31D0最低有效位LSB:数据的最低位,D0位最高有效位MSB:数据的最高位,对应字节、字、双字分别指D7、D15、D31位,数据的存储格式,低地址,多字节数据存放方式,多字节数据在存储器中占连续的多个存储单元:存放:低字节存入低地址,高字节存入高地址表达:用低地址表示多字节数据占据的地址空间,2号“字”单元的内容为:0002H = 1234H2号“双字”单元的内容为:0002H = 78561234H,80x86处理器采用“低对低、高对高”:小端方式Little Endian,数据的地址对齐,同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等等字单元安排在偶地址(xxx0B)、双字单元安排在模4地址(xx00B)等,被称为“地址对齐(Align)”对于不对齐地址的数据,处理器访问时,需要额外的访问存储器时间应该将数据的地址对齐,以取得较高的存取速度,存储器的分段管理,8086 CPU有20条地址线最大可寻址空间为2201MB物理地址范围从00000HFFFFFH8086CPU将1MB空间分成许多逻辑段(Segment)每个段最大限制为64KB段地址的低4位为0000B,物理地址和逻辑地址,每个物理存储单元有一个唯一的20位编号,即物理地址:00000HFFFFFH分段后用户编程时,采用逻辑地址:段基地址 : 段内偏移地址,分隔符,逻辑地址,段地址说明逻辑段在主存中的起始位置8086规定段地址必须是模16地址:xxxx0H省略低4位0000B,段地址就可以用16位数据表示,就能用16位段寄存器表达段地址偏移地址说明主存单元距离段起始位置的偏移量每段不超过64KB,偏移地址也可用16位数据表示,物理地址和逻辑地址的转换,将逻辑地址中的段地址左移4位,加上偏移地址就得到20位物理地址一个物理地址可以有多个逻辑地址,逻辑地址1460:100、1380:F00,一个存储单元除具有一个唯一的物理地址外,还具有多个逻辑地址,存储器的分段,8086对逻辑段要求:段地址低4位均为0每段最大不超过64KB8086对逻辑段并不要求:必须是64KB各段之间完全分开(即可以重叠),各个逻辑段独立,各个逻辑段重叠,1MB空间的分段,1MB空间最多能分成多少个段?每隔16个存储单元就可以开始一个段所以1MB最多可以有:2201621664K 个段1MB空间最少能分成多少个段?每隔64K个存储单元开始一个段所以1MB最少可以有:22021616 个段,段寄存器,8086有4个16位段寄存器,每个段寄存器确定一个逻辑段的起始地址,每种逻辑段均有各自的用途CS(Code Segment)指明代码段的起始地址SS(Stack Segment)指明堆栈段的起始地址DS(Data Segment)指明数据段的起始地址ES(Extra Segment)指明附加段的起始地址,代码段(Code Segment),代码段用来存放程序的指令序列代码段寄存器CS存放代码段的段地址指令指针寄存器IP指示下条指令的偏移地址处理器利用CS:IP取得下一条要执行的指令,堆栈段(Stack Segment),堆栈段确定堆栈所在的主存区域堆栈段寄存器SS存放堆栈段的段地址堆栈指针寄存器SP指示堆栈栈顶的偏移地址处理器利用SS:SP操作堆栈顶的数据,数据段(Data Segment),数据段存放运行程序所用的数据数据段寄存器DS存放数据段的段地址各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址处理器利用DS:EA存取数据段中的数据,附加段(Extra Segment),附加段是附加的数据段,也用于数据的保存:附加段寄存器ES存放附加段的段地址各种主存寻址方式(有效地址EA)得到存储器中操作数的偏移地址处理器利用ES:EA存取附加段中的数据串操作指令将附加段作为其目的操作数的存放区域,如何分配各个逻辑段,程序的指令序列必须安排在代码段程序使用的堆栈一定在堆栈段程序中的数据默认是安排在数据段,也经常安排在附加段,尤其是串操作的目的区必须是附加段数据的存放比较灵活,实际上可以存放在任何一种逻辑段中,段超越前缀指令,没有指明时,一般的数据访问在DS段;使用BP访问主存,则在SS段默认的情况允许改变,需要使用段超越前缀指令;8086指令系统中有4个:CS:;代码段超越,使用代码段的数据SS: ;堆栈段超越,使用堆栈段的数据DS: ;数据段超越,使用数据段的数据ES: ;附加段超越,使用附加段的数据,段超越的示例,没有段超越的指令实例:MOV AX,2000H;AXDS:2000H;从默认的DS数据段取出数据采用段超越前缀的指令实例:MOV AX,ES:2000H;AXES:2000H;从指定的ES附加段取出数据,段寄存器的使用规定,显示、修改内存内容命令,显示命令D格式:-D内存块功能:以十六进制和ASCII码字符两种形式显示指定的内存块各单元的内容,如果对应ASCII码的字符无法显示,则以“.”显示。,显示、修改内存内容命令,修改命令E格式1:-E 内存地址 字符或数值串功能:用命令中的字符串或数字值修改指定的内存单元格式2: -E 内存地址 功能:先给出命令中指定内存单元的内容,并给出提示符“.”,可在其后输入要修改的值,若直接按空格则表示不修改该单元的内容。,1.4.3 堆栈,堆栈是特殊的存储区域,只能在一端进行数据的插入和删除(栈顶),另外一端固定不动,称为栈底。当堆栈中没有数据(空栈)时,栈顶与栈底重合。使用SS段寄存器记录其段地址,用SP指向栈顶。存储的数据具有“先进后出”的特点。,00000H,1.4.3 堆栈,8086中的堆栈是按字组织的,仍然遵循“高对高,低对低”的原则。栈的基本操作有如下三种:初始化栈对SS和SP寄存器赋值完整段定义中利用:段名segment stack ;定义堆栈段 ;分配堆栈段的大小 段名 ends简化段定义中利用: .stack 大小,1.4.3 堆栈,入栈将数据存放在堆栈中的操作称为入栈。利用push命令来实现,可以将通用寄存器、段寄存器或字存储单元中的内容压人堆栈顶部。其操作过程如下:修改栈顶,将SP指针减2将寄存器或字存储单元中的内容送入SP所指向的字单元,1.4.3 堆栈,出栈从堆栈中取出数据的操作称为出栈。利用POP命令来实现,可以将通用寄存器、段寄存器或字存储单元中的内容压人堆栈顶部。其操作过程如下:将SP所指向的字单元内容送入寄存器或字存储单元中修改栈顶,将SP指针加2,1.5 8086的寻址方式,指令由操作码和操作数两部分组成操作码说明计算机要执行哪种操作,如传送、运算、移位、跳转等操作,它是指令中不可缺少的组成部分每种指令的操作码:用一个唯一的助记符表示(指令功能的英文缩写)对应着机器指令的一个二进制编码,指令的操作码和操作数,操作数是指令执行的参与者,即各种操作的对象指令中的操作数:可以是一个具体的数值可以是存放数据的寄存器或指明数据在主存位置的存储器地址有些指令不需要操作数,通常的指令都有一个或两个操作数,个别指令有3个甚至4个操作数,指令的助记符格式,操作码 操作数1,操作数2;注释操作数2,称为源操作数 src,它表示参与指令操作的一个对象操作数1,称为目的操作数 dest,它不仅可以作为指令操作的一个对象,还可以用来存放指令操作的结果分号后的内容是对指令的解释,1.5 8086的寻址方式,指令系统设计了多种操作数的来源寻找操作数的过程就是操作数的寻址操作数采取哪一种寻址方式,会影响机器运行的速度和效率如何寻址一个操作数对程序设计很重要,传送指令MOV的格式,MOV dest,src;destsrc 功能:将源操作数src传送至目的操作数destMOV AX,1234HMOV AX,1234HMOV AX,BXMOV AX,BXMOV AX,BP+06HMOV AX,BX+SI,1.5 8086的寻址方式,8086支持的寻址方式有:立即数寻址寄存器寻址存储器寻址直接寻址寄存器间接寻址寄存器相对寻址基址变址寻址相对基址变址寻址,立即数寻址方式,指令中的操作数直接存放在机器代码中,紧跟在操作码之后(操作数作为指令的一部分存放在操作码之后的主存单元中)这种操作数被称为立即数imm它可以是8位数值i8(00HFFH)也可以是16位数值i16(0000HFFFFH)立即数寻址方式常用来给寄存器赋值MOV AL,05H ;AL05HMOV AX,0102H ;AX0102H,常用DEBUG命令,汇编命令A格式:-A 内存地址功能:先显示汇

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论