日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

8086汇编复习1 - 并使用emu8086模拟器查看效果

發布時間:2025/4/14 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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模拟器查看效果的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。