8086 cpu 中暫存器總共為 14 個,且均為 16 位 。
即 ax,bx,cx,dx,sp,bp,si,di,ip,flag,cs,ds,ss,es 共 14 個。
而這 14 個暫存器按照一定方式又分為了通用暫存器,控制暫存器和段暫存器。
ax,bx,cx,dx 稱作為資料暫存器:
可以分為兩個獨立的 8 位的 ah(bh, ch, dh) 和 al(bl, cl, dl) 暫存器
sp 和 bp 又稱作為指標暫存器:
si 和 di 又稱作為變址暫存器:
控制暫存器:
段暫存器:
示例:
mov ax, 1234h ; 給ax暫存器賦值為1234h
示例;
mov bx, ds:[2000h]
運算元存放在儲存器中, 偏移量直接寫在運算元中,.
位址為資料段暫存器ds的值* 16 (<<4)然後加上直接給出的偏移量2000h.
示例:
mov dx, ax ;將ax中的值賦給dx
直接使用暫存器中的值作為運算元, 速度較快.
運算元存放在儲存器中, 16位偏移位址存放在si, di, bp, bx四個暫存器之一中.
若使用bx, si, di之一作為暫存器, 運算元預設放在ds所決定的資料段中.
即位址為:ds *16 + bx
示例:
mov ax, [si] ; 將ds*16 + si中的值放入ax中
若使用bp做間接定址, 運算元預設放在ss決定的堆疊段中.
示例:
mov ax, [bp] ;將ss*16 + bp中的值放入ax中
可以直接指定使用的段暫存器:
mov ax, ss:[si] ;將ss*16 + si中的值放入ax中
運算元存放在儲存器中, 使用段暫存器內容* 16 加si, di, bp, bx四個暫存器之一的內容再加直接給出的位移量.
若使用bx, si, di之一作為暫存器, 運算元預設放在ds所決定的資料段中; 若使用bp做間接定址, 運算元預設放在ss決定的堆疊段中.
與暫存器間接定址相比只是增加了直接給出的偏移量:
示例:
mov ax, [si-2] ; 將 ds*16 + si - 2中的值放入ax中
mov ax, [bp+4] ;將 ss*16 + bp + 4中的值放入ax中
mov ax, ss:[si-8] ;將 ss*16 + si - 8中的值放入ax中
將段位址暫存器的值*16加上基址暫存器(bx,bp)之一的位址加上變址暫存器(si, di)之一的值作為位址.
若使用bx作基址 運算元預設放在ds所決定的資料段中; 若使用bp做基址, 運算元預設放在ss決定的堆疊段中.
示例:
mov ax, [bx][si] ; 將 ds*16 +bx + si中的值放入ax中
mov ax, [bp][di] ;將 ss*16 + bp + di 中的值放入ax中
mov ax ss:[bx][si] ;將 ss*16 + bx + si 中的值放入ax中
在基址變址定址基礎上再加乙個直接給出的偏移量:
示例:
mov ax, 1234h[bx][di] ;將ds * 16 + bx + di + 1234h中的值放入ax中.
還有幾種表示方法與上式等價:
mov ax, [bx+di+1234h]
mov ax, 1234h[bx+di]
mov ax, 1234h[bx][di]
8086定址方式
8086定址 8086為16位機,所能表示的位址為0 65535 64k 而8086cpu提供了20條位址線所能發出的位址資訊範圍0 fffffh 1m 所以8086採用 段位址 16 偏移位址 的方式進行定址 cs ip 0c2ch 0010h 得到的最終實體地址為 0c2ch 16 0010h ...
8086定址方式
在8086 8088中,運算元在記憶體中的有效位址是段的偏移位址。8位暫存器 ah al bh bl ch cl dh dl 16位暫存器 ax bx cx dx si di bp sp 4個段暫存器 cs ds ss es 有效位址由基址暫存器 bx或bp 的內容加上變址暫存器 si或di 的內容...
8086 的定址方式
我們知道 指令 的組成 是有操作碼和運算元 組成的 運算元的 又有哪些呢 總體上有四種 指令本身提供 暫存器提供 儲存器提供 或者是輸入輸出埠提供 反過來 操作結果的去向 也只有三種 暫存器 儲存器 或者 輸出埠 綜合一下 總共有四種 定址方式 立即數定址 暫存器定址 儲存器定址 輸入 輸出埠定址 ...