之前剛學的時候對這個玩意音響沒那麼深刻,現在再學,感覺很不一樣了。
CS為代碼段寄存器,IP為指令指針寄存器。
設CS = M, IP = N, 8086CPU將從 M × 16 + N 處讀取指令並進行。
也可以這樣表述: 8086CPU中,任意時刻,CPU都會將CS:IP指向的內容做為執行指令.
執行流程:
- 初始狀態: CS = 2000H, IP = 0000H
- CS:IP 內容送入地址加法器,2000H × 16 + 0000H = 20000H
- 地址加法器計算出物理地址20000H後將結果送入輸入輸出電路.
- 輸入輸出電路將物理地址20000H送到地址總線。
- 內存將物理地址20000H上存放的機器指令X通過數據總線送入CPU.
- 輸入輸出電路將機器指令X送入指令緩衝器。
- 寄存器IP的值自動增加。
- 以此類推…
當8086CPU加點或者復位後,CS = FFFFH, IP = 0000H,也就是CPU清晨起床做的第一件事就是去執行FFFF0H內存單元中存放的機器指令。
修改CS:IP
mov指令能幫我們將值送入寄存器。但是,它不能用於修改CS:IP,原因很簡單8086出於設計考量不允許。
能修改CS:IP的指令統稱為轉移指令(以後我們深入研究),現在我學習第一個可以修改CS:IP寄存器的指令,jmp.
若想同時修改CS:IP寄存器,可以用jmp 段地址, 偏移地址的指令來完成。
1jmp 2AE3:3 ;執行後: CS = 2AE3H IP = 0003H, CPU 將從這2AE33H 處讀取指令
如果只想修改IP寄存器, 可以用jmp 寄存器的指令來完成.
1jmp ax
類似, mov IP, ax