【汇编语言】通用寄存器和基础汇编指令

前言

本篇文章所涉及的CPU为8086CPU

在CPU内部有许多的器件,这些器件相互配合,共同实现CPU的功能

CPU中主要的器件分别为:

  1. 运算器(信息处理计算)
  2. 寄存器(信息存储)
  3. 控制器(控制各种器件进行工作)

CPU与内存之间通过总线进行交互,称之为外部总线

CPU内部的器件之间也通过总线进行连接,称为内部总线

而CPU内部,寄存器是主要的器件,不同的CPU寄存器个数,结构是不一样的。

1. 通用寄存器

8086的CPU所有的寄存器都是16位的,可以存放两个字节(Byte)的数据

而AX,BX,CX,DX四个寄存器可以用于存放一般性的数据,所以这四个寄存器被称之为通用寄存器。

以AX寄存器为例,其他的BX寄存器,CX寄存器,DX寄存器也都一样。

image-20210805230310462

AX 本身是一个 16 位的寄存器,但是这个寄存器可以再分为 AH 和 AL 两个寄存器 AH 和 AL 寄存器都为 8 位的寄存器,同样

  • BX 可以分为 BH 和 BL
  • CX 可以分为 CH 和 CL
  • DX 可以分为 DH 和 DL

而如果将一个16 位的寄存器分成两个 8 位的寄存器后,这两个8位的寄存器是相互独立的

H 为 High,代表原寄存器的高字节

L 为 Low,代表原寄存器的低字节

image-20210806120923072

当把这个寄存器看作一个AX的时候,寄存器中存储的数字为:
AX:0111 0001 1111 1111

当寄存器中的数值加一的时候,寄存器中的数值会变为:

AX:0111 0010 0000 0000

因为AX是一个整体,所以AX + 1,会影响所有的数字。

当把寄存器看作AH 和 AL两个寄存器时,寄存器中存储的数字为:

AH:0111 0001

AL:1111 1111

此时 AL + 1,寄存器的变化为:

AH:0111 0001

AL:0000 0000

AL 因为运算发生的进位并不会进到 AH寄存器中,因为两个寄存器独立的,互不影响。

当然,这个溢出的 1 不会被放着不管。标志寄存器会记录下溢出的信息

2. 字在寄存器中的存储

2.1 两个单位

8086CPU一次可以处理两种尺寸的类型,如下:

  • 字节:Byte, 8个bit,可以存在8位的寄存器中。

  • 字:Word,16个bit,由两个字节构成,这两个字节分别称为高位字节低位字节

image-20210806122408400

2.2 基础的汇编指令

汇编指令不分大小写

mov 和 MOV 是等价的

2.2.1 MOV指令

  • mov指令的最基础的一种用法,将数字送入寄存器

    格式为: mov 寄存器, 数值

MOV AX, 18H   ; 将数值 18H 送入寄存器 AX
; 类似于 C语言中: AX = 10H
MOV AH, 01H  ; 将数值 01H 送入寄存器 AH
; 类似于 C语言中: AH = 01H
MOV AL, 02H   ; 将数值 02H 送入寄存器 AL
; 类似于 C语言中: AL = 02H
  • mov指令的基础用法,将寄存器中的内容送入其他寄存器

    格式为:mov 寄存器, 寄存器

MOV AX, ABCDH ; 将数值 ABCD 送入寄存器 AX
MOV BX, AX    ; 将寄存器AX中的内容送入寄存器BX
; 类似于C语言中 BX = AX

2.2.2 ADD指令

  • ADD指令最基础的一种用法,对寄存器进行加法操作

    格式为:ADD 寄存器, 数值

ADD AX, 1111H ;AX寄存器中的内容加上 1111H
; 类似于C语言中: AX = AX + 1111H
  • ADD指令基础用法,一个寄存器加上另外一个寄存器中的数值

    格式为:ADD 寄存器,寄存器

ADD AX, BX;  AX寄存器中的内容加上BX寄存器中的内容
; 类似于C语言中: AX = AX + BX

2.2.3 传送运算规范

在进行数字传送或运算时,要注意指令的两个操作对象的位数应当是一致的。

正确示例:

mov ax, bx   ; ax (16bit), bx (16bit)
mov al, bh   ; al (8bit), bh (8bit)
add ax, abcdH; ax (16bit), abcdH(16bit)
add bl, 88H  ; bl (8bit), 88H(8bit)

错误示例:

mov ax, bl  ; 将8位寄存器中的数据传送到16位寄存器中
mov al, ABCDH; 将 16bit 的数字的传送入 8 位寄存器中
add al, 800H ; 将高于 8 bit 的数字加到一个 8 bit 的寄存器中

3. 相关练习题

写出每条汇编指令执行之后,相关寄存器的值

image-20210806125646232 image-20210806125710474

答案:

image-20210806125810650

猜你喜欢

转载自blog.csdn.net/qq_45978890/article/details/119452487