80x86的指令系统和寻址方式课件_第1页
80x86的指令系统和寻址方式课件_第2页
80x86的指令系统和寻址方式课件_第3页
80x86的指令系统和寻址方式课件_第4页
80x86的指令系统和寻址方式课件_第5页
已阅读5页,还剩132页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指令系統一組指令的集合

80x86的指令系統和尋址方式

操作碼運算元...運算元指令

尋址方式與數據有關的尋址方式與轉移地址有關的尋址方式1.8086的尋址方式

與數據有關的尋址方式:以MOV

指令為例立即尋址MOVAX,3069H寄存器尋址MOVAL,BH直接尋址MOVAX,[2000H]寄存器間接尋址MOVAX,[BX]

寄存器相對尋址MOVAX,COUNT[SI]

基址變址尋址MOVAX,[BP][DI]相對基址變址尋址MOVAX,MASK[BX][SI]記憶體尋址(1)立即尋址方式*——運算元在指令中給出指令格式:MOVAL,5MOVAX,3064HMOVAL,‘A’*

只能用於

SRC字段

MOV40H,AL

*SRC和DST的字長一致

MOVAH,3064H

(2)寄存器尋址方式*—運算元在指定的寄存器中

MOVAX,BXMOVAL,BHMOVAX,3064H*

位元組寄存器只有

AHALBHBLCHCLDHDL*SRC和DST的字長一致

MOVAH,BX

*

CS不能用

MOV指令改變

MOVCS,AX

(3)直接尋址方式*—有效地址EA由指令直接給出

例:MOVAX,[2000H]

EA=2000H,假設(DS)=3000H,那麼PA=32000H*

隱含的段為數據段DS*

可使用段跨越首碼

MOVAX,ES:[2000H]*

運算元地址可由變數(符號地址)表示,但要注意VALUEDB10變數的屬性MOVAH,VALUE

MOVAX,VALUE

MOVAX,WORDPTRVALUE

(WORDPTR是字操作符,以後詳細講)5030

32000AHAL3050(AX)=3050H寄存器間接尋址*—EA在基址寄存器(BX/BP)

或變址寄存器(SI/DI)中

MOVAX,[BX]PA=16d(DS)+(BX)MOVAX,ES:[BX]PA=16d(ES)+(BX)MOVAX,[BP]PA=16d(SS)+(BP)*不允許使用AX、CX、DX存放EAMOVAX,[CX]

*

SRC和DST的字長一致

MOVDL,[BX];[BX]指示一個位元組單元

MOVDX,[BX];[BX]指示一個字單元

*

適於數組、字串、表格的處理

有效地址=(BX)(BP)8位(SI)16位(DI)+位移量(5)寄存器相對尋址方式*

指令格式:MOVAX,COUNT[SI]或

MOVAX,[COUNT+SI]

假設(DS)=3000H,(SI)=2000H,COUNT=3000H,

則:PA=35000H

假設(35000H)=1234H,那麼(AX)=1234H*適於數組、字串、表格的處理(6)基址變址尋址方式*指令格式:

MOVAX,[BX][DI]MOVAX,[BX+DI]MOVAX,ES:[BX][SI]*適於數組、字串、表格的處理*必須是一個基址寄存器和一個變址寄存器的組合

MOVAX,[BX][BP]

MOVAX,[SI][DI]

有效地址=(BX)(SI)(BP)(DI)+(7)相對基址變址尋址方式

MOVAX,MASK[BX][SI]

MOVAX,MASK[BX+SI]

或MOVAX,[MASK+BX+SI]

有效地址=(BX)(SI)8位(BP)(DI)16位++位移量訪問記憶體的方式

默認的段寄存器可跨越的段寄存器偏移地址取指令

CS無IP堆疊操作

SS無SP一般數據訪問

DSCSESSS有效地址EABP作為基址的尋址

SSCSDSESBP串操作的源運算元

DSCSESSSSI串操作的目的運算元

ES無DI段寄存器的使用規定例:編寫一段顯示字串STRING的程式

DATASEGMENTSTRINGDB‘HAPPYNEWYEAR!’,0DH,0AH,‘$’COUNTDW17DATAENDS(1)直接尋址

movdl,string

movah,2

int21h;顯示字元‘H’

movdl,string+1

movah,2

int21h;顯示字元‘A’::(2)寄存器間接尋址

mov

cx,count;mov

cx,17

mov

bx,offsetstring;string的偏址

bxNext:movdl,[bx]

movah,2

int21h;顯示一個字元

incbxloopnext;迴圈指令(3)寄存器相對尋址

mov

cx,count;mov

cx,17

mov

si,0Next:movdl,string[si];movdl,[string+si]

movah,2

int21h;顯示一個字元

incsiloopnext;迴圈指令(4)基址變址尋址

mov

cx,count;mov

cx,17

mov

bx,offsetstring;string的偏址

bx

mov

si,0Next:movdl,[bx][si];movdl,[bx+si]

movah,2

int21h;顯示一個字元

incsiloopnext;迴圈指令(5)DOS顯示字串功能

mov

dx,offsetstring;string的偏址

dx

;leadx,string

movah,9

int21h;顯示一串字元80x86新增的尋址方式

EA=(基址寄存器)+(變址寄存器)

比例因數+位移量(1)比例變址尋址方式

例:MOVEAX,COUNT[ESI

4]注意E它是後加的一個標誌(2)基址比例變址尋址方式

例:MOVECX,[EAX][EDI

4]

(3)相對基址比例變址尋址方式

例:MOVEAX,TABLE[EBP][EDI

4]▲16位和32位尋址的差異地址成分16位尋址32位尋址基址寄存器BX、BP任何32位通用寄存器變址寄存器SI、DI除ESP外的任何32位通用寄存器比例因數11、2、4、8與轉移地址有關的尋址方式:

段內尋址段內直接尋址JMPNEARPTRNEXT

段內間接尋址JMPTABLE[BX]

段間尋址

段間直接尋址JMPFARPTRNEXT

段間間接尋址JMPDWORDPTR[BX]用來確定轉移指令及轉子指令的轉向地址。(1)段內直接尋址轉向的有效地址=當前(IP)+位移量(8bit/16bit)

例:JMPNEARPTRNEXT近轉移-32768~+32767

JMPSHORTNEXT

短轉移-128~+127

(2)段內間接尋址

轉向的有效地址是一個寄存器或存儲單元的內容。(可用除立即數以外的任何一種數據尋址方式得到)

例:TABLE=20A2H(BX)=1256H(SI)=528EH(DS)=2000H(232F8H)=3280H(264E4H)=2450H

JMPBX;(IP)=1256H

JMPTABLE[BX]JMPWORDPTRTABLE[BX];(IP)=3280H

JMP[BX][SI]JMPWORDPTR[BX][SI];(IP)=2450Hcode1segment

……

jmp

farptrnext

……code1endscode2segment

……next:…...

……code2ends(3)段間直接尋址

用指令中提供的轉向段地址和偏移地址取代CS和IP

例:(4)段間間接尋址

用記憶體中的兩個相繼字的內容取代CS和IP

(存儲單元的地址可用記憶體尋址方式得到)

例:

JMPDWORDPTR[INTERS+BX]

PA=(DS)×24+(BX)+INTERS(PA+1,PA)→IP(PA+3,PA+2)→CS第3章練習Page107

3.13.33.53.73.113.133.1設(BX)=637DH,(SI)=2A9BH,位移量D=7237H,試確定在以下各種尋址方式下的有效地址是什麼?

(1)立即尋址。

直接將數送到指定的記憶體單元或者是寄存器

(2)直接尋址。

d

(3)使用BX的寄存器尋址。

通用寄存器bx的編碼地址

(4)使用BX的間接尋址。

地址是(bx),

(5)使用BX的寄存器相對尋址。

地址是(bx)+d

(6)基址變址尋址。

(bx)+(si)

(7)相對基址變址尋址。

(bx)+(si)+d

(1)立即尋址。

沒有有效地址

(2)直接尋址。

D

7237H

(3)使用BX的寄存器尋址。

bx中存放的是運算元沒有效地址

(4)使用BX的間接尋址。

BX

637DH

(5)使用BX的寄存器相對尋址。

bx+d

D5B4H

(6)基址變址尋址。

bX+si

8E18H

(7)相對基址變址尋址。

bx+si+d

004FH(有溢出)

不用知道DS

,需要求物理地址時才要。題目是求有效地址。

3.3寫出首地址為BLOCK的字數組的第六個字送到DX寄存器的指令,要求使用以下幾種尋址方式:

(1)寄存器間接尋址

(2)寄存器相對尋址

(3)基址變址尋址

(1)寄存器間接尋址

MOV

BX,OFFSET

BLOCK ADD

BX,OAH

MOV

DX

,[BX](2)寄存器相對尋址

MOV

BX,0AH

MOV

DX,BLOCK[BX](3)基址變址尋址

MOV

BX

,

OFFSET

BLOCK

MOV

SI,OAH MOV

DX,[BX][SI]3.5設(IP)=2BC0H,(CS)=0200H,位移量=5119H,(BX)=1200H,(DS)=212AH,(263B9)=089AH(275B9)=098AH試確定轉移指令(JMP)轉移的偏移地址(即CS=?,IP=?)(1)段內直接尋址方式;(2)使用BX及寄存器間接尋址方式的段內間接尋址;(3)使用BX及寄存器相對尋址方式的段內間接尋址;

段內直接尋址方式:

jmp

[5119]

CS=0200,IP=089A

使用BX及寄存器間接尋址方式的段內間接尋址:

jmp

word

ptr

bx

CS=0200,IP=1200

使用BX及寄存器相對尋址方式的段內間接尋址:

jmp

word

ptr

5119[bx]

CS=0200,IP=098A

注意:轉向的有效地址是一個寄存器或存儲單元的內容。3.7在0624H單元內有一條二位元組JMPSHORTOBJ指令,如其中位移量為

(1)27H

(2)6BH

(3)0C6H

試問轉向地址OBJ的值是多少?

(1)

064DH

(2)

0691H

(3)

06ECH

0624H加上JMP指令的長度2作為跳轉基址,然後再加上位移量。

3.11執行下列指令後,AX寄存器中的內容是什麼?TABLEDW10,20,30,40,50ENTRYDW3MOVBX,OFFSETTABLEADDBX,ENTRYMOVAX,[BX](AX)=403.13已知SS=0FFA0H,SP=00B0H,先執行兩條把8057H和0F79H分別進棧的PUSH指令,再執行一條POP指令,試畫出堆疊區和SP內容變化的過程示意圖。(標出存儲單元的地址)

數據傳送指令

算術指令

邏輯指令

串處理指令

控制轉移指令

處理機控制與雜項操作指令2.8086的指令系統重點關注:指令的彙編格式指令的基本功能指令支持的尋址方式指令的執行對標誌位的影響指令的特殊要求

數據傳送指令:

通用數據傳送指令

MOV、PUSH、POP、XCHG

累加器專用傳送指令

IN、OUT、XLAT

地址傳送指令

LEA、LDS、LES

標誌寄存器傳送指令

LAHF、SAHF、PUSHF、POPF

類型轉換指令

CBW、CWD傳送指令:MOVDST,SRC執行操作:(DST)(SRC)注意:*DST、SRC不能同時為段寄存器

MOVDS,ES

*立即數不能直接送段寄存器

MOVDS,2000H

*DST不能是立即數和CS*DST、SRC不能同時為記憶體尋址*不影響標誌位

通用數據傳送指令MOVAX,DSEGMOVDS,AX

進棧指令:PUSHSRC

執行操作:(SP)

(SP)–2((SP)+1,(SP))

(SRC)

出棧指令:POPDST

執行操作:(DST)

((SP)+1,(SP)) (SP)

(SP)+2堆疊:‘先進後出’的存儲區,段地址存放在SS中,

SP在任何時候都指向棧頂,進出棧後自動修改SP。

注意:

*堆疊操作必須以字為單位。

*

不影響標誌位

*

不能用立即尋址方式

PUSH1234H

*DST不能是CSPOPCS

例:假設(AX)=2107H,執行

PUSHAX********(SP)

PUSHAX執行前(SP)

********07H21H低地址

高地址PUSHAX執行後進棧方向(SP)

********07H21HPOPBX執行前(SP)

********07H21H低地址

高地址POPBX執行後

(BX)=2107H例:POPBX出棧方向例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其間用到AX、BX、CXPOPCX;後進先出

POPBXPOPAX

交換指令:XCHGOPR1,OPR2

執行操作:(OPR1)

(OPR2)注意:

*不影響標誌位

*不允許使用段寄存器

例:XCHGBX,[BP+SI]XCHGAL,BH

累加器專用傳送指令(只限使用AX或AL)

輸入指令IN(I/O

CPU)

長格式:INAL,PORT(位元組)

INAX,PORT(字)執行操作:(AL)

(PORT)(位元組)

(AX)

(PORT+1,PORT)(字)短格式:INAL,DX(位元組)

INAX,DX(字)執行操作:(AL)((DX))(位元組)

(AX)((DX)+1,(DX))(字)

輸出指令OUT(CPU

I/O)長格式:OUTPORT,AL(位元組)

OUTPORT,AX(字)執行操作:(PORT)

(AL)(位元組)

(PORT+1,PORT)

(AX)(字)短格式:OUTDX,AL(位元組)

OUTDX,AX(字)執行操作:((DX))

(AL)(位元組)

((DX)+1,(DX))

(AX)(字)注意:*

不影響標誌位*

前256個端口號00H~FFH可直接在指令中指定(長格式)*

如果端口號

256,端口號

DX(短格式)例:INAX,28H MOVDATA_WORD,AX例:MOVDX,3FCHINAX,DX例:OUT5,AL例:測試某狀態寄存器(端口號27H)的第2位是否為1INAL,27HTESTAL,00000100BJNZERROR;若第2位為1,轉ERROR處理例:Sound程式

mov

dx,100inal,61handal,11111100bsound:

xoral,2;101out61h,al;ONOFFON

mov

cx,140h;脈寬Wait1:loopwait1

dec

dx

jnesound設備控制寄存器端口61H1/00

控制其他外部設備與門放大器2號定時器門控10(BX)

30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H換碼指令:XLAT或XLATOPR執行操作:(AL)

((BX)+(AL))例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令執行後(AL)=33H注意:

*不影響標誌位*位元組表格(長度不超過256)

首地址

(BX)*需轉換的代碼位移量(AL)

地址傳送指令

有效地址送寄存器指令:LEAREG,SRC

執行操作:(REG)

SRC

指針送寄存器和DS指令:LDSREG,SRC

執行操作:(REG)

(SRC)(DS)

(SRC+2)

相繼二字

寄存器、DS

指針送寄存器和ES指令:LESREG,SRC

執行操作:(REG)

(SRC)(ES)

(SRC+2)

相繼二字

寄存器、ES例:LEABX,[BX+SI+0F62H]

LDSSI,[10H]

LESDI,[BX]40H00H00H30HTABLE(DS):1000HMOVBX,TABLE;(BX)=0040HMOVBX,OFFSETTABLE;(BX)=1000HLEABX,TABLE;(BX)=1000HLDSBX,TABLE;(BX)=0040H

;(DS)=3000HLESBX,TABLE;(BX)=0040H

;(ES)=3000H注意:

*不影響標誌位

*REG不能是段寄存器

*SRC必須為記憶體尋址方式

標誌寄存器傳送指令

標誌送AH指令:LAHF

執行操作:(AH)

(FLAGS的低位元組)

AH送標誌寄存器指令:SAHF

執行操作:(FLAGS的低位元組)

(AH)

標誌進棧指令:PUSHF

執行操作:(SP)

(SP)-2((SP)+1,(SP))

(FLAGS)

標誌出棧指令:POPF

執行操作:(FLAGS)

((SP)+1,(SP))(SP)

(SP)+2*影響標誌位

類型轉換指令

CBWAL

AX

執行操作:若(AL)的最高有效位為0,則(AH)=00H

若(AL)的最高有效位為1,則(AH)=FFH

CWDAX

(DX,AX)

執行操作:若(AX)的最高有效位為0,則(DX)=0000H

若(AX)的最高有效位為1,則(DX)=FFFFH

例:(AX)=0BA45HCBW;(AX)=0045HCWD;(DX)=0FFFFH(AX)=0BA45H注意:*無運算元指令

*隱含對AL或AX進行符號擴展

*不影響條件標誌位算術指令:

加法指令

ADD、ADC、INC

減法指令

SUB、SBB、DEC、NEG、CMP

乘法指令

MUL、IMUL

除法指令

DIV、IDIV

十進位調整指令

DAA、DAS、

AAA、AAS、AAM、AAD

加法指令

加法指令:ADDDST,SRC

執行操作:(DST)

(SRC)+(DST)

帶進位加法指令:ADCDST,SRC

執行操作:(DST)

(SRC)+(DST)+CF

加1指令:INCOPR

執行操作:(OPR)

(OPR)+1注意:*除INC指令不影響CF標誌外,均對條件標誌位有影響。加法指令對條件標誌位的影響CF位表示無符號數相加的溢出。OF位表示帶符號數相加的溢出。1結果為負0否則SF=1結果為00否則ZF=1和的最高有效位有向高位的進位0否則CF=1兩個運算元符號相同,而結果符號與之相反0否則OF=舉例:n=8bit帶符號數(-128~127),無符號數(0~255)

00000100+0000101100001111帶:(+4)+(+11)=+15OF=0無:4+11=15CF=0帶符號數和無符號數都不溢出

00001001+0111110010000101

帶:(+9)+(+124)=-123OF=1

無:9+124=133CF=0帶符號數溢出無符號數溢出

00000111+11111011100000010帶:(+7)+(-5)=+2OF=0無:7+251=2CF=1帶符號數和無符號數都溢出

10000111+11110101101111100帶:(-121)+(-11)=+124OF=1無:135+245=124CF=1例:雙精度數的加法

(DX)=0002H(AX)=0F365H(BX)=0005H(CX)=8100H

指令序列

ADDAX,CX;(1)ADCDX,BX;(2)

(1)執行後,(AX)=7465H

CF=1OF=1SF=0ZF=0(2)執行後,(DX)=0008HCF=0OF=0SF=0ZF=0

減法指令減法指令:SUBDST,SRC執行操作:(DST)

(DST)-(SRC)帶借位減法指令:SBBDST,SRC執行操作:(DST)

(DST)-(SRC)-CF減1指令:DECOPR執行操作:(OPR)

(OPR)-1求補指令:NEGOPR執行操作:(OPR)

-(OPR)比較指令:CMPOPR1,OPR2執行操作:(OPR1)-(OPR2)注意:*除DEC指令不影響

CF標誌外,均對條件標誌位有影響。減法指令對條件標誌位(CF/OF/ZF/SF)的影響:CF位表示無符號數減法的溢出。OF位表示帶符號數減法的溢出。1被減數的最高有效位有向高位的借位0否則CF=1兩個運算元符號相反,而結果的符號與減數相同0否則OF=1減法轉換為加法運算時無進位0否則CF=或NEG指令對CF/OF的影響0運算元為01否則CF=1運算元為-128(位元組運算)或運算元為-32768(字運算)0否則OF=

00011110+00011111NEG指令對CF/OF的影響0運算元為01否則CF=1運算元為-128(位元組運算)或運算元為-32768(字運算)0否則OF=

00001111+000110000

10000111+00011000例:x、y、z均為雙精度數,分別存放在地址為X,X+2;

Y,Y+2;Z,Z+2的存儲單元中,用指令序列實現

w

x+y+24-z,並用W,W+2單元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;結果存入W,W+2單元

乘法指令

無符號數乘法指令:MULSRC

帶符號數乘法指令:IMULSRC

執行操作:位元組運算元(AX)

(AL)*(SRC)

字運算元(DX,AX)

(AX)*(SRC)注意:

*AL(AX)為隱含的乘數寄存器。*AX(DX,AX)為隱含的乘積寄存器。*SRC不能為立即數。*除CF和OF外,對條件標誌位無定義。乘法指令對CF/OF的影響:例:(AX)=16A5H,(BX)=0611H

(1)

IMULBL

;(AX)(AL)*(BL)

;A5*115B*11=060BF9F5

;

(AX)=0F9F5H

CF=OF=1(2)

MULBX

;(DX,AX)(AX)*(BX)

;16A5*0611=00895EF5

;

(DX)=0089H(AX)=5EF5H

CF=OF=100乘積的高一半為零11否則MUL指令:CF,OF=00乘積的高一半是低一半的符號擴展11否則

IMUL指令:CF,OF=1010010101011011

除法指令

無符號數除法指令:DIVSRC

帶符號數除法指令:IDIVSRC

執行操作:位元組操作(AL)

(AX)/(SRC)的商

(AH)

(AX)/(SRC)的餘數字操作

(AX)

(DX,AX)/(SRC)的商

(DX)

(DX,AX)/(SRC)的餘數注意:

*AX(DX,AX)為隱含的被除數寄存器。

*AL(AX)為隱含的商寄存器。

*AH(DX)為隱含的餘數寄存器。

*SRC不能為立即數。

*對所有條件標誌位均無定義。如何判別結果有效?如果在位元組操作時,被除數的高8位絕對值>=除數的絕對值,或在字操作時,…或雙字操作時,…。這時候商產生了溢出。8086對這種溢出由系統的中斷進行處理。但為避免結果無效,在程式中要進行判斷和處理例:x,y,z,v均為16位帶符號數,計算

(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX)

餘數→(DX)

十進位調整指令BCD碼:用二進位編碼的十進位數,又稱二--十進位數壓縮的BCD碼:用4位二進位數表示1位十進位數

例:(59)10=(01011001)BCD非壓縮的BCD碼:用8位二進位數表示1位十進位數例:(59)10=(0000010100001001)BCD數字的ASCII碼是一種非壓縮的BCD碼

DIGIT ASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001例:寫出(3590)10的壓縮BCD碼和非壓縮BCD碼,並分別把它們存入數據區PAKED和UNPAK壓縮BCD: (3590)10=(0011010110010000)BCD非壓縮BCD:

(3590)10=(00000011000001010000100100000000)BCDPAKED90H35HUNPAK00H09H05H03H問題的提出:十進位調整指令19壓縮BCD:00011001

2700100001+110

+08+00001000

(00100111)BCDAF=1(1)壓縮的BCD碼調整指令●DAA加法的十進位調整指令●DAS減法的十進位調整指令(2)非壓縮的BCD碼調整指令●AAA加法的ASCII碼調整指令●AAS減法的ASCII碼調整指令●AAM乘法的ASCII碼調整指令●AAD除法的ASCII碼調整指令壓縮BCD運算舉例:(1)MOVAL,BCD1;BCD1=34H

ADDAL,BCD2;BCD2=59H,(AL)=8DH

DAA;8DH+06H=93H

MOVBCD3,AL;BCD3=93H(2)MOVAL,BCD1;BCD1=34H

SUBAL,BCD2;BCD2=59H,(AL)=0DBH

DAS;0DBH-60H-06H=75H

MOVBCD3,AL;BCD3=75=-25(10n’補數)非壓縮BCD運算舉例:(1)MULBL;(AX)=(AL)×(BL)=08×09

AAM;(AL)/0AH=48H/0AH→0702(2)AAD;(AX)→(AH)×0AH+(AL)=48H

DIVBL;(AL)=(AX)/(BL)=48H/4=12HAAM;(AL)/0AH=12H/0AH=0108第3章作業Page109

3.14~3.17

3.14設(DS)=1B00H,(ES)=2B00H,有關記憶體地址及其內容如下圖所示,請用兩條指令把X裝入AX寄存器。LEA

BX,[2000H]

MOVAX,ES:[BX]

3.15求出以下各十六進制數與十六進制數62A0之和,並根據結果設置標誌位SF、ZF、CF和OF的值。

(1)1234

(2)4321

(3)CFA0

(4)9D60

(1)

74D4HSF=0ZF=0CF=0OF=0

(2)

A5C1HSF=1ZF=0CF=0OF=1

(3)

3240HSF=0ZF=0CF=1OF=0

(4)

0000HSF=0ZF=1CF=1OF=0

3.16求出以下各十六進制數與十六進制數4AE0的差值,並根據結果設置標誌位SF、ZF、CF和OF的值。

(1)1234

(2)5D90

(3)9090

(4)EA04

(1)

0C754HSF=1ZF=0CF=1OF=0

(2)

12B0HSF=0ZF=0CF=0OF=0

(3)

45B0HSF=0ZF=0CF=0OF=1

(4)

9F24HSF=1ZF=0CF=0OF=0

3.17寫出執行以下計算的指令序列,其中X、Y、Z、R、W均為存放16位帶符號數單元的地址。

(1)Z

W+(Z-X)

(2)Z

W-(X+6)-(R+9)

(3)Z

(W*X)/(Y+6),R

餘數

(4)Z(W-X)/(5*Y)*22.

(1)

mov

ax,z

sub

ax,x

add

ax,w

mov

z,ax

(2)movax,w

mov

bx,xaddbx,6subax,bx

mov

bx,raddbx,9subax,bx

movz,ax

(3)

mov

ax,w

mov

bx,x

mul

bx;結果在(dx,ax)

mov

bx,y

addbx,6divbx;被除數

(dx,ax);AX中是商DX中是餘數

movz,ax

mov

r,dx

(4)你們自己做做邏輯指令:

邏輯運算指令

AND、OR、NOT、XOR、TEST

移位指令

SHL、SHR、SAL、SAR、

ROL、ROR、RCL、RCR邏輯非指令:NOTOPR*OPR不能為立即數執行操作:(OPR)

(OPR)*不影響標誌位

邏輯與指令:ANDDST,SRC執行操作:(DST)

(DST)

(SRC)邏輯或指令:ORDST,SRC執行操作:(DST)

(DST)

(SRC)異或指令:XORDST,SRC執行操作:(DST)

(DST)

(SRC)測試指令:TESTOPR1,OPR2

執行操作:(OPR1)

(OPR2)CFOFSFZFPFAF00***無定義

根據運算結果設置

邏輯運算指令例:遮罩AL的第0、1兩位

ANDAL,0FCH例:置AL的第5位為1

ORAL,20H

例:使AL的第0、1位變反

XORAL,3例:測試某些位是0是1

TESTAL,1JZEVEN

********

OR00100000**1*****

******01XOR00000011

******10

********

AND11111100******00********

AND000000010000000*邏輯左移SHLOPR,CNT邏輯右移SHROPR,CNT算術左移SALOPR,CNT(同邏輯左移)算術右移SAROPR,CNT

CF0

0CFCF

移位指令迴圈左移ROLOPR,CNT迴圈右移ROROPR,CNT帶進位迴圈左移RCLOPR,CNT帶進位迴圈右移RCROPR,CNTCF

CFCFCF注意:

*OPR可用除立即數以外的任何尋址方式*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL為例*條件標誌位:

CF=移入的數值

1CNT=1時,最高有效位的值發生變化0CNT=1時,最高有效位的值不變移位指令:

SF、ZF、PF根據移位結果設置,AF無定義迴圈移位指令:

不影響SF、ZF、PF、AFOF=例:(AX)=0012H,(BX)=0034H,把它們裝配成(AX)=1234H例:(BX)=84F0H(1)(BX)為無符號數,求

(BX)/2

SHRBX,1

;(BX)=4278H(2)(BX)為帶符號數,求

(BX)×2

SALBX,1

;(BX)=09E0H,OF=1(3)(BX)為帶符號數,求

(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;迴圈次數MOVCL,4;移位次數NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F

0000

(SP)(3)(BX)=84F0H,把

(BX)

中的16位數每4位壓入堆疊串處

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论