汇编基础(二)CS

对于8086的cpu来说
  • 段地址必须为16的倍数
  • 偏移地址是16位的(最大是16位,因为数据总线只有十六跟最大支持16位,再多就传不了了)最大的寻址能力是64K所以一个段的最大长度是64K

段寄存器

  • 8086特有的 存放段地址和偏移地址的
  • 要想告诉cpu 一个地址是一个段的段地址要这样做:
    mov 段寄存器, FFCAH 告诉cpu FFCAH是一个段的段地址
  • 8086cup在访问内存的时候由段寄存器提供内存单元的段地址和偏移地址,送入地址加法器,合成物理地址
  • 8086有四个段寄存器:CS,DS,SS, ES。当CPU需要访问内存的时候由这四个寄存器提供内存单元的段地址
    CS: 代码段寄存器
    DS:数据段寄存器
    SS:堆栈段寄存器
    ES:附加段寄存器
  • CPU区分传过来的是什么:放地址付给cs段就是代码指令,付给ds段就是数据

段寄存器提供段地址那么偏移地址是谁提供的呢?

CS: CS 和 ip
  1. cs为代码段寄存器 ip为指令指针寄存器 他们指示了当前要读取的指令的地址
  2. 定位具体地址写法: cs : ip 例如 0x1222: 0x0001
  3. 任意时刻,CPU都会将cs : ip 指向的指令作为下一条需要取出执行的指令
  4. 大端 高高低低 小段 高低高低 由CPU决定
jmp指令

8086cup是不允许cpu直接给cs和ip赋值的,像这样 mov cs, ac23H mov ip, 000H。但是,提供了指令来给他们赋值就是jmp指令

jmp 段地址: 偏移地址
  • 举例
    jmp 3: 0bl6----结果 cs:0003H , ip: 0bl6H z最终得到的地址 00b46H,cpu将会从此处读取指令
  • 如果不想改变cs 只想改变ip的值 jmp还提供了另一只写法
mov ax, 1000H
jmp ax
  • 结果
区别 ax cs ip
执行前 1000H 0234H 0023H
执行后 1000H 0234H 1000H
  • 修改ip的操作包括
  1. 读指令
  2. jmp 指令
  • 练习: 下面三条指令执行后,cpu修改了几次ip,都在什么时候,最后ip为多少?
    mov ax, bx
    sub ax,bx
    jmp ax
    答:一共修改了四次ip 前三次是执行指令最后一次是执行jup ax指令最后ip为 0000H

  • cs指令的执行过程详见hank老师的汇编(三)

你可能感兴趣的:(汇编基础(二)CS)