指令系統(tǒng)-傳送類指令.ppt
1,80 x86的指令系統(tǒng),傳送類指令,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),2,傳送類指令-傳送指令MOV-教材第47頁,格式 MOV 目的,源 功能: 將一個操作數(shù)在存儲器和寄存器之間傳送,或者寄存器和寄存器之間傳送,或者將立即數(shù)傳送到寄存器或存儲器 不能用于存儲器與存儲器之間傳送 不能用于段寄存器和段寄存器之間傳送 不能將立即數(shù)傳送到段寄存器,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),3,除IP,MOV 目的,源,段寄存器 DS ES SS,通用寄存器 AXSP BXBP CXSI DXDI,存儲器單元,立即數(shù),除CS,除PSW,類型要明確,標(biāo)志位不影響,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),4,交換指令XCHG -教材第47頁,格式 XCHG 操作數(shù)1,操作數(shù)2 功能 交換2個操作數(shù) 可以是寄存器和寄存器之間交換 可以是寄存器和存儲器之間交換,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),5,XCHG 數(shù)1,數(shù)2,通用寄存器 AXSP BXBP CXSI DXDI,存儲器單元,通用寄存器 AXSP BXBP CXSI DXDI,段寄存器 DS ES SS CS,立即數(shù),標(biāo)志位不影響,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),6,例1-39(視頻演示) -教材第47頁,指令xchg ax, bx 實(shí)現(xiàn)將AX中的數(shù)據(jù)和用BX間接尋址所表示的存儲單元中的數(shù)據(jù)進(jìn)行互換。在DEBUG中跟蹤操作,指令執(zhí)行前,AX=0000,把BX中的0000作為偏移地址,ds:0000單元中執(zhí)行指令前為20cdh。用T命令執(zhí)行指令,可以看到,AX=20cdh,而數(shù)據(jù)段ds:0000單元中為0000h,實(shí)現(xiàn)了寄存器和存儲單元的數(shù)據(jù)互換。,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),7,(3) 換碼指令XLAT -教材第48頁,格式 XLAT 功能 將DS:BX指向轉(zhuǎn)換表的首地址,以AL中的內(nèi)容為序號,以轉(zhuǎn)換表中的字節(jié)內(nèi)容存入到AL中,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),8,XLAT,存儲器單元,BX,AL,+,先定位BX 再置AL數(shù) 不涉及其余尋址方式,標(biāo)志位不影響,教材第48頁,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),9,(3) 換碼指令XLAT -教材第48頁,換碼指令XLAT用于將緩沖區(qū)中的一個數(shù)據(jù)取出并傳送給AL寄存器。BX指定這個緩沖區(qū)在主存中的開始位置,AL指定數(shù)據(jù)距離開始位置的位移量。XLAT指令的應(yīng)用場合比較獨(dú)特,主要用于將一種代碼轉(zhuǎn)換為另一種代碼。,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),10,例1-40(視頻演示) -教材第48頁,在DEBUG中輸入xlat語句,執(zhí)行前查看BX、AL、以及 (BX+AL) 單元中的數(shù)據(jù),執(zhí)行后,查看AL 中的數(shù)據(jù)。在下圖中可見,用R命令查看到執(zhí)行指令前,AL=00h,BX=0000h,源操作數(shù)在數(shù)據(jù)段的0000+00=0000單元中,用D命令查看到ds:0000單元中為0cdh,所以,用T命令執(zhí)行xlat時,將0cdh傳送到隱含的目的操作數(shù)AL中,AL=0cdh。,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),11,(4) 堆棧指令PUSH / POP -教材第48頁,堆棧是主存中一個特殊的區(qū)域,它采用“先進(jìn)后出”的存取原則。8086/8088中堆棧區(qū)域被稱為堆棧段,首地址由SS指定,棧頂位置由SP指定。堆棧的基本操作是進(jìn)棧PUSH和出棧POP指令。 堆棧指令主要用于臨時保存數(shù)據(jù)、寄存器的保護(hù)和恢復(fù)以及參數(shù)傳遞。,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),12,堆棧操作指令-教材第48頁,格式 PUSH 源 POP 目的 功能 PUSH指令將存儲器、寄存器中數(shù)據(jù)壓入堆棧 POP指令將堆棧頂?shù)臄?shù)據(jù)彈出到存儲器或寄存器中,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),13,PUSH 源 PUSHF,段寄存器 DS ES SS,通用寄存器 AXSP BXBP CXSI DXDI PSWIP,存儲器單元,堆棧區(qū),除CS,立即數(shù),必須是字類型,標(biāo)志位不影響,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),14,POP 目的POPF,段寄存器 DS ES SS,通用寄存器 AXSP BXBP CXSI DXDI /PSW,存儲器單元,堆棧區(qū),除CS,除IP,必須是字類型,標(biāo)志位不影響,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),15,例1-41(視頻演示) -教材第49頁,在DEBUG中調(diào)試下面指令,執(zhí)行前請先查看一下相關(guān)寄存器和堆棧單元的值,執(zhí)行后再查看有否發(fā)生變化,發(fā)生了什么變化。 push ax pop cx,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),16,(5) 有效地址傳送指令LEA -教材第49頁,有效地址傳送指令LEA獲取存儲器操作數(shù)的有效地址EA (偏移地址) ,常用于將變量所在的初始地址賦給寄存器。由于要在指令中指明變量符號,而DEBUG中的指令不允許輸入符號,要用單元的偏移地址來表示。,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),17,取有效地址指令LEA -教材第49頁,格式 LEA 目的,源單元 功能 將單元偏移地址(有效地址)傳送給通用寄存器,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),18,LEA 目的,源單元,存儲器單元,通用寄存器 AXSP BXBP CXSI DXDI,地址,段寄存器 DS ES SS CS,立即數(shù),標(biāo)志位不影響,除PSW IP,讀書之法,在循序而漸進(jìn),熟讀而精思。(朱熹),19,例1-42(視頻演示) -教材第50頁,mov ax, 1234 lea ax, 1234 在DEBUG中跟蹤比較這兩條指令的功能差異。從下圖中可以看到,兩條指令都是對數(shù)據(jù)段的1234h單元操作,但是MOV指令取的是單元中的值,而LEA指令取的是該單元的地址。,