8086彙編 1 通用暫存器和簡單彙編指令

2022-08-02 20:48:10 字數 3471 閱讀 8999

by:wangyz

1,通用暫存器

8086cpu所有的暫存器都是16位

資料暫存器:ax  bx  cx  dx 

指標及變址暫存器:bp  sp  di  si

段暫存器:cs  ds  ss  es

控制暫存器:ip

資料暫存器

也稱為通用暫存器,均為16位,包括ax,bx,cx和dx

16位暫存器的邏輯結構

4個16位暫存器又可分割成8個獨立的8位暫存器

ax 累加器(accumulator),用累加器進行的操作可能需要更少時間。累加器可用於乘、除、輸入/輸出等操作;

bx稱為基位址暫存器(base register),可作通用暫存器用,在計算儲存器位址時,常用作基址儲存器;

cx稱為計數暫存器(count register),常用作迴圈計數器;在位操作中,要用cl來指明移位的位數;

dx稱為資料暫存器(data register)。在進行雙字的乘、除運算時,它可作為預設的運算元參與運算,也可用於存放i/o的埠位址。

字在儲存器中的儲存

字:word,乙個字由2個位元組組成

乙個位元組可以存放在8位暫存器中

乙個字可以存放在乙個16位暫存器中,高位位元組放於高8位暫存器中,低位位元組放於低8位暫存器中。

如十進位制數字20000存放到ax中,二進位制表示為0100-1110-0010-0000,十六進製制表示為4e20h

ax的高8位ah中為4eh,ax的低8位al中為20h

簡單彙編指令

注意:在進行資料傳送或算術運算時,指令的兩個操作物件的位數應當一致!

mov ax,18

將18送入暫存器ax中,ax=18

mov ah,78

將78送入暫存器ah中,ah=78

add ax,8

將暫存器ax中的數值加8,ax=ax+8

mov ax,bx

將暫存器bx中的資料送入ax,ax=bx

add ax,bx

將ax和bx中的數值相加,存入ax中,ax=ax+bx

示例:ax和bx的初始值都為0000h

mov ax,001ah  ax=001ah bx=0000h

mov bx,0026h  ax=001ah bx=0026h

add al,bl  al=al+bl=1ah+26h=40h  ax=0040h bx=0026h

add ah,bl ah=ah+bl=00h+26h=26h ax=2640h bx=0026h

add bh,al bh=bh+al=00h+40h=40h ax=2640h bx=4026h

mov ah,0 ax=0040h bx=4026h

add al,85h al=al+85h=40h+85h=c5h ax=00c5h bx=4026h

add al,93h al=al+93h=c5h+93h=158h (al為8位暫存器,最高位1丟失)

ax=0058h bx=4026h

實體地址(了解即可)

8086cpu有20位的位址匯流排,可以傳送20位的位址,達到1m的定址能力。

8086cpu又是16位結構,在內部一次性處理,傳輸,暫時儲存的位址為16位。

從8086內部結構來看,表現的定址能力只有64kb

8086採用一種在內部用兩個16位位址合成的方法來形成20位的實體地址。

2.段位址和偏移位址通過內部匯流排送入乙個叫做位址加法器的部件。

3.位址加法器將兩個16位位址合併為乙個20位的實體地址。

4.位址加法器通過內部匯流排將20位實體地址送入輸入輸出控制電路

5.輸入輸出控制電路將20位實體地址送上位址匯流排。

6.20位實體地址被位址匯流排送入儲存器

位址加法器採用 實體地址=段位址*16+偏移位址 的方法將段位址和偏移位址合成實體地址

段的概念

段位址名稱中的段的概念,可能會讓人誤以為記憶體被劃分成了乙個乙個的段,每個段又乙個段位址。

記憶體並沒有分段,段的劃分來自於cpu。由於8086cpu用段位址*16+偏移位址=實體地址的方式給出記憶體單元的實體地址,使得我們可以用分段的方式來管理記憶體,

位址10000h-100ffh的記憶體單元組成乙個段,該段的起始位址(基礎位址)為10000h,段位址為1000h,大小為100h。

也可以認為位址10000h-1007fh,10080h-100ffh的記憶體單元組成兩個段,他們的原始位址基礎位址為:10000h和10080h,段位址為:1000h和1008h,大小都為80h

偏移位址16位,變化範圍0000h-ffffh,僅用偏移位址來定址最多可尋64kb個記憶體單元

比如給定段位址1000h,用偏移位址定址,cpu的定址範圍為10000h-1ffffh,也是64kb,段有16個即16*64=1024kb=1m

段暫存器(了解,後面有詳細的解釋)

8086cpu有4個段暫存器:cs,ds,ss,es

cs:**段code

ds:資料段data

ip:指令指標

暫存器,指向下一條要執行的命令

cs和ip

cs和ip指示了cpu當前要讀取的指令的位址,

cs是**段暫存器,ip是指令指標暫存器

在8086機器中,任意時刻,設cs中的內容為m,ip為n,cpu將從記憶體m*16+n單元開始讀取一條指令並執行

也可以這樣表述,任意時刻,cpu將cs:ip指向的內容當作指令執行。 

修改cs:ip指令

在cpu中。能夠用指令讀寫的部件只有暫存器,程式設計師可以通過改變暫存器中的內容實現對cpu的控制。

cpu從何處執行指令由cs:ip決定的,程式設計師可以通過修改cs,ip的值來控制cpu執行目標指令。

jmp指令:

jmp 2ae3:3 執行後:cs=2ae3h ip=00003h,cpu 將從2ae33h處讀取指令

jmp 3:0b16 執行後:cs=0003h ip=0b16h,cpu將從00b46h處讀取指令

若僅想修改ip的值,"jmp 某乙個合法暫存器"

jmp ax,指令執行前:ax=1000h cs=2000h ip=0003h

指令執行後 ax=1000h cs=2000h ip=1000h

jmp ax 在含義上近似 mov ip,ax

修改cs,mov cs,ax

複製去google翻譯

8086通用指令及暫存器

8086暫存器 8086 有14個16位暫存器,這14個暫存器按其用途可分為 1 通用暫存器 2 指令指標 3 標誌暫存器 4 段暫存器等4類。有8個,又可以分成2組,一組是資料暫存器 4個 另一組是指標暫存器及變址暫存器 4個 顧名思義,通用暫存器是那些你可以根據自己的意願使用的暫存器,修改他們的...

彙編暫存器 8086

一 組合語言中,為什麼si和di不能同時使用彙編 其實你可以想一下,這兩個暫存器的意思,si源變址暫存器,di目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...

8086彙編暫存器

一 組合語言中,為什麼si和di不能同時使用彙編 其實你可以想一下,這兩個暫存器的意思,si源變址暫存器,di目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...