我們知道 指令 的組成 是有操作碼和運算元 組成的 !
運算元的**又有哪些呢 ?
總體上有四種** , 指令本身提供 , 暫存器提供 , 儲存器提供 , 或者是輸入輸出埠提供 。
反過來 ,操作結果的去向 也只有三種 , 暫存器 儲存器 或者 輸出埠
綜合一下 總共有四種 定址方式 立即數定址 暫存器定址 儲存器定址 輸入/輸出埠定址
① 所謂立即數定址 簡單的說就是 指令的運算元 有指令的本身提供 如 move al 80h ;將80h送人al
注意 :
立即數只能作為原運算元 不能作為目的運算元 。
立即數定址方式一般用於對暫存器賦值
② 輸入輸出埠定址 又分為 i/o 直接定址 和 i/o間接定址
直接定址 是 埠號 直接有指令本身提供 如 in al 80h ;
間接定址 是 埠號事先已經設定在了暫存器 中 埠號需要 有暫存器提供 in al dx ;
③儲存器定址
直接定址 儲存單元的有效位址有指令給出 如 mov ax , [1324h]
基址+變址的定址方式
bx bp 稱為基址暫存器 si di 成為變址暫存器 我所理解的基址+變址的定址方式就是同時使用了 這兩種暫存器的乙個
相對 基址+變址的定址方式
bx bp 稱為基址暫存器 si di 成為變址暫存器 我所理解的基址+變址的定址方式就是同時使用了 這兩種暫存器的乙個然後加上位移量
其實和暫存器 的間接定址 和相對定址差不多 !
④ 暫存器定址
如果運算元在cpu的內部暫存器中 , 那麼暫存器的名字可在指令中指出,此為暫存器定址
inc cx ; 將cx的內容加1
暫存器間接定址
在這種定址方式中有效位址 ea 是由暫存器指出的
mov ax ,[bx]
當用 bp sp 進行間接定址時 ,預設段為ss , 其他暫存器進行間接定址時 , 預設為ds
暫存器相對定址
ea 為暫存器中的內容和指令中給出的位移量的和
mov ax [si+100 h ]
注意 上面兩種暫存器定址方式的區別 : 兩種定址方式中都指使用了 暫存器 如果原運算元中 有位移量 那麼為相對定址 ,如果運算元只是給出了暫存器的名字 為間接定址
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定址方式
8086 cpu 中暫存器總共為 14 個,且均為 16 位 即 ax,bx,cx,dx,sp,bp,si,di,ip,flag,cs,ds,ss,es 共 14 個。而這 14 個暫存器按照一定方式又分為了通用暫存器,控制暫存器和段暫存器。ax,bx,cx,dx 稱作為資料暫存器 可以分為兩個獨立...