您的位置:首页 > 其它

汇编语言学习笔记一:CS和IP寄存器

2017-11-27 14:28 281 查看
1、CS是代码段寄存器,IP是指令指针寄存器(相当于偏移地址)。修改CS、IP的指令不同于修改通用的寄存器值的指令,修改通用寄存器的值可以用mov 指令(mav ax,123),mov指令被称为传送指令。修改CS、IP的指令是jmp指令。jmp指令被称为转移指令。

(1)同时修改代码段寄存器和指令指针寄存器,形如jmp 段地址:偏移地址。

jmp2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将在2AE33H处读取指令

(2)仅想修改IP的内容,形如“jmp 某一合法寄存器”,功能是用某一合法寄存器中的值修改IP的内容

jmpax,指令执行前:ax=1000H,CS=2000H,IP=0003H

        指令执行后:ax=1000H,CS=2000H,IP=1000H。

2、一般来说,CPU在访问内存的时候要由相关部件提供内存单元的段地址和偏移地址,送入地址加法器合成物理地址。段寄存器提供段地址。8086CPU有4个段寄存器:CS、DS、ES、SS。典型的提供段地址和偏移地址的寄存器为CS和IP寄存器。也就是说,CPU会将CS:IP合成的物理地址指向的内容当作指令执行。CPU执行指令的步骤一般是:

(1)将CS、IP中的内容送入地址加法器(段地址*16+偏移地址)合成物理地址。

(2)地址加法器将物理地址送入输入输出控制电路

(3)输入输出控制电路将物理地址送上地址总线

(4)然后CPU从物理地址指向的内存单元读取机器指令,并将机器指令通过数据总线送入CPU的输入输出控制电路。

(5)输入输出控制电路将读取的指令送入指令缓冲器,同时IP的内容更新为原内容加指令长度。

(6)然后,执行控制器执行机器指令,并将执行后的内容送入相应的寄存器。



3、在编程时,可以根据需要将一组内存单元定义为一个段。我们可以将长度为N(N<=64KB,因为偏移地址长度为16位,最大为64KB)的一组代码存在一组连续、起始地址为16的倍数的内存单元中。这样,这段内存就可以看成是代码段,用来存放代码的。

4、查看CPU和内存,用机器指令和汇编指令编程,做实验

(1)打开程序调试工具:运行”cmd”->输入debug。

(2)Debug功能

   1)用R命令查看、改变CPU寄存器的内容

   2)用D命令查看内存中的内容

   3)用E命令改写内存中的内容

   4)用U命令将内存中的机器指令翻译成汇编指令

   5)用T命令执行一条机器指令

   6)用Debug的A命令以汇编指令的格式在内存中写入一条机器指令

Normal>(3)输入输出控制电路将物理地址送上地址总线
(4)然后CPU从物理地址指向的内存单元读取机器指令,并将机器指令通过数据总线送入CPU的输入输出控制电路。

(5)输入输出控制电路将读取的指令送入指令缓冲器,同时IP的内容更新为原内容加指令长度。

(6)然后,执行控制器执行机器指令,并将执行后的内容送入相应的寄存器。

r命令查看寄存器的内容



r命令修改寄存器的内容(修改了ax、cs、ip寄存器的内容)



d命令查看内存中的内容(d 起始地址),显示分别为地址、地址中的内容、内容的ascll字符形态。



d命令查看某范围的内存内容(形如d1000:0 9)。



e命令改写内存中的内容(e 起始地址数据 数据 数据..)



e命令向内存中写入字符或字符串



e命令向内存中写入机器码,并使用u命令查看机器码对应的汇编





t命令执行执行一条或多条指令(先改变cs、ip寄存器的值)



a命令以汇编指令的形式在内存中写入机器指令,并用d指令查看对应的机器码(之后也可以用t指令执行相应的指令)

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: