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目地變址暫存器,既然是變址暫存器,那麼他們肯定是在某個位址的基礎上進行偏移變化,由此我們就得出了需要基址暫存器。你要是把這兩個暫存器同時使用,那你位址變化的基址都沒有,你該怎麼變化呢?你在誰...