汇编语言入门:寄存器和数据存储

寄存器是学习汇编的基础,必须深刻理解

本文围绕8086CPU展开讲解


概述

一个典型的CPU由运算器、控制器、寄存器等器件构成

内部总线:联系CPU内部器件

外部总线:连接CPU和主板上的其它部件


寄存器

8086CPU有14个寄存器

分别是,AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW

其中,前8个是通用寄存器

新型CPU新增的寄存器通常增加一些浮点数计算相关寄存器、与新指令相关寄存器等,而不会增加通用寄存器

8086CPU寄存器都是16位的(上一代都是8位的),可以存放两个字节

AX、BX、CX、DX通常用来存放一般性的数据,故称为“通用寄存器”

以AX为例看一下它的逻辑结构:
汇编语言入门:寄存器和数据存储_第1张图片

数据18(10010)在寄存器AX中的存放情况:
汇编语言入门:寄存器和数据存储_第2张图片

为了保证兼容性,可以把这4个寄存器每个分成两个寄存器来用:
汇编语言入门:寄存器和数据存储_第3张图片


数制的讨论

“字”英文叫“word”,一个字占16位,可以存储在16位寄存器的高8位和低8位

由于一个内存单元可以存放8位数据,若CPU中的寄存器可以存放n个8位数据,那么计算机中的数据都是由1~n个8位数据构成

使用16进制可以直观的看出这个数据是由哪些8位数据构成的,每2位十六进制数对应一个字节(8位数据)


几条汇编指令

汇编指令不区分大小写

mov AX, 18:将立即数18送入寄存器AX中

add AX, 8:将寄存器AX中的值加上8

mov AX, BX:将BX中的值送入AX(AX = BX)

add AX, BX:将AX和BX的值相加,结果存在AX中(AX = AX + BX)

注意:运算结果如果超出寄存器的存储范围,高位会被抛弃(暂时这样理解,实际上会被送入进制位……):

; AX=BX=8226H(不规范写法,这里只是作为大小说明)
add AX, BX
; 结果:AX=044CH(原始结果位1044CH,但是最高位1被“抛弃”)

栗子二:

; AX=00C5H
add AL, 93H
; 结果:0058H
; 分析:AL、和AH看成两个不同的寄存器,低位进位不能进到高位寄存器,要“抛弃”
;不是真的丢弃!!(==>进制位寄存器)

你可能感兴趣的:(汇编语言)