汇编(三)——关于寄存器的操作

汇编(三)

一、通用寄存器

AX、BX、CX、DX

1 byte = 8 bit

2 byte = 16 bit

0000 0000 0000 0000 ~ 1111 1111 1111 11111

他们可以各自分为2个8位寄存器

AX = AH*AL

BX = BH*BL

CX = CH *CL

DX = DH*DL

为什么存在通用寄存器?

1.因为为了兼容之前的8位寄存器,保证之前的程序,稍加修改就可以运行在8086CPU上

2.内存最小单元 8 bit

CPU从内存中读取一个字节 8 bit字节的数据

8位数据 -> 8位寄存器中

16根数据线

8086CPU一次性可以处理 2种尺寸的数据

字节型数据 byte 8bit 8位寄存器中

字型数据 2byte 16bit 16位寄存器中 2个字节

一个字节是高位数据,一个是低位

二、加深对AX、BX、CX、DX印象

mov ax,5

mov ax,0

mov al,5

按下r查询,按下t执行

分析下面命令
mov ax,4E20
mov bx,ax
mov ch,bl
mov cl,bh
mov dl,ch
mov ax,dx

16位寄存器和8位寄存器不能互相移动

mov ax,bl 不行,不能将8位数据移动到16位寄存器中
mov al,bx 不行,不能将16位数据移动到8位寄存器中

问题:我们使用数据处理加法,超过了al或者bx,那么是报错还是?

mov ax,18
mov bx,8
add ax,5

add 加法指令 类似C中的+=

8位寄存器进行8位计算,保存8位数据,如果超过了,那么保存在其他地方了,并没有消失

三、监测点2.1

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

mov ax,62627
mov ah,31H
mov al,23H
add ax,ax
mov bx,826cH
mov cx,ax
mov ax,bx
mov ax,bx
mov al,bh
mov ah,bl
mov ah,bh
mov ah,ah
mov al,6

四、地址寄存器

段地址寄存器,偏移地址寄存器

ds sp

es bp

ss si

cs di

​ lp

​ bx

  • cs code Segment
  • ds data segment
  • ss stack segment
  • es extra segment

8086 CPU 给了20根地址线

0000 0000 0000 0000 ~ 1111 1111 1111 1111

0 ~ FFFFF H

地址线的数量,决定了CPU的寻址能力

地址加法器 地址的计算方式

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

段地址 * 16 = 基础地址

基础地址 + 偏移地址 = 物理地址

段地址:偏移地址

段地址 偏移地址

F230H*10H C8H

练习:

我们对地址进行修改并且查看,之后发现我们的地址确实修改了,我们也可以转换为其他地址进行修改

d 2001:1F60//查看地址
e 2001:1F60//修改地址

五、监测点2.2

段地址*10H + 偏移地址 = 物理地址

1.段地址为0001H,仅通过变化偏移进行寻址,CPU寻址范围为()~()

基础地址10H

偏移地址0~FFFFH

物理地址为10H~1000FH

2.计算SA

SA * 10H + FFFFH = 20000H

所以SA计算是小数,所以,不能首先确定逻辑地址

六、CPU如何区分指令与数据

u指令 将某个内存地址,全部当做指令

d指令 将某个内存地址,全部当做数据

r指令 查看寄存器

CS寄存器 IP寄存器

CS:code Segment

ip:instrument pointer

七、加深CPU如何区分指令和数据印象

将上面的机器码,用e指令,输入到2000H中,修改cs和ip指向2000H:0中,然后即可执行

机器码           汇编指令

b8 20 4e       mov ax,4E20

05 16 14       add  ax,141

bb 00 20       mov bx,2000H

01 d8             add ax,ax

89 c3              mov bx,ax

01 d8              add ax,bx

b8 1a 88         mov ax,001AH

bb 26 00         mov bx,0026H

00 d8               add al,bl

00 dc                add ah,bl

00 c7                 add bh,al

b4 00                 mov ah,0

00 d8                add a1,b1

04 9c                 add a1,9c

八、IP寄存器和指令的关系

指令都是有长度的 一条指令可以由多个字节构成

指令的执行过程

  1. CPU 从 CS : IP 进行读取指令,存放到缓存器中
  2. IP = IP + 所读指令长度
  3. 执行指令缓存器中的内容,回到第一步

猜你喜欢

转载自www.cnblogs.com/littlepage/p/11939471.html