汇编语言

andyljn 2020-06-13

段寄存器

8086 CPU有四个段寄存器:
CS, DS, SS, ES
段寄存器用来提供段地址

CS和IP

CS: 代码段寄存器
IP: 指令指针寄存器
修改CS,IP: jmp 段地址:偏移地址
仅修改IP的内容:
?? jmp 某一合法寄存器
?? jmp ax 用ax中的值修改IP


下面的3条指令执行后,cpu几次修改IP?都是在什么时候?最后IP中的值是多少?

mov ax,bx

sub ax,ax

jmp ax

答:一共修改四次

第一次:读取mov ax,bx之后

第二次:读取sub ax,ax之后

第三次:读取jmp ax之后

第四次:执行jmp ax修改IP

最后IP的值为0000H,因为最后ax中的值为0000H,所以IP中的值也为0000H


debug

-r: 查看寄存器内容
-r ax :修改ax的内容
-t : 执行指令
-d :查看内存中内容
-u: 查看内存中内容,将机器指令翻译成汇编指令
-e : 改写内存中内容(机器指令)
-a: 以汇编指令的格式在内存中写入一条机器指令

DS和[address]

DS寄存器通常用来存放要访问的数据的段地址
若要读区10000H单元内容到寄存器:

mov bx,1000H
mov ds,bx
mov al, [0]

不可以直接 mov ds,1000H
8086cpu 不支持直接将数据送入段寄存器

将al中数据送入内存单元10000H:

mov bx, 1000H
mov ds, bx
mov [0], al

8086cpu有16根数据线,一次性可以传一个字

mov

mov 段寄存器,寄存器 是可以的
但是 mov 寄存器, 段寄存器 可以吗? 答案是可以。

段寄存器SS: 存放栈顶的段地址
寄存器SP:存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素

汇编语言
mov ax, 1000H
mov ss,ax            // 不能直接mov数据到段寄存器
mov sp,0010H
push ax
push bx
push ds

相关推荐