andyljn 2020-06-13
8086 CPU有四个段寄存器:
CS, DS, SS, ES
段寄存器用来提供段地址
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
-r: 查看寄存器内容
-r ax :修改ax的内容
-t : 执行指令
-d :查看内存中内容
-u: 查看内存中内容,将机器指令翻译成汇编指令
-e : 改写内存中内容(机器指令)
-a: 以汇编指令的格式在内存中写入一条机器指令
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
mov 段寄存器,寄存器 是可以的
但是 mov 寄存器, 段寄存器 可以吗? 答案是可以。
段寄存器SS: 存放栈顶的段地址
寄存器SP:存放栈顶的偏移地址
任意时刻,SS:SP指向栈顶元素
mov ax, 1000H mov ss,ax // 不能直接mov数据到段寄存器 mov sp,0010H push ax push bx push ds