學習彙編之段寄存器cs和ip以及debug的使用

 
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
最後一行顯示了下一條將要執行的指令



















: 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章