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 可以改写内存中的内容 ;=================================================================================== 寄存器总结

数据寄存器 AX BX CX DX通用寄存器 地址寄存器 段地址寄存器和偏移地址寄存器 标志位寄存器 ;寄存器跟寄存器操作的时候要保证位数的一致性,运算时可能超过最大值,会保存到栈中.

mov 移动指令 例子:mov ax,1000H =>把1000H放到寄存器ax中
mov ax,bx =>把bx的数据放到ax
add 运算指令(加) 例子:add ax,bx =>把bx+ax=ax
add ax,8 =>ax+8=ax
sub 运算指令(减) 例子:sub ax,bx =>把bx-ax=ax
sub ax,8 =>8-ax=ax
jmp 转移指令(操作cs:ip) 例子:jmp 2000:0 把cs:ip跳转到2000:0这个位置
jmp 寄存器格式
call ret 转移指令(后面详细笔记) ;把改变了的ip保存了起来,然后再用ret拿回来
指令和数据放在内存中是没有区别,是程序员通过修改寄存器中的内容,告诉cpu 数据在哪里指令在哪里.

经验分享 程序员 微信小程序 职场和发展