cpu是怎么区分指令和数据(cs:ip)
dosbox -r
-
r ds es ss cs
段地址寄存器 偏移地址寄存器
cs ip(指令指针)
8086cpu在任意时刻,cpu将cs:ip的内容全部当做指令来执行,在内存中指令和数据是没有任何区别的. cpu只有只有工作的时候才将有的信息当做指令有的信息当做数据.
1.1:cpu根据什么将内存中的信息当做指令来执行?
;cpu将cs:ip指向的内存单元中的内容当做指令.
2,指令是有长度的 ,一条指令可以由多个字节构成.
指令的执行过程: 1,cpu从cs:ip所指向的内存单元读取指令,存放指令缓存器中. 2,ip = ip+所读指令的长度,从而指向下一条指令 3,执行指令缓存器中的内容,回到步骤1. ;这样的设计是为实现一个功能
3,-a mov ax,1000H ip+3 mov bx,1000h ip+3 mov dl,10H ip+2 ;ip寄存器和指令的长度关系.
4,汇编指令 jmp(跳跃) jump英文单词
转移指令,可以修改cs:ip这两个寄存器 决定了cpu从哪里读取指令
jmp 2000:0000 jmp 寄存器
cs = 2000H ip = 0000h
5,假设cs = 2000H ,ip = 0000 写出下列指令的执行过程
a 2000:0 cs = 2000 ip = 0 mov ax,6622H jmp 1000:3 mov cx,ax
a 1000:3 mov ax,0 mov bx,ax jmp bx mov cx,0
====================================================================================
检测2.3
下面三条指令执行后,cpu几次修改了ip?在什么时候?最后ip的值是多少?
mov ax,bx 存放到指令缓存器中=>1 =>ax=bx sub ax,ax 存放到指令缓存器中=>1=>ax=ax-ax=0 jmp ax 存放都指令缓存器中=>1 ip=0 修改了4次
指令的执行过程: 1,cpu从cs:ip所指向的内存单元读取指令,存放指令缓存器中. 2,ip = ip+所读指令的长度,从而指向下一条指令 3,执行指令缓存器中的内容,回到步骤1. ;这样的设计是为实现一个功能
debug调试工具
R 可以查看,和改变寄存器中的内容
D 可以查看内存中的内容
U 可以将内存中的机器指令翻译成汇编指令
A 可以用汇编的指令格式在内存中写入数据
T 执行当前cs:ip 所指向的机器指令
E 可以改写内存中的内容 ;=================================================================================== 寄存器总结
