【文档说明】计算机的编程结构课件.pptx,共(56)页,281.921 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-77312.html
以下为本文档部分文字说明:
计算机的编程结构课件默认16位段+偏移寻址组合段偏移地址主要用途CSIP指令地址SSSP或BP堆栈地址DSBX,SI,DI,变量名,8或16位数数据地址ESDI(目的串偏移地址)目的串地址默认32位段+偏移寻址组合段偏移地址主要用途CSEIP指令地址SSE
SP或EBP堆栈地址DSEAX,EBX,ECX,EDX,ESI,EDI,变量名,8或32位数数据地址ESEDI(目的串偏移地址)目的串地址FS无默认一般地址GS无默认一般地址微机硬件系统•用总线将微处理器、存储器和各种输入输
出设备接口电路连接在一起的计算机体系结构存储器ROM存储器RAM微处理器CPUI/O接口I/O设备ABDBCB计算机的编程结构1.连接系统各部件2.在部件间传送数据3.数据分类:数值、地址、命令或状态总线部件算术运算和逻辑运算寄存器:分别命名内存:
按字节统一编址I/O端口:每一个端口分配1个地址寄存器•1)通用寄存器–8个32位寄存器:•EAX、EBX、ECX、EDX、ESP、EBP、ESI和EDI–8个16位寄存器:•AX、BX、CX、DX、SP、BP、SI和DI–8个8位寄存器:•AH、BH、CH、DH、
AL、BL、CL和DL•2)段寄存器:CS、DS、ES、SS、FS和GS•3)指令指针寄存器:EIP(32位)和IP(16位)•4)FLAGS(标志)寄存器:EFR(32位)和FR(16位)寄存器16位AXBX
CXDXSPBPSIDI8位8位32位AHALBHBLCHCLDHDLEAXEBXECXEDXESPEBPESIEDIIPFLAGSEIPEFLAGSCSDSESSSFSGS通用寄存器•作用:通用寄存器经常被用来存放操作数和运算结果,有些也可以存放地址•各个寄存器的专用目的–EAX/AX
/AL—累加器(Accumulator)•使用频度最高,用于算术和逻辑运算,串操作及I/O操作指令–EBX/BX—基址寄存器(BaseAddressRegister)•在某些寻址方式中存放地址偏移量–ECX/
CX—计数寄存器(CountRegister)•在循环、移位和串操作等指令中作隐含计数器–EDX/DX—数据寄存器(DataRegister)•在双/四字长运算中存放高位数据,且DX存放I/O端口地址通用寄存器•ESP/SP—堆栈指针寄存器–(StackPointerRegiste
r)–作用:存放当前堆栈栈顶单元的偏移地址–注意:ESP/SP只能在栈操作中提供栈顶偏移地址•EBP/BP—基址指针寄存器–(BasePointerRegister)–在某些寻址方式中,参与形成堆栈存储
单元的有效地址•注意:ESP/SP和EBP/BP与SS联合使用,确定堆栈段中存储单元的物理地址,用于堆栈内存单元的寻址BX作为基址寄存器指向数据段;BP作为基址寄存器指向堆栈段。通用寄存器•ESI/SI和EDI/DI的作用:–在
内存操作数寻址中提供内存单元的偏移地址–在串操作中,2寄存器的专用目的:•ESI/SI—源变址寄存器(SourceIndexRegister)–在串操作中存放源串偏移地址•EDI/DI—目的变址寄存器(DestinationIndexRegister)–在串操作中存放目的串的偏移地址EBX/BX、
ESI/SI和EDI/DI作为地址指针默认地指向数据段;而EBP/BP作为地址指针默认地指向堆栈段段寄存器•存储器分段管理的原因:–8086有20条地址线•最大可编址:220=1MB内存空间–8086CPU内部地址寄存器为16位•16位寄存器寻址范围:216=64K
B段寄存器•解决方案:–用2个16位寄存器描述内存单元地址–分段管理内存•实施办法:–将正运行程序的指令、数据和系统暂存数据分别放在不同段中–段寄存器提供各段首地址的高16位(段基值)–由段基值和有效地址(偏移地址)合成内存单元的物理地址–段容量:64KB段寄存器•CS
—代码段寄存器(CodesegmentRegister)–代码段:存放当前正在运行的程序的指令•SS—堆栈段寄存器(StacksegmentRegister)–堆栈段:存放按“后进先出”原则存取的数据•DS—数
据段寄存器(DatasegmentRegister)–数据段:存放原始数据和程序运行结果•ES—附加段寄存器(ExtrasegmentRegister)–附加段:•存放原始数据和程序运行的中间结果•在串操作中存放目的操作数
•FS和GS—32位微处理器中的附加段寄存器每个段寄存器用来确定一个逻辑段的起始地址段寄存器•当前段–1个程序划分段的数目是任意的;–由CS、SS、DS、ES、FS和GS指向的段是当前段;–在一个程序运行的任一时刻,最多有6个当前段–在一个程序运行的任一时刻,最少有1个当前段:
即由CS指向的代码段。•需要时,编程更换段寄存器的内容,可使其它段成为当前段。例:某程序已建立2个数据段D1和D2:当DS指向D1时,D1是当前段;如程序需要访问D2某存储单元,必须编程将D2段首地址装入D
S,使D2成为当前数据段。段寄存器•段基值:段寄存器内容•段基址:段首地址(20位)•偏移地址/偏移量(有效地址):一个内存单元与它所在段的段基址之间的距离(以字节计算)。•位移量:一个内存单元与所在段内另一内存单元之间的距离(以字节计算)。•注意:默认情况,每个段第一个字节的偏移地址等
于0。偏移地址段基址段基值CSDSSSES……位移量代码段(CodeSegment)•用途:存放程序的指令序列•代码段地址形成:–段寄存器CS:提供代码段段基值–指令指针寄存器EIP/IP:指示代码段的偏移地址–CPU利用CS
∶EIP(IP)合成欲取指令的物理地址堆栈段(StackSegment〕•用途:–1.存放中断调用及子程序调用时程序保存的断点–2.存放程序使用的原始数据及中间结果•堆栈段地址形成:–堆栈段寄存器SS–堆栈指针寄存器ESP/SP:指示堆栈栈顶的偏移地址–CPU利用S
S∶ESP(SP)在堆栈顶部内存单元存取数据数据段(Datasegment〕•用途:–存放运行程序所用原始数据及中间和最终结果•数据段地址形成:–数据段寄存器DS–有效地址(EA):各种存储器寻址方式得
到的内存操作数的偏移地址–CPU利用DS∶EA存取数据段中的数据–串操作指定将数据段作为源操作数的存放区域,其地址由DS∶SI给出附加段(Extrasegment)•用途:保存数据•附加段地址形成:–附加段寄存器ES–有效地址(EA):各
种存储器寻址方式得到的内存操作数的偏移地址–CPU利用ES∶EA存取附加段中的数据–串操作指定将附加段作为目的操作数的存放区域,其地址由ES∶DI给出。指令指针寄存器(EIP/IP)•(InstructionPointerRegister)•功能:指示代码段中要取出指令的偏移
地址–与代码段段寄存器合成下一条欲取指令的物理地址•CPU通过CS∶IP控制指令序列执行的流程•注意:程序运行过程中,IP值不断修改标志寄存器(EFR/FR)•(ExtendedFlagRegister,缩写EFR或Flags)•(FlagRegister,缩写FR或Fla
g)•功能:记录程序执行时的状态或控制指令执行•8086提供1个16位的标志寄存器•其中共有9个常用标志位标志寄存器•常用标志的分类–6个状态标志:•名称:CF,ZF,SF,PF,OF,AF•功能:记录程
序运行结果的状态信息–3个控制标志•名称:DF,IF,TF•功能:控制微处理器的操作和系统所处的工作方式进位标志CF(CarryFlag)•进位标志:CF•作用:当运算结果的最高有效位有进位(加法)或借位(减法)时CF=1,否则CF=0。例1:3AH+7CH=B6H例2:AAH+7CH
=(1)26H00111010+011111001011011010101010+01111100100100110进位没有进位:CF=0有进位:CF=1零标志ZF(ZeroFlag)•零标志:ZF•作用:若运算结果为0,则ZF=1;否则ZF=0例1:3AH+7CH=
例2:84H+7CH=B6H结论:运算结果不是零,ZF=0(1)00H结论:运算结果是零,ZF=1,CF=1符号标志SF(SignFlag)•符号标志:SF•作用:运算结果最高位为1,SF=1;否则SF=0•带符号数
的符号位指示了符号标志的状态例1:3AH+7CH=B6H例2:84H+7CH=(1)O0H最高位D7=1,SF=1最高位D7=0,SF=0奇偶标志PF(ParityFlag)•奇偶标志:PF•作用:运算结果低8位有偶数个“l”时,PF=l
;否则PF=0•注意:置标志结果与操作数的长度无关例:3AH+7CH=B6H因为:B6H=10110110B结果中有5个1,是奇数,故PF=0溢出标志OF(OverflowFlag)•溢出标志:OF•作用:若带符号数算术运算结果超出给定位数所能
表示的范围称为溢出,则OF=1;否则OF=0下面以带符号数加法为例例1:58+124=182换算为16进制:3AH+7CH=B6H结果产生溢出,OF=1何谓溢出•CPU内部用补码表示符号数•8位符号二
进制整数数值范围:-128~+127•16位二进制数数值范围:-32768~+32767•若运算结果超出上述范围,就产生了溢出•有溢出,说明运算结果出错何谓溢出•实例分析:3AH+7CH=B6H–分析1:因为上例即58+124=182,结果超出-128~+127范围,故产生溢
出,OF=1–分析2:结果B6H的真值是-74,原题为两正数相加,结果显然不应该是负数,故产生溢出,OF=1如何判断溢出•判断运算结果是否溢出的规则:–两个同号数相加(或两个异号数相减)时,若运算结果的符号与原数据符号相反,表示溢出。•其他情况,不会产生溢出CF和OF对比•CF判断无符号数运算结
果是否超出范围:–8位运算:0~256–16位运算:0~65535–运算结果正确•OF判断符号数运算结果是否超出范围:–8位符号整数数值范围:-128~+127–16位数数值范围:-32768~+32767–运算结果不正确(数值部分进位至符号位)如何使用CF和OF•CPU对两操作数进
行运算时,按照无符号数求得结果,并设置CF;同时,根据该结果是否超出符号数数值范围设置OF。•在程序中具体应该利用哪个标志控制程序流向,由程序员决定。即如果参加运算的数被认为是无符号数,就应该关心CF,若认为
是符号数,则要注意结果是否溢出。练习:符号数补码运算练习1:01100100+0110010011001000结论:CF=0OF=1结果出错练习2:练习3:10101011+11111111110101010结论:CF=1OF=
0结果正确10101011+10001011100110110结论:CF=1OF=1结果出错辅助进位标志AF(AuxiliaryCarryFlag)•辅助进位标志:AF–作用:在进行字节算术运算时,若D3位(低半字节)向D4位有进位(
加法)或借位(减法)时,AF=l;否则AF=0–说明:字加/减法、双字加/减法则以D7位向D8位或D15位向D16位有无进/借位判断–应用:AF可用于BCD码运算的调整例:3AH+2CH=66H00111010
+0010110001100110半进位结果:D3有进位;AF=1方向标志DF(DirectionFlag)•方向标志:DF•作用:用于在串操作中控制地址变化的方向。–设置DF=0,变址寄存器ESI/SI和EDI/DI自动增量–设置DF=1,变址寄存器ESI/SI和EDI/DI自动减量中断允许
标志IF(Interrupt-enableFlag)•中断允许标志:IF–作用:用于控制外部可屏蔽中断是否可以被CPU响应。•设置IF=l,开中断,CPU响应外部可屏蔽中断请求;•设置IF=0,关中断,CPU不响应外部可屏蔽中断请求。单步标志TF(TrapFlag)
•单步标志:TF•作用:用于控制CPU进入单步操作方式–设置TF=0,CPU正常工作–设置TF=l,CPU执行完当前指令后产生单步中断,然后由单步中断服务程序把IF置0。•应用:–在调试程序DEBUG中,可利用单步命令,在每条指令执行完后停下来查看结果。存储器(Mem
ory)•CPU与内存间的信息交换•内存单元简介•32位微处理器的工作方式•存储器的段结构•逻辑地址与物理地址……地址译码电路MARMDR内存控制电路控制CPUCPU地址CPU数据CPU与内存间的信息交换内存框图
内存单元内存单元简介•内存单元:内存中信息存取的基本单位(1个字节)•内存单元地址:无符号二进制整数•内存单元编号(例如8086系统):•内存单元内容:存放程序运行时使用的指令和数据•数据以字节/字/双字等数据类型存储于内存单元D7D6D5D4D3D2D1D021010H
32位微处理器的工作方式•实地址方式–RealAddressMode•虚拟地址方式(保护方式)–ProtectedVirtualAddressMode•虚拟8086方式–Virtual8086Mode32位微处理器的工作方式•8086只能工作于实地址方式•80
286以上的微处理器工作于实模式或保护模式•80386以上的微处理器可工作于实模式、保护模式和虚拟8086模式•注意:–1.DOS要求微处理器工作于实模式–2.32位微处理器为向下兼容仍保留实模式–3.80
286以上的微处理器每次加电或复位后都默认地以实模式开始工作–4.实模式下,为8086编写的程序可在32位微处理器直接运行实地址方式•实模式只允许微处理器寻址第1个1MB存储器空间•注意:–1.第1个1MB存储器亦
称为常规内存–2.32位地址线中的A31~A20不起作用•!!!以8086为例,学习实地址方式!!!•8086CPU有20条地址线(A19~A0)–最大可寻址的内存空间为220=1MB–内存物理地址范围从00000H~0FFF
FFH•注意:每一个内存单元都有唯一的物理地址8086的数据格式•字节数据:–以无符号数和符号整数形式存储于1个内存单元中•字节:D7~D0•例:12H……12H20101H20102H20103H20104H……8086数据格式•字数据(由相邻两个
字节的数据组成):–用地址较小的内存单元的地址作为该字单元的地址–数据的低8位存放在地址较小的内存单元中,数据的高8位存放在地址较大的内存单元中–8086要在访问内存数据前定义其数据类型•字:D15~D0•例:1234H……34H20101H20102H20103H201
04H……12H8086数据格式•双字数据(由相邻4个字节的数据组成):–用地址最小的内存单元的地址作为该双字数据的地址;–数据的低8位存放在地址最小的内存单元中,数据的高8位存放在地址最大的内存单元中;•双字:D31~D0•例:12345678H……34H20
101H20102H20103H20104H……12H56H78H8086的数据格式•多字节数据在内存中占据连续多个存储单元。–Intel系列微处理器采用“低对低、高对高”的存储方式,称为小端方式(LittleEndian);–Motorola系列微处理器采用“低对高、高对低”的存储方式
,称为大端方式(BigEndian)。•例:在内存中存储数据12345678H……56H20101H20102H20103H20104H……78H34H12H……34H20101H20102H20103H20104H……12H56H78H小端方式大端方式存储器的段结构•
8086分段管理1MB内存–逻辑段:在源程序中用段定义伪指令定义的段–物理段:内存中由段寄存器指定的段•每个段是1个可独立寻址的逻辑单位:•段基址=段寄存器(CS,DS,ES,SS)×10H–段基址高16位由段寄存器提供,低4位为0000B–默认情况下,段基址为16的整数倍•段
内偏移地址由16位寄存器(IP,SP,BP,BX,SI,DI)提供•段容量:216=64KB逻辑地址与物理地址•逻辑地址–定义:用段基值和偏移地址表示内存单元地址的形式–格式:段基值∶段内偏移地址–优点:在程序设计中使用逻辑地址有利于程序开发和对内存
的动态管理•物理地址–定义:对应每个内存单元的唯一的20位二进制数编号–实地址方式下,用段地址和偏移地址组合形成内存单元的物理地址–8086内存地址范围:00000H~0FFFFFH逻辑地址与物理地址•
用逻辑地址计算物理地址–段基址=段基值(CS,DS,ES,SS)×10H•段首地址•默认情况下,每个段第一个存储单元的偏移地址为0–物理地址=段基址+有效地址(偏移地址)•段内存储单元的物理地址–即将逻辑地址中的段基值左移4位,加上偏移地址就得到20位物理地址利用逻辑地址计算物理地址示意
图逻辑地址与物理地址•例1:DS=152BH,SI=200H•物理地址=152BH×10H+200H=154B0H•例2:ES=153BH,DI=100H•物理地址=153BH×10H+100H=154B0H•注意!!!物理地址为154B0
H的内存单元分别映象到数据段和附加段?各逻辑段物理地址形成•代码段:物理地址=CS×10H+IP•堆栈段:物理地址=SS×10H+SP•数据(附加)段:–物理地址=DS(ES)×10H+偏移地址–此处偏移地址为:•包含在指令中的地址;•16位地址寄存器的内容;•根据各种寻址方式计算出的内存
单元的有效地址。默认16位段+偏移寻址组合段偏移地址主要用途CSIP指令地址SSSP或BP堆栈地址DSBX,SI,DI,变量名,8或16位数数据地址ESDI(目的串偏移地址)目的串地址默认32位段+偏移寻
址组合段偏移地址主要用途CSEIP指令地址SSESP或EBP堆栈地址DSEAX,EBX,ECX,EDX,ESI,EDI,变量名,8或32位数数据地址ESEDI(目的串偏移地址)目的串地址FS无默认一般地址GS无默认一般地址