8086汇编复习1 - 并使用emu8086模拟器查看效果
1 基本寄存器
?
不同的CPU,寄存器的個數、結構是不相同的。
8086CPU有14個寄存器:AX, BX, CX, DX, SI, DI, SP, BP, IP, CS, SS, DS, ES, PSW。
8086CPU的所有寄存器都是16位的,可以存放兩個字節。
AX、BX、CX、DX,4個寄存器通常用來存放一般性的數據,稱為通用寄存器。
這4個寄存器都可以分為2個可獨立使用的8位寄存器來用:
? ? AX可分為AH和AL;
? ? BX可分為BH和BL;
? ? CX可分為CH和CL;
? ? DX可分為DH和DL;
字節,記為byte;
字,記為word;一個字由2個字節組成;
使用emu8086模擬器執行一條匯編指令;
mov ax, 18
18轉換為16進制為12;
執行之后把12存入AX的低字節;
?
?
2 使用emu8086執行一段簡單匯編程序以及CS和IP寄存器
?
mov ax, 18
mov bx, 37
add ax, 8
add ax, bx
程序開始執行;所有寄存器為0;
IP為0;
執行完第一條指令,把12H放入AX;
IP變為0003,指向下一條將要執行的指令;
執行完第二條指令,把25H放入BX;
IP隨之改變;
執行完第三條指令,AX內容變為1AH;
IP隨之改變;
執行完第四條指令,AX內容變為3FH;
CS和IP寄存器指示了CPU當前要讀取指令的地址。CS為代碼段寄存器,IP為指令指針寄存器。
?
3?段和偏移地址的概念以及在emu8086中查看
?
段的概念
? ? 內存并沒有分段,段的劃分來自于CPU。由于8086CPU用“基礎地址(段地址*16)+偏移地址=物理地址”的方式給出內存單元的物理地址,使得我們可以用分段的方式來管理內存。
? ? 段地址*16必然是16的倍數,所以一個段的起始地址也一定是16的倍數;偏移地址為16位,16位的尋址能力為64KB,所以一個段的長度最大為64KB。
? ? 偏移地址16位,變化范圍為0-FFFFH,僅用偏移地址來尋址最多可尋64KB個內存單元。
? ? 比如給定段地址1000H,用偏移地址尋址,CPU的尋址范圍為:10000H-1FFFFH。
在8086中,任意時刻,設CS寄存器中的內容為M,IP寄存器中的內容為N,8086CPU將從內存M*16+N單元開始,讀取一條指令并執行;
也表述為:8086機中,任意時刻,CPU將CS:IP指向的內容當作指令執行;
能夠改變CS、IP的內容的指令統稱為轉移指令。例如jmp指令;
====
mov ax, 18
mov bx, 37
add ax, 8
add ax, bx
在emu8086中查看 基礎地址+偏移地址=物理地址
指令存放于內存,起始地址為0100:0000;
CS寄存器初始值為0100;
第二條指令存放起始地址為0100:0003;
第三條指令存放起始地址為0100:0006;
第四條指令存放起始地址為0100:0009;
在emu8086中默認代碼段初始值為0100:0000;
效果如前圖;
?
4?mov指令傳送功能和DS寄存器復習1
?
內存單元是字節單元,一個字要用兩個地址連續的內存單元來存放,低位字節存放在低地址單元中,高位字節存放在高地址單元中。
8086CPU中有一個DS寄存器,通常用來存放要訪問數據的段地址。
如果要讀取10000H單元的內容,可以用如下的程序段:
? ? mov bx, 1000H
? ? mov ds, bx
? ? mov al, [0]
上面三條指令將10000H(1000:0)中的數據讀到al中;
mov指令可以完成的傳送:
? ? 將數據直接送入寄存器;
? ? 將一個寄存器中的內容送入另一個寄存器;
? ? 將一個內存單元中的內容送入一個寄存器;
匯編語言使用 [ ......] 表示一個內存單元;中括號中的數字表示內存單元的偏移地址;
只有偏移地址不能定位一個內存單元,內存單元的段地址是多少?
指令執行時,8086CPU自動取ds中的數據為內存單元的段地址;
下面用emu8086仿真執行以下代碼;
mov ax, 1000H
mov ds,ax
mov ax, 11316
mov [0], ax
圖1,程序開始執行,所有寄存器為0;DS寄存器在emu8086中初始默認為0100;
圖2,執行完第一條指令,1000H放入AX中;
圖3,執行完第二條指令, DS寄存器內容變為1000H;
圖4,執行完第三條指令,2C34H放入AX中;此時DS是1000H;
圖5,執行完第四條指令,指令是把AX中的內容,即2C34H放入偏移地址0000處,數據段地址是從DS取;即把2C34H放入1000:0000處;執行完之后面板看不到內容,因為此時面板只能看到仿真內存的起始部分;
圖6,在面板仿真內存的頂部,手動輸入內存地址1000:0000,回車;仿真內存定位到1000:0000處;看一下34和2C已被放入相應單元;
?
總結
以上是生活随笔為你收集整理的8086汇编复习1 - 并使用emu8086模拟器查看效果的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一些powershell基本使用示例
- 下一篇: Win10下使用Debug