ASM02IBMPC计算机组织

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

汇编语言程序设计第2章IBMPC计算机组织AssemblyLanguageProgramming第2章IBMPC计算机组织2.180X86微处理器概述2.2基于微处理器的计算机系统组成2.3微处理器2.3.1微处理器的结构2.3.280X86寄存器组2.4存储器2.4.1存储单元的地址和内容2.4.2实模式存储器寻址2.4.3保护模式存储器寻址32.180X86微处理器将运算器和控制器集成在一个芯片上就构成了微处理器(CPU),控制整个计算机的运作并进行运算。8086/8088802868038680486Pentium字长1616323232数据总线DB16/816323264地址总线AB2024323232最大寻址1MB16MB4GB4GB4GB时钟范围(MHz)4.776~1616~4033~12066~166执行速度(MIPS)0.050.4~0.83~420~75112~28080X86微处理器主要特征:2.2基于微处理器的计算机系统构成•计算机系统包括硬件和软件两大部分硬件:指计算机的物理实体(如CPU,显卡等),它分为微处理器,存储器,接口电路,外部设备和系统总线等。中央处理机CPU总线控制逻辑接口接口存储器大容量存储器I/O子系统系统总线I/O设备45软件:指使用和发挥计算机效能的各种程序的总称,通常我们将它分为两大类:•系统软件:系统软件主要用来对计算机系统实际运行进行控制,管理和服务的。•应用软件:指的是用户自己编的各类应用程序.系统软件软件数据库管理系统工具软件语言处理程序操作系统应用软件软件包用户程序2.3中央微处理器2.3.1中央微处理器的组成及其编程结构任务:执行存放在存储器里的指令序列。组成:算术逻辑部件进行算术和逻辑运算。控制逻辑负责对全机的控制工作。工作寄存器存放计算过程中的各种信息。编程结构:CPU对汇编语言程序员来说,编程结构主要由一组可见寄存器组成。6操作数地址、操作数、运算的中间结果782.3.28086的寄存器组两大类:程序不可见寄存器和程序可见寄存器。•程序不可见寄存器——一般应用程序中不使用而由系统使用的寄存器。•程序可见寄存器——可以由指令使用的寄存器。包括三类:通用寄存器(8个)专用寄存器(2个)段寄存器(4个)80X86程序可见寄存器组EAXALAH累加器EBXBLBH基址变址ECXCLCH计数器EDXDLDH数据ESPSP堆栈指针EBPBP基址指针ESISI源变址EDIDI目的变址EIPIP指令指针EFLAGSFLAGS标志CS代码段DS数据段ES附加段SS堆栈段FSGSAXBXCXDX101.通用寄存器(1)数据寄存器AX(accumulator):累加器,在乘除、I/O指令中使用BX(base):通用,基地址寄存器CX(count):通用,计数器DX(data):通用,双字运算及I/O操作中使用。8个字节寄存器:AH、AL、BH、BL、CH、CL、DH、DL(2)指针或变址寄存器SP(stackpointer):堆栈指针寄存器,用来指示栈顶的偏移地址BP(basepointer):基址寄存器,与SS联用SI(sourceindex):源变址寄存器DI(destinationindex):目的变址寄存器。(3)32位通用寄存器•EAX、EBX、ECX、EDX、ESP、EBP、ESI、EDI,在80386及其后继机型中,所有32位通用寄存器既可以存放数据,也可以存放地址,每个寄存器的专用特性与8086/8088和80286的一一对应2.专用寄存器(1)IP(instructionpointer)/EIP:指令指针寄存器•存放代码段中的偏移地址,在程序的运行中始终指向下一条指令的首地址,与CS一起确定一条指令的物理地址。(2)FLAGS(ProgramStatusWord)/EFLAG:标志寄存器•存放反映处理器和运行程序执行结果状态的。11123.段寄存器专用于存放段地址(1)CS(CodeSegment):代码段寄存器(2)DS(DataSegment):数据段寄存器(3)SS(StackSegment):堆栈段寄存器(4)ES(ExtraSegment):附加段寄存器(5)FS附加段寄存器:附加段寄存器(6)GS附加段寄存器:附加段寄存器(5)和(6)无缺省组合,必须加段前缀说明138086/8088标志寄存器(FLAGS/PSW)条件码标志:控制标志:ZF零标志DF方向标志SF符号标志IF中断标志CF进位标志TF陷阱标志OF溢出标志AF辅助进位标志PF奇偶标志1514131211109876543210CFPFAFZFSFTFIFDFOF•其它FLAGS标志:(自学)–IOPL(I/OPrivilegeLevel)I/O特权级–NT(NestedTask)嵌套任务标志;286增加–RF(ResumeFlag)重新启动标志–VM(Virtual8086Mode)虚拟8086模式位;386增加–AC(AlignmentCheckMode)对准检查方式位;486增加–VIF(VirtualInterruptFlag)虚拟中断标志–VIP(VirtualInterruptPendingFlag)虚拟中断未决标志–ID(IdentificationFlag)标识标志;Pentium增加15零标志ZF(ZeroFlag)•若运算结果为0,则ZF=1,否则ZF=0。例如:3AH+7CH=B6H,结果非零:ZF=084H+7CH=(1)00H,结果是零:ZF=1注意:ZF为1表示的结果是016符号标志SF(SignFlag)•运算结果最高位为1,则SF=1;否则SF=0。例如:3AH+7CH=B6H,最高位D7=1:SF=184H+7CH=(1)00H,最高位D7=0:SF=0有符号数据利用最高有效位表示数据的符号。所以,最高有效位就是符号标志的状态。17进位标志CF(CarryFlag)•当运算结果的最高有效位有进位(加法)或借位(减法)时,进位标志置1,即CF=1;否则CF=0。例如:3AH+7CH=B6H,即58+124=182无进位:CF=0AAH+7CH=(1)26H,即170+124=294有进位:CF=118溢出标志OF(OverflowFlag)•若算术运算的结果有溢出,则OF=1;否则OF=0。•溢出:有符号数运算结果超出了补码表示范围。处理器内部以补码表示有符号数8位字长整数范围:-128~+12716位字长整数范围:-32768~+32767•例如:3AH+7CH=B6H,即58+124=182有溢出:OF=1AAH+7CH=(1)26H,即-86+124=28无溢出:OF=0什么是溢出?19溢出和进位•进位标志CF表示无符号数运算结果是否超出范围,运算结果仍然正确(配合进位)。•溢出标志OF表示有符号数运算结果是否超出范围,运算结果已经不正确。处理器按照无符号数求得结果,并设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。程序员决定应该利用哪个标志。认为是无符号数运算,关心进位标志;认为是有符号数运算,注意溢出标志。20例:MOVAX,FFFFHMOVBX,1ADDAX,BX指令执行后,(AX)=0,OF=0,CF=1,ZF=1,SF=0例:MOVAX,1MOVBX,2ADDAX,BX指令执行后,(AX)=3,OF=0,CF=0,ZF=0,SF=0212.3.380x86CPU的工作模式80x86CPU的3种工作模式1.实模式与8086兼容的工作模式,只有低20位地址线起作用,仅能寻址第一个1MB的内存空间。如:MSDOS运行在实模式下。2.保护模式32位80x86CPU的主要工作模式,提供对程序和数据进行安全检查的保护机制。如:Windows9x/NT/2000运行在保护模式下。3.虚拟8086模式在Windows9x下,若打开一个MSDOS窗口,运行一个DOS应用程序,那么该程序就运行在虚拟8086模式下。222.4存储器2.4.1存储单元的地址和内容1.存储信息的基本单位bit计算机中信息表示的最小单位,byte(8位)数据存取的最小单位2.地址:每一字节单元的编号,地址空间的范围与地址线数目有关。16位地址:0000H~FFFFH;20位地址:00000H~FFFFFH;3.内容:存储单元中存放的信息,如(0004)=78H4.汇编中的数据类型byte(8位)word(16位)Dword(32位)Fword(48位)……存储器结构...存储器0000H0001H0002H0003H0004H0005H0006HFFFEHFFFFH低字节高字节字单元字节单元低地址字节单元高地址字节单元563412242.4.1存储单元的地址和内容5.存储形式:“低对低、高对高”的小端方式。6.数据的地址对齐同一个存储器地址可以是字节单元地址、字单元地址、双字单元地址等。字单元安排在偶地址(xxx0B)、双字单元安排在模4地址(xx00B)等被称为“地址对齐(Align)”。对于不对齐地址的数据,处理器访问时,需要额外的访问存储器时间。1)多字节数据需占连续的多个存储单元,低字节存入低地址,高字节存入高地址。2)多字节数据占据的地址空间用它的低地址表示。2576543210100111110000H001001100001H000111100002H110101110003H存储器1514131211109876543210字高位字节低位字节1001111100100110(0000H)=269FH(0002H)=D71EH(0001H)=1E26H访问两次存储器(0000H)=9FH(0001H)=26H(0002H)=1EH(0003H)=D7H262.4.2实模式存储器寻址8086/8088只能在实模式下。1.存储器地址的分段问题:16位结构cpu如何解决20位地址的问题?解决:将存储器分段(逻辑上),每段最大不超过64KB,段内单元地址可用16位表示,称为偏移地址,每段的起始地址称为段地址(或段基址)。规定:1)段地址必须取为小段首址。2)从0地址单元开始,每16个单元为一小段。小段首地址为:00000H,00010H,00020H,…,FFFF0H。在一个1M的存储器里,共有64K个小段。16位结构CPU的特征:1)16位字长;2)16位寄存器(最大宽度);3)16位数据线。导致:cpu只能传送16位的地址,寻址能力只有64K8086的内存空间:1)内存是一维的线性空间。2)每一个内存单元在这个空间中都有唯一的物理地址;3)有20位地址总线,可传送20位地址,寻址能力为1M。272.4.2实模式存储器寻址8086/8088只能在实模式下。2.物理地址的计算方法逻辑地址由段地址和偏移地址组成。物理地址=16D×段地址+偏移地址16位段地址01516位偏移地址015+020位物理地址190000显然,一个物理地址可以有多个逻辑地址地址加法器的工作过程8086CPU给出物理地址的方法存储器分段管理的地址概念图示:段内偏移量偏移地址=段起始地址64K段内地址0000H0001H……0FFFH…….FFFFH64K段内地址0000H0001H……FFFFH30000H段内偏移量偏移地址=段起始地址40000H30000H+0FFFH=30FFFH物理地址......存储器0FFFH29思考:1)1MB空间最多能分成多少个段?2)1MB空间最少能分成多少个段?3)小段有什么特征?每隔16个存储单元就可以开始一个段,所以1MB最多可以有:220÷16=216=64K个段每隔64K个存储单元开始一个段,所以1MB最少可以有:220÷216=16个段303.段寄存器8086CPU有4个段寄存器:CS、DS、SS、ES,用来存放段地址。一般情况下,各段在存储器中的分配是由操作系统负责的。(也可以在编程时指定)各段可以独立----每个段都占用64K存储区,也可以重叠----每个段按实际大小分配存储区,不一定占有64K的最大段空间。memo

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功