寄存器

来源:互联网 发布:网贷数据交易平台 编辑:程序博客网 时间:2024/06/06 06:53

1,初识寄存器

不同的cpu寄存器结构和个数不相同

例如:8086CPU寄存器有14个寄存器:AX,BX,CX,DX,SI,DI,SP,DP,IP,CS,DS,SS,ES,PSW,

AX,BX,CX,DX,通用寄存器,

每个寄存器有16个字节,

一个寄存器可以分成两个寄存器,每个寄存器8位

AX:AH,AL

BX:BH,BL

CX:CH,CL

DX:DH,DL




8086CPU为16位CPU
运算器一次可以处理16位数据,
寄存器的最大宽度为16位
寄存器与运算器之间的通路为16位
16位只能寻址64kb
所以8086使用地址加法器
地址加法器计算方法 物理地址=断地址*16 + 偏移地址
例如:
地址段1H可以寻址的范围是1H*16+0 -- 1H*16+2^16-1




段寄存器(提供段地址)
CS,DS,SS,ES


IP为指令寄存器
CS内容为M,IP为N, 8086CPU 将从内存M*16+N 单元开始 读取第一条指令


修改CS,IP的内容用jmp指令 语法:jmp 段地址:偏移地址 eg:jmp 2AE3:3 执行过后 CS=2AE3H, IP=0003H 从2AE33H处读取指令


如果只想修改IP的内容 则可以用 语法:jmp 一个合法寄存器 eg:jmp ax, 执行前:ax = 1000H, CS=2000H,IP=0003H
                                     执行后:ax = 1000H, CS=2000H,IP=1000H

DS寄存器 --存放CPU访问的内存段
当CPU访问内存时,需要把内存的地址放入DS寄存器 
eg:mov bx,1000H //将要访问的内存放入一个寄存器(不能直接放入段地址寄存器,注意前面可以用r 修改,那是debug的内容,并不代表汇编代码可以这样写)
   mov ds,bx //bx寄存器里面的地址段 赋给ds
   mov al,[0] //读取ds内的内存的内容到al寄存器,[0]表示地址偏移量

0 0
原创粉丝点击