学习汇编之段寄存器cs和ip以及debug的使用

来源:互联网 发布:iphone6s屏幕检测软件 编辑:程序博客网 时间:2024/05/05 06:05
 
CPU 将段寄存器*16 + 偏移地址寄存器 来构成20位地址,由地址总线送至内存,进行寻址 来定位下一条要执行的指令。

8086cpu有四个段寄存器 :
        CS DS SS ES  
重点掌握 cs 和 ip 两个寄存器
    cs 和ip是8086pc机中最关键的两个寄存器,他们指示了cpu 当前要读取的指令的地址。cs 为代码段寄存器,ip为指令寄存器,从名称上我们可以看出他们和指令的关系。
    在8086pc机中,任意时刻,设cs中的内容为M,ip中的内容为N,8086cpu将从内存为M*16+N 单元开始,读取一条指令并执行。
    也可以这样描述:8086cpu中,任意时刻,cpu将产生cs:ip指向的内容当作指令执行
    在80806cpu加电启动或复位后,cs和ip被初始化为cs= FFFFH ip=0000H,即在cpu刚启动的时候从内存FFFF0H的地方开始读取指令执行,即第一条指令存放在FFFF0H内存单元中
可以用jmp指令来修改cs和ip寄存器里的数据,如jmp 段地址:偏移地址;
jum 2AE3:3,执行后cs = 2AE3H ip=0003H,cpu将从2AE33H处读出指令

若只是想修改ip寄存器的地址,可以用jmp 某一个合法寄存器的来完成

如:
    jmp ax ,指令执行前:ax = 1000H cs=2000H IP = 0003H
                 指令执行后:ax=100H cs = 2000H IP = 1000H
即用某一寄存器的内容修改ip的值 含义上好像是mov ip ax。


常用debug的功能

1) 用·Debug的R 命令查看、改变内存cpu寄存器的内容;
2) 用Debug的D命令查看内存中的内容
3) 用Debug的E命令改写内存的内容
4)用Debug的U命令将内存中机器指令翻译成汇编指令;
5)用Debug的T命令执行一条机器指令;
6) 用Debug的A命令以汇编指令的格式在内存中写入一条指令

实例:
在debug模式下,使用-a命令在内存中邪如汇编指令,并用-t逐条执行
-a 1000:0
mov ax,4E20H
add ax,1416H
mov bx,2000H
add ax,bx
mov bx,ax
add ax,bx
mov ax,001A
mov bx,0026
add al,bl
add ah,bl
add bh,al
add bh,al
mov ah,0
add al,bl
add al,9CH
在上面可以看到在地址块1000:0017的地方多输入了一个分号
如果要去掉分号可以用-a 1000:0017 add ah,bl
输入完后用u 1000:0 查看刚刚输入的汇编指令
为了执行指令,我们将cs:ip设为指令所在内存首地址
-r cs
   1000
-r ip
   0000
设置完后用-r命令可以看到修改结果
然后我们用T命令执行一条指令
可以看到ax的值被置为4E20 且ip寄存器自动加了3
最后一行显示了下一条将要执行的指令



















: 
0 0