《汇编语言》第二章知识梳理

概要

 此文是对《汇编语言》第二章《寄存器》的知识梳理。主要内容如下:

目录

  • 寄存器概览
  • 通用寄存器
  • 字在寄存器中的存储
  • 几条汇编指令
  • 物理地址
  • CS和IP
  • jmp指令

寄存器概览

对于一个汇编程序员来说,CPU中的主要部件是寄存器。寄存器是CPU中程序员可以用指令读写的部件。程序员通过改变各种寄存器中的内容来实现对CPU的控制。8086CPU的所有寄存器都是16位的,可以存放2个字节。在8086CPU中有14个寄存器,每个寄存器有一个名称。这14个寄存器是:

1.通用寄存器

ax——accumulate register——累加器

bx——based register——基地址寄存器

cx——count register——计数器

dx——data registered——数据寄存器

2.段寄存器

cs——code segment——代码段

ds——data segment——数据段
ss——stack segment——栈段寄存器

es——extra segment——附加段寄存器

3.特殊功能寄存器

ip——instructor  point——指令指针寄存器

sp——stack point——堆栈指针寄存器

bp——base point——基础指针

si——source index——源变址寄存器

di——destination index——目的变址寄存器

psw——program state word——程序状态字


 此文主要介绍一下通用寄存器CS、IP寄存器。


通用寄存器

 寄存器AX(Accumulator Register)、BX(Base Register)、CX(Count Register)、DX(Data Register)被称为通用寄存器,用来存放一般性的数据。它们都是16位的,可以存放的无符号数据范围为0—2^16-1。为了与早期CPU操作兼容,这4个寄存器还可拆分成两个可独立使用的8位寄存器,如AX可分为AH(AX的高8位)和AL(AX的低8位)。

字在存储器中的存储

 8086CPU可以一次性处理两种尺寸的数据:字节(Byte)和字(Word).一个字节由8给bit组成,一个字由2个字节组成。一个字可以存放在一个16位寄存器中,这个字的高位字节存放在寄存器的高8位寄存器中,低位字节存放在寄存器的低8位寄存器中。

几条汇编指令(mov和add指令)

 eg:mov ax,18 ;将18送入寄存器AX

  mov ah,78 ;将78送入寄存器AH

  add ax,8  ;将寄存器AX中的数值加上8

  mov ax,bx ;将寄存器BX中的数据送入寄存器AX

  add ax,bx  ;将AX和BX中的数值相加,结果存在AX中

注意点:1.在mov和add指令中,两个操作对象的位数应一致

    2.运算时超出寄存器表示的位数,进位会丢失

物理地址

8086内部的寄存器都是16位的,而外部地址总线宽度为20位。那16位的寄存器如何表示20位的物理地址呢?方法是:用两个16位地址合成一个20位的物理地址。

8086在内部用两个16位地址 通过计算合成得到一个20位的物理地址。 计算合成由CPU内部的地址加法器实现。

段地址 × 16 + 偏移地址 = 物理地址

需要注意的是,段的起始物理地址必须是16的倍数。

CS和IP

指令和数据是应用上的概念。在内存中,它们均以二进制形式存在。那么,计算机工作时如何判断哪些是指令呢?这就涉及到CS和IP寄存器了。CS和IP是8086CPU中2个最关键的寄存器,它们指示了CPU当前要读取指令的地址。任意时刻,CPU都将CS:IP指向的内容当作指令执行。程序员可以通过改变CS、IP中的内容来控制CPU执行目标指令。但是,需要注意的是,CS和IP值的修改不能通过mov指令实现,需借助转移指令 (如jmp, call等)。

jmp指令

jmp指令可以用于修改cs和ip的值。它有2种格式:

1. jmp 段地址:偏移地址 ;可以同时修改CS和IP

eg:

jmp 2AE3:3 ; CS ← 2AE3H,IP ← 3H

2.jmp 某一合法寄存器

 eg:

jmp AX ; IP ← AX

原文地址:https://www.cnblogs.com/kevin234/p/9800069.html