1、溢出 异号相加或同号相减不会溢出,不需规则判断。 只有两个同号数相加或两个异号相减的情况下才需要运用规则判断是否溢出。 同号相加 最高位和次高位不同时进位时溢出 异号相减 最高位和次高位不同时借位时溢出,进位 正数相加符号位不会进位。CF=0 两个负数相加符号位一定会进位。 CF=1,+,0 0 0 0 0 0 1 0 B,+2补,-1补,+1补,0 0 0 0 0 0 0 1 B,加法时若最高位和次高位同时进位,结果不溢出。可出判断题,1 1 1 1 1 1 1 1 B,1 1 1 1 1 1 1 1 B,1 1 1 1 1 1 1 1 B,1 1 1 1 1 1 1 0 B,+,-1补,-
2、1补,-2补,物理地址=段地址 *10H+段内偏移地址,物理地址的形成,19 0,16位段基址,16位段内偏移地址,16位段基址 0 0 0 0,20位物理地址,19 0,15 段寄存器 0,15 EA 0,20位二进制相当于5位16进制,因此20位的物理地址可以用5位16进制编码 寄存器只有一个字长,即16位二进制, 16位二进制相可以以用4位16进制编码,拆分 506FFH 50700H 50701H 50702H 50703H 50704H 50705H 50706H 50707H 50708H 50709H 5070AH 5070BH 5070CH 5070DH 5070EH 5070
3、FH 50710H,段代码 506FH 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5070H 5071H,物理地址506FFH 50700H 50701H 50702H 50703H 50704H 50705H 50706H 50707H 50708H 50709H 5070AH 5070BH 5070CH 5070DH 5070EH 5070FH 50710H,偏移地址 000FH 0000H 0001H 0002H 0003H 0004H 0005H 0
4、006H 0007H 0008H 0009H 000AH 000BH 000CH 000DH 000EH 000FH 0010H,段地址 506F0H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50710H,偏移地址000FH 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H 0009H 000AH 000BH 000CH 000DH 000EH 000FH
5、 0000H,段地址=段代码*10H 因此相邻两个段代码的段地址之间相差为10H 例如:段代码5070H和段代码5069H之间的空间为 50700H-50690H=10H 段代码5071和段代码5070之间的空间为 50710H-50700H=10H 即任意相邻段代码的两段实际物理间距为16,偏移地址共有四位可以编码,这里只利用了最后一位,编码从 0000H -000FH,即16个地址, 但是如果四位全部利用,实际偏移地址编码可以从 0000H-FFFFH,共164=216=65536=64K。 以起始码作为某段的代码,如5070段。 其起始物理地址为50700H,其段内物理地址 可从5070
6、0H+0000H编码到50700H+FFFFH, 共65536个(即64k个)编码 。而紧邻5070段的的下一段段代码5071段, 其起始物理地址为50710H,只与50700H间隔10H,即十进制的16 其段内物理地址可从 50710H+0000H编码到50710H+FFFFH, 共65536个(即64k个)编码 。 他们共同编码的重叠空间有65536-16=65520个。,偏移地址 000FH 0000H 0001H 0002H 0003H 0004H 0005H 0006H 0007H 0008H 0009H 000AH 000BH 000CH 000DH 000EH 000FH 001
7、0H,段地址 506F0H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50700H 50710H,存贮器段的划分与段的覆盖示意图,段5070,段5071,段5072,段代码 及 段首地址,每段最长达65536,0,1,F,0,1,F,0,1,F,606FF,50700,6070F,5070F,0,1,F,0,1,F,0,1,F,6071F,以起始码作为某段的代码,如5070段。其起始物理地址为50700H,其段内物理地址 可从5
8、0700H+0000H编码到50700H+FFFFH, 共65536个(即64k个)编码 。而紧邻5070段的的下一段段代码5071段, 其起始物理地址为50710H,只与50700H间隔10H,即十进制的16 其段内物理地址可从 50710H+0000H编码到50710H+FFFFH, 共65536个(即64k个)编码 。 他们共同编码的重叠空间有65536-16=65520个。 同理5072段,5073段一直到606F段 都和5070段有重叠。,50600H 段起始码 0108H 偏移地址 50708H,50500H 段起始码 0208H 偏移地址50708H,4F800H 段起始码 0F
9、08H 偏移地址 50708H,506F0H 段起始码 0018H 偏移地址 50708H,506E0H 段起始码 0028H 偏移地址 50708H,50610H 段起始码 00F8H 偏移地址 50708H,4F700H 段起始码 1008H 偏移地址 50708H,4E700H 段起始码 2008H 偏移地址 50708H,40710H 段起始码 FFF8H 偏移地址 50708H,段地址从 5070H 偏移地址从 0008H 减到段地址 4071H 增加到偏移地址 FFF8H 物理地址50780H的逻辑地址编码方法有FFFH+1H=10000H即163 =4096种,例如物理地址 50
10、708H,50700H 段起始码 0008H 偏移地址 50708H,段代码 5070H,偏移地址 0008H,段地址存放在何处?存放在段寄存器中,分别是:CS(Code Segment):代码段寄存器。用来存放当前正在运行的程序。 DS(Data Segment):数据段寄存器。存放当前运行程序所用的数据,如果程序中 使用了串处理指令,则其源操作数也存放在数据段中。 SS(Stack Segment):堆栈段寄存器。堆栈段定义了作为堆栈使用的内存区域,堆 栈是一种数据结构,它开辟了一个比较特殊的存储区域,用来存储过程返回地址、过程 参数和局部变量等,并以后进先出的方式来访问这一区域。 ES(
11、Extra Segment):附加段寄存器。附加段是附加的数据段,是一个辅助的数据 区,在串操作指令中,用来表示目的串所在数据段的段地址。,SS,ES,DS,CS,代码段寄存器。指向当前的代码段,指令由此段取出。Code Segment,数据段寄存器。指向当前的数据段。Data Segment,附加数据段寄存器。指向当前的附加数据段。Extra Segment,堆栈段寄存器。指向当前的堆栈段。Stack Segment,16位,偏移地址存放在何处?存放在通用寄存器BX、基址指针寄存器BP,变址寄存器SI,DI及指针寄存器SP,IP中,基址寄存器,DI,SI,BP,BX,基址指针寄存器,源变址寄
12、存器,堆栈指针寄存器,目的变址寄存器,指令指针寄存器,SP,IP,基址,变址,DX,CX,AX,累加器Accumulator,计数器Count Register,数据寄存器Data Register,不用来存储 外存储器的 偏移地址,BX、SI 和DI默认段为DS 数据寄存器指明的数据段,BP 和SP默认段为SS 堆栈段寄存器指明的数据段,IP默认段为CS 代码段寄存器,DI用作窜指令偏移地址寄存器时默认段为ES 附加数据段寄存器,如何提取操作数 操作数存储在外部存储器或内部寄存器中,如在外部 外存储器中,偏移地址的构成方式: 基址+变址+某个数 基址+变址 基址变址+某个数 基址变址 直接给出外寄存器偏移地址,在CPU内部的通用寄存器中,直接给出操作数,