汇编语⾔学习笔记⼀:CS和IP寄存器
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指令执⾏相应的指令)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论