80x86指令系統 資料傳送指令

2021-10-24 15:26:00 字數 1908 閱讀 6371

累加器專用指令

位址傳送指令

標誌暫存器傳送指令

型別轉換指令

普通的傳送指令,src表示源運算元,dst表示目的運算元。

雙運算元指令不允許兩個運算元都使用儲存器。

如果其中乙個運算元為段暫存器,則另乙個運算元必須為儲存器或者暫存器。

段暫存器不能是cs暫存器,另外,對於mov segreg,mem/reg指令不會觸發中斷。

帶符號拓展的傳送指令,386及其後繼機型可用。

帶零拓展的傳送指令,386及其後繼機型可用。

進棧指令,src必須為字(或者雙字),不允許位元組堆疊

段位址存放在ss暫存器中,是乙個段暫存器

對字執行push的本質:

(sp)←(sp)-2

((sp)+1,(sp))←(src) ;這兒表明這玩意不處理位元組

出棧指令,也不允許位元組堆疊

目的運算元為段暫存器時不能為cs暫存器

通用暫存器依次進棧,順序為ax,cx,dx,bx,(指令執行前的)sp,bp,si,di

執行完後(sp)←(sp)-16

棧裡存的是之前的

通用暫存器依次出棧,順序為pusha的逆序

執行完後(sp)←(sp)+16

實際上為了保證能正確的對bx進行出棧操作,sp的出棧只是修改了指標,即自增2,而之前pusha存入的sp的原始內容被丟棄了而不是真正地送入了sp暫存器中。

交換兩個運算元。

該指令的運算元須有至少乙個暫存器,但不是段暫存器。

因此該指令可以使用除了立即數以外的任何定址方式。

此指令不影響標誌位

也可以是in ax,port或者in eax,port,三個格式依次為位元組,字和雙字。

也可以是out port,ax或者out port,eax

注意:在in和out指令中的port表示外部裝置的埠號,埠號的範圍為0000~0ffffh,如果指定的port為00到0ffh,則可以用立即數直接在指令中指定,否則就需要先把埠號存在dx暫存器中。

這兩個指令被稱為累加器專用指令是因為cpu只能用累加器ax接收或傳送資訊。

指令將源運算元的有效位址送到指定的暫存器中,該指令的目的運算元不能為段暫存器,源運算元可以使用除立即數和暫存器外的任何一種儲存器定址方式。

舉個栗子:

lea bx,[bx+si+0f62h]

如果指令執行前(bx)=0400h,(si)=003ch

那麼指令執行後(bx)就是0400+003c+0f62=139eh

區別於以下指令:

mov bx,[bx+si+0f62h]

這個指令執行後(bx)為位址139eh裡的內容。

將源運算元送進指定的暫存器中,然後將源運算元+2送進段暫存器中。

源運算元只能是儲存器定址。

上述的暫存器為reg,段暫存器則取決於用的是lds還是les

lds代表目的段暫存器為ds,les代表目的段暫存器為es

注意:src預設使用的段暫存器為ds,不受使用的是lds還是les影響,若要顯式表明用的段暫存器為es請使用es:src,比如es:[bx]。

將al中的內容符號拓展到ah,形成ax中的字。

即如果(al)的最高有效位為0,則(ah)=0,否則為0ffh

類似於al變ax,這裡是ax變dx:ax

類似於al變ax,這裡是ax變為eax

類似於al變ax,這裡是eax變edx:eax

8086指令系統資料傳送指令

1.一般傳送指令mov 格式 mov 目標運算元 源運算元 功能 mov主要實現內容就是各種傳送 目標運算元可以為暫存器運算元 儲存器運算元 源運算元可以為立即數運算元 暫存器運算元 儲存器運算元 根據彙編規定指令的兩個運算元不能同時為儲存器運算元所以有共有5種傳送操作 1 立即數到暫存器 例 mo...

微機原理 五 80x86指令格式

8086指令系統採用了一種靈活的,由1 6個位元組組成的變字長的指令格式,包括操作碼,定址方式以及運算元三個部分 通常指令的第一位元組為操作碼位元組 opcode 規定指令的操作型別.第二位元組為定址方式位元組 mod 規定運算元的定址方式 接著以後的3 6位元組依據指令的不同而取捨 第一位元組為操...

80X86學習筆記 資料傳送指令

一.傳送指令 格式 mov dst,src 源運算元可以使累加器,暫存器,儲存單元,立即數。目的運算元不能為立即數。注意問題 源和目的運算元不能同時是段暫存器 段暫存器cs不能作為目的暫存器 ip既不能作為源,也不能作為目的。源運算元與目的運算元型別要一致16對16位,8位對8位。兩個運算元不能都為...