《汇编语言程序设计:第一章预备知识》由会员分享,可在线阅读,更多相关《汇编语言程序设计:第一章预备知识(49页珍藏版)》请在金锄头文库上搜索。
1、汇编语言程序设计汇编语言程序设计简介简介主要参考书:主要参考书:张雪兰 汇编语言程序设计-从DOS到Windows,清华大学出版社朱耀庭汇编语言程序设计,清华大学出版社沈美明、温冬婵,IBM-PC汇编语言程序设计,清华大学出版社主要内容:主要内容:学习关于计算机硬件和计算机语言方面的基础知识;学习关于计算机硬件和计算机语言方面的基础知识;学习汇编语言相关的基础知识、程序设计方法和技巧;学习汇编语言相关的基础知识、程序设计方法和技巧;为后续课程打下基础;为后续课程打下基础;第第1章章 预备知识预备知识 1.1 计算机语言计算机语言1.2 计算机组织结构计算机组织结构1.3 计算机中数的表示计算机
2、中数的表示第第1章章 预备知识预备知识 1.1 计算机语言计算机语言1.1.1 面向机器的语言面向机器的语言(1)机器语言)机器语言 机机器器语语言言程程序序由机器指令构成,这些机器指令按照执行顺序依次排列,运行时依次执行,完成某个特定的计算或任务; 机机器器指指令令是CPU能直接识别并执行的指令,它的表现形式是二进制编码。机器指令通常由操作码和操作数两部分组成:操作码操作码指出该指令所要完成的操作,即指令的功能;操作数操作数指出参与运算的对象,以及运算结果所存放的位置等。 机器指令与CPU紧密相关,所以,不同种类的CPU所对应的机器指令也就不同。80X86计算机 or Z80计算机?1.1.
3、1 面向机器的语言面向机器的语言(2)汇编语言)汇编语言 用助记符、符号地址等表示的机器指令称作汇汇编编指指令令,用汇编指令编写的程序称作汇编指令程序汇编指令程序。 汇汇编编语语言言是汇编指令集、伪指令集及其使用规则的统称。伪伪指指令令是在程序设计时所需要的一些辅助性说明指令,它不对应具体的机器指令。 用汇编语言编写的程序称为汇编语言程序,或汇编语言源程序,在本课程中简称为源程序。 汇编语言程序要比用机器指令编写的程序容易理解和维护。 汇编语言源程序是一个文本文件,80x86汇编语言源程序扩展名是.asm,它必须经过翻译才能够变成可执行的机器语言程序,这个翻译过程称作汇编汇编。 (3)汇编程序
4、)汇编程序 用汇编语言编写的程序大大提高了程序的可读性,但失去了CPU能直接识别的特性。 把汇编语言编写的源程序翻译成CPU能识别的机器指令序列,我们称该翻译程序为汇编程序。图1.1是翻译程序的翻译过程示意图。 目前,常用的汇编程序有:MASM、TASM和DEBUG等。面向机器的语言面向机器的语言图1.1 汇编语言指令到机器指令的示意图MOVDL,33H ; B233HMOVAH,2 ; B402HINT21H ;CD21HINT20H ;CD20H1.1.2 非面向机器的计算机语言非面向机器的计算机语言非面向计算机的语言按照翻译程序的类型分为编译型语言和解释型语言;(1)编译型计算机语言)编
5、译型计算机语言 翻译成机器语言的过程远比汇编的过程复杂,通常经过预处理和多次扫描才能够变成机器语言,这个过程称作编译。编译后的浮动二进制文件要经过连接,才能够生成可执行文件。可执行文件运行时,不需要编译程序在场。 例如各种C语言都是编译型语言。(2)解释型计算机语言)解释型计算机语言 解释型计算机语言执行时需要翻译程序在场,边解释边执行。 如Basic语言、许多脚本语言(Perl、Java Script语言等)是解释型语言。1.1.3 汇编语言主要特性汇编语言主要特性举例:举例:编程实现123+456,结果保存到变量sum中。/C语言实现Main() int a,b,sum; a=123; b
6、=456; sum=a+b;-机器语言实现输入程序代码:-E CS:100 A1 0B 01 03 06 0D 01 A3 0F 01 C3设置数据:-E DS 010B 7B 00 C8 01 00 00运行结果:12F8:010F 43 02汇编语言主要特性汇编语言主要特性-汇编语言实现CODE SEGMENTORG 100HASSUME CS:CODE,DS:CODEMAIN PROG NEARMOV AX,AADDAX,BMOV SUM,AXRET ADW 123 BDW 456SUM DW ?MAIN ENDPCODE ENDSEND MAIN汇编程序不能直接运行,把它经过汇编、连接
7、处理后得到.com可执行文件,运行后得到结果。汇编语句与机器语句一一对应,它是把每汇编语句与机器语句一一对应,它是把每条指令及数据用便于记忆的符号书写,是条指令及数据用便于记忆的符号书写,是一种符号化了的机器语言,即用指令助记一种符号化了的机器语言,即用指令助记符、符号地址、标号等符号书写程序的语符、符号地址、标号等符号书写程序的语言言汇编语言主要特性汇编语言主要特性程序设计语言可执行程序占用字节数高级语言(C)csum.exe4330汇编语言(MASM)17机器语言17程序占用字节数统计汇编语言的特点:汇编语言的特点:占用空间少;占用空间少;执行速度快;执行速度快;10倍?倍?直接控制硬件能
8、力强;直接控制硬件能力强;开发周期长、可移植性差、不易掌握;开发周期长、可移植性差、不易掌握;有助于理解程序与操作系统、处理器、存储器、外部设备之间的关系和工作原理;在管理专用硬件设备方面提供了更多的控制方法,完成更具专业性的任务;生成更加紧凑的可执行模块,减小存储空间的需求;程序执行效率更高、速度更快;编写、调试程序的复杂性高;应用软件大部分是用高级语言编写,但对于执行效率要求苛刻的部分还需要用汇编语言进行优化改进;常驻内存程序和中断服务例行程序几乎都用汇编语言编写;汇编语言主要特性汇编语言主要特性 根据应用程序的“可移植性”和“执行效率”来确定是否选用汇编语言 下面简单列举几个领域以示说明
9、,但不要把它们绝对化。1、适用的领域要求执行效率高、反应快的领域,如:操作系统内核,实时系统等;系统性能的瓶颈,或频繁被使用子程序或程序段;与硬件资源密切相关的软件开发,如:设备驱动程序等;受存储容量限制的应用领域,如:嵌入式控制功能等;2、不宜使用的领域大型软件的整体开发;没有特殊要求的一般应用系统的开发等。汇编语言的使用领域汇编语言的使用领域汇编语言主要特性汇编语言主要特性1.2 计算机组织结构计算机组织结构1.2.1 冯冯诺依曼结构诺依曼结构由运算器、控制器、存储器、输入设备和输出设备五大部分组成;数据和程序以二进制代码的形式不加区别地存放在存储器中,存放位置由地址指定,地址码也是二进制
10、形式;控制器根据存放在存储器中的指令序列(即程序)工作,并由一个程序计数器(PC)控制指令的执行。控制器具有判断能力,能够根据计算结果选择不同的动作流程运算器控制器存储器输入设备输出设备微型计算机组成微型计算机组成计算机系统组成:计算机系统组成:硬件+软件硬件组成:硬件组成:中央处理器(CPU),存储器,输入输出子系统和系统总线微型计算机组成微型计算机组成计算机软件系统组成计算机软件系统组成微型计算机的工作过程微型计算机的工作过程 微型计算机的工作过程就是执行程序的过程,而程序由指令序列组成,因此,执行程序的过程,就是执行指令序列的过程,即逐条地从存储器中取出指令并完成指令所指定的操作。 由于
11、执行每一条指令,都包括取指、译码和执行三个基本步骤,所以,微型计算机的工作过程,也就是不断地取指令、译码和执行的过程,直到遇到停机指令时才结束机器的运行。优点:优点:处理器简单通用,把复杂问题转移到存放解释程序存储器中,即把复杂的硬件设计转化为复杂的软件设计。1.2.2 8086微处理器结构微处理器结构总线接口部件(总线接口部件(bus interface unit, BIU) 负责与存储器、I/O端口传送数据。执行部件执行部件(execution unit, EU) 负责指令的执行。8086微处理器微处理器8086 CPU的结构是一次划时代的革命,其基础的逻辑结构一直沿用至今,即使最新型的酷
12、睿多核CPU,使用的也还是地址、数据及控制三总线的协同工作方法。无论何种CPU,在工作时都是围绕一个核心,即对某个指定的“地址”进行操作,或者取数或者运算。这个地址可以是某个通用寄存器、内存的某个地址、甚至是某个外设端口。“需要执行的机器指令程序,首先必须存放在内存的某个地方”。理解这一点是汇编语言程序设计的基本要求,用高级语言编写并编译程序时并不需要知道这一点,这是机器语言与高级语言的差异。存放程序的这个地方,在程序执行时由总线接口单元的CS及IP共同来指向。指令通过外部总线从内存中被取出后,会送到BIU的指令流队列,并由EU执行。而这一切都是由控制电路来协调完成的。8086微处理器微处理器
13、EU中的算术逻辑单元ALU用来维持MPU的状态和标志,管理通用寄存器和指令操作数。EU中寄存器是16位的,数据通路也是16位的,这样便于数据的快速传送。EU从BIU的指令队列中获取指令,译码后开始执行,当指令要求访问内存或端口时,EU请求BIU存取数据。这时EU算出的地址是相对段基的16位位移量,BIU根据指令要求选定相应的段寄存器来得到段基,然后再由段基和位移才能得出操作数的20位的物理地址。20位的物理地址使得EU能直接访问的存储空间为1M字节。BIU用来实现EU的所有总线操作,在EU执行指令时,BIU从存储器中取出后继指令送入指令队列,该队列同时能存放总共6个字节的指令。在绝大多数情况下
14、,这一指令队列能保证EU从该队列中取出马上要执行的指令,而不必到内存中直接取指令。 1.2.3 8086的寄存器组的寄存器组寄存器是寄存器是CPU内部存放操作数的地方,它的操作速度比内存操作内部存放操作数的地方,它的操作速度比内存操作数速度快。数速度快。8086共有14个寄存器,它们都是16位的,可以存放16位二进制数。通用寄存器:通用寄存器:4个数据寄存器:AX、BX、CX和DX,每个寄存器又可分为2个8位寄存器2个变址寄存器:DI和SI2个指针寄存器:SP和BP段寄存器段寄存器4个段寄存器:ES、CS、SS和DS标志寄存器标志寄存器 1个标志寄存器:FLAG指令指针寄存器指令指针寄存器 一
15、个指令指针寄存器:IP通用寄存器的作用通用寄存器的作用 (1) 数据寄存器数据寄存器 数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。 4个16位寄存器: AX:Accumulator,累加器,累加器 BX:Base Register, 基址寄存器基址寄存器 CX:Count Register,计数寄存器,计数寄存器 DX:Data Register,数据寄存器,数据寄存器 上述4个寄存器可分为8个8位寄存器,分别为AH和AL、BH和BL、CH和CL、DH和DL。 每个寄存器都有自己的名称,可独立存取。程序员可利用数据寄存器“能分可合”的特性,灵
16、活地处理双字、字和字节等信息。 在32位处理器中,有4个32位寄存器:EAX、EBX、ECX和EDX。通用寄存器的作用通用寄存器的作用 (2)变址寄存器)变址寄存器(Index Register) SI:Source Index Register,源变址寄存器,源变址寄存器 DI:Destination Index Register,目标变址寄存器,目标变址寄存器 它们可作一般的存储器指针使用。在字符串操作指令的执行过程中,对它们有特定的要求,且具有特殊的功能。(3) 指针寄存器指针寄存器(Pointer Register) 它们主要用于访问堆栈内的存储单元,并且规定: BP:基指针(Base
17、 Pointer)寄存器,用它可直接存取堆栈中的数据 SP:堆栈指针(Stack Pointer)寄存器,用它只可访问栈顶通用寄存器的作用通用寄存器的作用寄寄 存存 器器用用 途途AX乘法指令作累加器,乘法指令作累加器,I/O指令作数据寄存器指令作数据寄存器由累加器做立即数运算,比其他指令少占字节由累加器做立即数运算,比其他指令少占字节ALBCD码,码,ASCII码运算的累加器,查表指令码运算的累加器,查表指令XLAT的累加器字节乘法,字节的累加器字节乘法,字节除法,字节除法,字节I/O,十进制算术运算,十进制算术运算AH作为取指令标志作为取指令标志LAHF的目的寄存器,字节乘法,字节除法的目
18、的寄存器,字节乘法,字节除法BX间接寻址作基址寄存器,间接寻址作基址寄存器,XLAT指令中作基址寄存器指令中作基址寄存器CX串操作或循环控制中的计数器,指令执行后内容会自动变化串操作或循环控制中的计数器,指令执行后内容会自动变化CL移位,循环计数,指令执行后内容不变移位,循环计数,指令执行后内容不变DX字乘法,字除法,字乘法,字除法,I/O指令中作端口间接寻址指令中作端口间接寻址SI存储器指针存储器指针(串操作中的源指针串操作中的源指针)DI存储器指针存储器指针(串操作中的目的指针串操作中的目的指针)BP存储器指针存储器指针(存取堆栈的指针存取堆栈的指针)SP堆栈指针通用寄存器的隐含使用及特殊
19、用途通用寄存器的隐含使用及特殊用途 8086在取指令和寻找内存操作数的地址时,采用了分段寻找的方式,在同一时刻可将内存分成4个段:代码段、数据段、堆栈段和特别数据段,段与段之间允许有重叠。4个段寄存器是: CS (Code Segment Register,代码段寄存器) DS (Data Segment Register,数据段寄存器) SS (Stack Segment Register,堆栈段寄存器) ES (Extra Segment Register,附加段寄存器)。 这4个寄存器都只能够作为16位寄存器使用。 8086外部有20根地址线,它可以直接访问的物理空间为1M字节,其编码区
20、间为:00000H0FFFFFH。而CPU内部存放存储单元偏移量的寄存器(如IP、SP、BP、SI、DI和BX等)都是16位,它们的编码范围仅为:00000H0FFFFH。 如何用16位寄存器有效地访问1MB的存储空间,8086采用了内存分段的管理模式,并引入存储器分段的概念。段寄存器的作用段寄存器的作用8086的存储器的存储器计计算算机机存存储储信信息息的的基基本本单单位位是是一一个个二二进进制制位位(bit):1或或0,每每8位组成一个字节;位组成一个字节;通常所说字长为通常所说字长为16位,由位,由2个字节组成;个字节组成;在在存存储储器器里里以以字字节节为为单单位位存存储储信信息息,为
21、为了了正正确确存存取取信信息息,每每一个字节单元给以一个存储器地址。一个字节单元给以一个存储器地址。地地址址从从0开开始始编编号号,顺顺序序每每次次加加1,地地址址也也是是以以二二进进制制数数表表示示的;的;存储单元的内容存储单元的内容 存储单元中所存放的二进制信息称为该存储单元的内容或值,并且规定:一个字节的内容是该字节单元内存放的二进制信息;一个字的内容是该字地址所指向的单元及其后继一个单元的内容拼接而成;一个双字的内容是该字地址所指向的单元及其后三个单元的内容拼接而成。 在拼接“字内容”时,按“高高低低”的原则来处理,即:高存储单元(地址大的存储单元)的值是“字内容”的高8位,低存储单元
22、(地址小的存储单元)的值是“字内容”的低8位。 在拼接“双字内容”时也是如此。8086内存分段管理模式内存分段管理模式8086内存分段管理模式内存分段管理模式(1)存储器的分段)存储器的分段 计算机的内存单元是以“字节”为最小单位进行线性编址的。为了标识每个存储单元,就给每个存储单元规定一个编号,此编号就是该存储单元的物理地址。 16位微机把内存空间划分成若干个逻辑段,每个逻辑段的要求如下:逻辑段的起始地址(通常简称为:段地址)必须是16的倍数,即最低4位二进制必须全为0;逻辑段的最大容量为64K,这由16位寄存器的寻址空间所决定。 按上述规定,1M内存最多可分成64K个段,即65536个段(
23、段之间相互重叠),至少可分成16个相互不重叠的段。(2)物理地址的形成方式)物理地址的形成方式 存储单元的逻辑地址分为两部分:段地址和偏移量。由逻辑地址得到其物理地址(PAPhysical Address)的计算方法如下:物理地址物理地址PA段地址段地址16 + 偏移量偏移量8086内存分段管理模式内存分段管理模式(3)段寄存器的引用)段寄存器的引用 段寄存器是因为对内存的分段管理而设置的。一般情况下,段寄存器及其指针寄存器的引用关系方面有如下规定:取指令所用的段寄存器和偏移量一定是用CS和IP;堆栈操作所用的段寄存器和偏移量一定是SS和SP;串操作的目标操作数所用的段寄存器和偏移量一定是ES
24、和DI;其它情况,段寄存器除其默认段寄存器外,还可以强行改变为其它段寄存器。访问存储器方式缺省的段寄存器可选用的段寄存器偏 移 量取指令CSIP堆栈操作SSSP一般取操作数DSCS、ES、SS有效地址串操作源操作数DSSI目标操作数ESDI使用指针寄存器BPSSCS、DS、ES有效地址8086内存分段管理模式内存分段管理模式控制寄存器控制寄存器(1)指令指针寄存器)指令指针寄存器IP (Instruction Pointer) IP是16位的寄存器,存放着下次将要执行的指令在代码段的偏移量。 在80386及其高档处理器处于保护模式时,其指令指针寄存器是32位的EIP。(2)标志寄存器)标志寄存
25、器FLAG (Flags Register) FLAG寄存器的各位用来存放各种不同的标志。算术运算指令和逻辑运算指令的运行结果都将定性地反映在不同的标志位上,以便后续的条件判断指令根据这些标志实现判断转移,判断转移的实质是修改CS和IP。这也正是计算机能够实现判断转移的底层原理。 6个状态标志:OF、SF、ZF、AF、PF、CF3个控制标志:IF、DF、TF;7位保留;标志寄存器标志寄存器标志寄存器中的状态标志位含义如下标志寄存器中的状态标志位含义如下 CF(carry flag):进位标志,在进行字/字节运算产生进位或借位时置1,否则置0。 PF(parity flag):奇偶性标志,结果有
26、偶数位为1时置1,否则置0。 AF(auxiliary carry flag):辅助进位标志,当进行字节运算有低4位向高4位进位或借位时置1,否则置0。在作BCD码运算时常常使用。 ZF(zero flag):零标志,当运算结果为0时置1,否则置0。 SF(sign flag):符号标志,运算结果为负,即结果最高位为1时置1,否则置0。 OF(overflow flag):溢出标志,运算溢出时自动置1,当它为1时可用溢出中断指令产生中断。标志寄存器标志寄存器状态标志寄存器举例:状态标志寄存器举例: 0101 0100 0011 10010101 0100 0011 1001 + 0100 01
27、01 0110 1010 + 0100 0101 0110 1010 1001 1001 1010 0011 1001 1001 1010 0011 运算后运算后 CF=0 PF=1 OF=1CF=0 PF=1 OF=1 AF=1 ZF=0 SF=1 AF=1 ZF=0 SF=1标志寄存器中的控制标志位含义如下标志寄存器中的控制标志位含义如下 TF(trap flag):陷阱标志,若IF=1,则在执行指令时产生单步中断。 IF(interrupt flag):中断标志,若IF=1开中断,响应可屏蔽中断;IF=0,关中断。 DF(direction flag):方向标志,DF置1引起串操作指令的
28、变址寄存器自动减值,DF置0引起串操作指令的变址寄存器自动增值。 1.3 计算机中数的表示计算机中数的表示几个基本概念几个基本概念位(位(bit)是计算机所能表示的最小最基本的数据单位,它指的是取值只能为0或1的一个二进制数值位。位作为单位时记作b;字节(字节(byte)由8个二进制位组成,通常用作计算存储容量的单位,字节作为单位时记作B K是kelo的缩写,1K=1024=210; M是mega的缩写,1M=1024K=220; G是Giga的缩写,1G=1024M=230; T是tera的缩写,1T=1024G=240。计算机中数的表示计算机中数的表示字长字长是微处理器一次可以直接处理的二
29、进制数码的位数,它通常取决于微处理器内部通用寄存器的位数和数据总线的宽度。微处理器的字长有4位、8位、16位、32位、64位等。8086为16位微处理器,80386、奔腾为32位微处理器。计算机中数的表示计算机中数的表示1.3.1 数值数据的表示数值数据的表示进位计数制及其相互转换进位计数制及其相互转换十进制、二进制、八进制和十六进制采用的都是进位计数制,进位计数制中用少量数码按次序排列成数位,并按由低到高的进位方式进行计数。基数基数和权和权是进位计数制的两个基本要素。基数基数是进位计数制中所用数码的个数,基数为r的进位计数制中需要r个数码,每个数位计满r就向高位进一,即逢r进一。在进位计数制
30、表示的数中,同一数字处在不同位置表示不同的值,它所表示的值是该数字乘以一个由它所处位置所决定的常数,这一常数就是该数位所具有的权权。r进制数各位的权是以r为底的幂。数值数据的表示数值数据的表示(1)二进制)二进制 二进制的表示元素是:0和1。书写时,在数据后面紧跟一个字母B。如:0101B、10101B等。 数据的二进制写起来比较长,通常情况下,程序中不直接用二进制来书写具体的数值,而改用八进制、十进制或十六进制。(2)八进制)八进制 八进制是一种二进制的变形,三位二进制可变为一位八进制,反之也然。 八进制的表示元素是:0、1、7。 书写时,在数据后面紧跟一个字母Q。如:1234Q、7654Q
31、、54Q等。(3)十进制)十进制 十进制是我们最熟悉的一种数据表示形式,其基本元素是:0、1、9。 书写时,在数据后面紧跟一个字母D。如:1234D、7674D、5411D等。(4)十六进制)十六进制 十六进制是另一种二进制的变形,四位二进制可变为一位十六进制,反之也然。其基本元素是:09、AF、af,其中:AF依次代表1015。 书写时,数据后面紧跟一个字母H。当十六进制数的第一个字符是字母时,在其之前必须添加一个0。如:100H、56EFH、0FFH、0ABCDH等。BCD码码(5)BCD码码二进制编码的十进制数(Binary-Coded Decimal)非压缩型非压缩型BCD码:码:用一
32、个字节表示一位十进制数,高四位为0000,低四位00001001分别表示09;压缩型压缩型BCD码:码:一个字节表示两位十进制数,高四位表示十位数字,低四位表示个位数字。 十进制 压缩的 非压缩的 12 0001 0010 0000 0001 0000 0010 623 0000 0110 0010 0011 0000 0110 0000 0010 0000 0011 910 0000 1001 0001 0000 0000 1001 0000 0001 0000 0000不同基数的数之间的转换不同基数的数之间的转换二进制数和十进制数之间的转换二进制数和十进制数之间的转换 二进制数转换为十进制
33、数二进制数转换为十进制数十进制数转换为二进制数十进制数转换为二进制数举例:举例:1011100.10111B92.71875D二进制数和十六进制数、八进制数之间的转换二进制数和十六进制数、八进制数之间的转换四位二进制可变为一位十六进制,反之亦然四位二进制可变为一位十六进制,反之亦然三位二进制可变为一位八进制,反之亦然三位二进制可变为一位八进制,反之亦然举例:举例: 11010110111111B=35BFH 11010110111111B=32677Q十进制数和十六、八进制数之间的转换十进制数和十六、八进制数之间的转换 借助二进制数为桥梁借助二进制数为桥梁按定义直接转换按定义直接转换1.3.2
34、 基本数据类型基本数据类型(1)字节)字节 一个字节有8位二进制组成,其最高位是第7位,最低位是第0位。 通常情况下,存储器按字节编址,读写存储器的最小信息单位就是字节。(2)字)字 由2个字节组成一个字,其最高位是第15位,最低位是第0位。高8位称为高字节,低8位称为低字节。(3)双字)双字 用2个字(4个字节)来组成一个双字,其高16位称为高字,低16位称为低字。 双字有较大的数据表示范围,它通常是为了满足数据的表示范围而选用的数据类型,也可用于存储远指针。 (4)四字)四字 由4个字(8个字节)组成一个四字类型,它总共有64个二进制位,有更大的数据表示范围,但在汇编语言中很少使用该数据类
35、型。(6)字符串)字符串 字符串是由若干个字节组成的,字节数不定,通常每个字节存储一个字符。该数据形式是汇编语言程序中经常使用的一种数据形式。1.3.3 数的补码表示数的补码表示无符号数的表示无符号数的表示 n位二进制数,其所有状态全部用来表示0和自然数,可表示的范围是02n1。符号数的表示原码、反码、补码符号数的表示原码、反码、补码把二进制数的最高一位定义为符号位,符号位为0表示正数,符号位为1表示负数;这种在计算机中使用的、连同符号位一起数值化了的数,称为机器数。机器数所表示的真实的数值,称为真值。对于符号数,机器数常用的表示方法有原码、反码和补码三种。数X的原码记作X原,反码记作X反,补
36、码记作X补。原码:最高位表示符号,数值位用二进制绝对值表示的方法;反码:负数的原码符号位保持不变,其余位取反,正数的反码与原码相同。补码:负数的反码加1得到其补码。正数的补码与原码相同。数的补码表示数的补码表示举例:写出一个负数的补码。举例:写出一个负数的补码。 机器字长16位,写出N=117D的补码表示 +117表示为:0000 0000 0111 0101 原码为:1000 0000 0111 0101 反码为:1111 1111 1000 1010 补码为:1111 1111 1000 10110FF8BH补码的符号扩展补码的符号扩展关于补码表示的符号扩展问题关于补码表示的符号扩展问题对
37、于用补码表示的数,当从位数较少扩展到位数较多时:正数的符号扩展应该在前面用0补足负数的符号扩展应该在前面用1补足举例:若机器字长为8位,则:+46补0010 1110, 46补1101 0010如果要将两数扩展到16位系统,则+46补0000 0000 0010 1110, 46补1111 1111 1101 0010补码的表示范围补码的表示范围n位补码表示数的范围是位补码表示数的范围是 2n-1 N 2n-1-18位和16位二进制补码表示数的范围补码的加法和减法补码的加法和减法补码的加法规则为:X+Y补 X补 + Y补补码的减法规则为:XY补 X补 + Y补计算机中利用补码表示数,使其加减运
38、算十分方便,不必判断数的正负,只要符号位参加运算,就能得到正确结果。1.3.4 IEEE浮点数浮点数 浮点数表示范围极大,可以用固定的格式表示,IEEE浮点数格式为:S:符号位;e:有偏指数,真正指数为e127;1.F:尾数,规格化处理:尾数的最高位必须是1,浮点表示中省略 1;表示数的范围: 2126 2+128 SeF18230e2551.3.5 非数值数据的表示非数值数据的表示(1)ASCII码 在ASCII码表中,对学习本课程有用的主要信息有:字符09是连续编码的,其ASCII码的低4位就是该字符在十进制中的数值;小写字母的ASCII码比大写字母的编码大,对应字母的编码之间相差20H。
39、(2)汉字编码 我国在1981年5月对6000多个常用的汉字制定了交换码的国家标准,即:GB2312-80。 该标准给定每个字符的二进制编码,即国标码。ASCII码字符表码字符表习题与作业习题与作业1,将下列十进制数转换为二进制数和十六进制数:(1)369 (2) 10000(3) 4095(4) 32767 2,将下列二进制数转换为十六进制数和十进制数:(1) 10 1101(2) 1000 0000(3) 1111 1111 1111 1111 (4) 1111 11113,将下列十六进制数转换为二进制数和十进制数:(1)FA(2) 5B(3) FFFE(4) 1234 4,下列各数均为十
40、进制数,请用8位二进制补码计算下列各题,并用十六进制数表示其运算结果,给出计算机运算后的CF和OF状态。(1)(-85)+76 (2) 85+(-76) (3) 85-76 (4) 85-(-76) (5) (-85)-76 (6) -85-(-76)习题与作业习题与作业5,有两个16位字1EE5H和2A3CH分别存放在80x86微机的存储器的000B0H和000B3H单元中,请用图表示出它们在存储器里的存放情况。6,在8086中,段地址和偏移地址为3017:000A的存储单元的物理地址是什么?如果段地址和偏移地址是3015:002A和3010:007A呢?7,下列操作可使用那些寄存器?(1) 加法和减法数据寄存器等(2) 循环计数CX(3) 乘法和除法 AX、DX,乘数和除数用其他寄存器或存储器(4) 保存段地址段寄存器(5) 表示运算结果为0ZF=1(6) 将要执行的指令地址CS:IP(7) 将要从堆栈取出数据的地址SS:SP