Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

05-寄存器 #5

Open
HHuiHao opened this issue Apr 23, 2018 · 0 comments
Open

05-寄存器 #5

HHuiHao opened this issue Apr 23, 2018 · 0 comments

Comments

@HHuiHao
Copy link
Owner

HHuiHao commented Apr 23, 2018

05-寄存器

CPU的典型构成

  • 对程序员来说,CPU中最主要部件是寄存器,可以通过改变寄存器的内容来实现对CPU的控制

  • 不同的CPU,寄存器的个数、结构是不相同的(8086是16位结构的CPU)

  • 8086有14个寄存器

都是16位的寄存器
可以存放2个字节

通用寄存器

  • AX、BX、CX、DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器(有时也有特定用途)
  • 通常,CPU会先将内存中的数据存储到通用寄存器中,然后再对通用寄存器中的数据进行运算
  • 假设内存中有块红色内存空间的值是3,现在想把它的值加1,并将结果存储到蓝色内存空间

1.CPU首先会将红色内存空间的值放到AX寄存器中:mov ax,红色内存空间
2.然后让AX寄存器与1相加:add ax,1
3.最后将值赋值给内存空间:mov 蓝色内存空间,ax

  • AX、BX、CX、DX这4个通用寄存器都是16位的,如下图所示

  • 上一代8086的寄存器都是8位的,为了保证兼容, AX、BX、CX、DX都可分为2个独立的8位寄存器来使用

H代表高位寄存器
L代表低位寄存器

字节与字

  • 在汇编的数据存储中,有2个比较常用的单位

1.字节:byte,1个字节由8bit组成,可以存储在8位寄存器中
2.字:word,1个字由2个字节组成,这2个字节分别称为字的高字节和低字节

  • 比如数据20000(4E20H,0100111000100000B),高字节的值是78,低字节的值是32

  • 1个字可以存在1个16位寄存器中,这个字的高字节、低字节分别存储在这个寄存器的高8位寄存器、低8位寄存器中

段寄存器

  • 8086在访问内存时要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址

  • 是什么部件提供段地址?段地址在8086的段寄存器中存放

  • 8086有4个段寄存器:CS、DS、SS、ES,当CPU需要访问内存时由这4个段寄存器提供内存单元的段地址

CS (Code Segment):代码段寄存器
DS (Data Segment):数据段寄存器
SS (Stack Segment):堆栈段寄存器
ES (Extra Segment):附加段寄存器

  • 每个段寄存器的具体作用是?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant