汇编语言寄存器
Posted 桃陉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言寄存器相关的知识,希望对你有一定的参考价值。
前言
对于汇编程序员来说,CPU中的主要部件是寄存器,程序员通过指令读写寄存器,然后通过改变寄存器中的内容实现对CPU的控制。
不同的CPU,寄存器的个数、结构是不同的。我们主要来介绍8086CPU。
8086CPU共有14个寄存器,分别为:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。
1.通用寄存器
1.1特点
(1)8086CPU所有寄存器都是16位(bit)的,占两个字节(byte),其中AX、BX、CX、DX四个寄存器用来存放一般性的数据,它们被称为通用寄存器。
(2)16位寄存器可以存储一个16位的数据,能存储的最大数据是216。
(3)因为8086CPU的上一代CPU中寄存器是8位的,为了保证兼容,8086CPU中的AX、BX、CX、DX这4个16位的寄存器都可以分成两个独立使用的8位寄存器。eg: AX分为AH(高8位)和AL(低8位),其他同理。
寄存器 | 寄存器中的数据 | 所表示的值 |
---|---|---|
AX | 100111000100000 | 20000(4E20H) |
AH | 01001110 | 78(4EH) |
AL | 00100000 | 32(20) |
注意: 最后的H表示是16进制数字在二进制数字的后面加B,十进制则什么也不加。
2.寄存器中的存储
2.1字的存储
8086CPU可以一次性处理如下两种尺寸的数据。分别为字和字节。
一个字由两个字节组成,这两个字节分别称为高位字节和低位字节,每个字节都有8位。
3.一些汇编指令
3.1指令
汇编指令 | 控制CPU完成的操作 |
---|---|
mov ax,18 | 将18送入寄存器AX中 |
mov ah,18 | 将18送入寄存器AH中 |
add ax,8 | 将寄存器AX中的数值加上8 |
add ax,bx | 将AX和BX中的数值相加,结果存在AX中 |
注意:
(1)在写汇编指令或者寄存器名称是不区分大小写。mov ax,8 和MOV AX,8 含义相同。
(2)al中只能存放8位数据,当产生进位时,并不会将进位数据输出到ah中,这里是形式上的丢失,但是实际上CPU并不会真的丢弃这个进位值。
3.2错误书写格式
错误原因: 两个操作对象的位数是不一致的。
eg:
mov ax,bl (位数不同)
mov bh,cx
add al,20000 (8位数据最多存放数字为255)
add al,100H (将超过8位的数据加到了一个8位寄存器中)
4.物理地址
当CPU访问内存单元时,需要给出这个内存单元的地址。每个内存单元都有一个唯一的地址,我们将这个唯一的地址称为物理地址。
4.1物理地址的形成
8086CPU有20条地址总线,可以传输20位地址(1MB)。因为它是16位的结构,所以只能送出16位地址(64KB)。
我们为了得到20位的地址我们使用一种手段:将两个16位地址合为一个20位的物理地址。
具体过程:
(1)CPU中这两个16位的地址,一个是段地址,一个是偏移地址。
(2)段地址和偏移地址通过内部总线送入地址加法器中,然后改部件将其合为一个20位的物理地址。
(3)地址加法器将合成的20位物理地址送入输入输出控制电路。输入输出控制电路将20位物理地址送入地址总线,然后被地址总线送到存储器。
地址加法器的操作原理:
我们将16位的段地址左移四位(相当于乘以16),然后与偏移地址相加得到物理地址。
物 理 地 址 = 段 地 址 × 16 + 偏 移 地 址 { \\color{red}物理地址 = 段地址×16 + 偏移地址} 物理地址=段地址×16+偏移地址
段地址×16得到基础地址,然后加上偏移地址得到物理地址。
5.CS与IP
8086CPU有四个段寄存器:CS、DS、SS、ES,这里只看一下CS(存放指令的段地址)。
简介
CS与IP是8086CPU中最关键的寄存器,他们指示了CPU当前要读取指令的地址。CS为代码段寄存器,IP为指令指针寄存器。
修改CS、IP的指令
(1)同时修改CS和IP的值:使用 jmp 指令;
格式: jmp 段地址:偏移地址
eg:jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU从2AE33H处读取指令。
(2)只修改IP的值:使用 ”jmp 某一合法寄存器“ 的指令完成。
eg: jmp ax (将AX中的值赋给IP寄存器)
以上是关于汇编语言寄存器的主要内容,如果未能解决你的问题,请参考以下文章