




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、不要幻想自己成為招聘會上的寵兒,當(dāng)你明白百分之七十的初中生都可以上大學(xué)時,你應(yīng)該明白人們不會去崇拜一個群體的大多數(shù)的。 8086指令系統(tǒng)教學(xué)重點n重點掌握常用指令功能及應(yīng)用常用傳送指令加減法指令邏輯運(yùn)算和移位指令控制轉(zhuǎn)移指令字符(串)輸入輸出功能調(diào)用什么是指令系統(tǒng)n計算機(jī)的指令系統(tǒng)就是指該計算機(jī)能夠執(zhí)行的全部指令的集合n每種計算機(jī)都有它支持的指令集合 n16位8086指令系統(tǒng)是intel 80 x86系列微處理器指令系統(tǒng)的基礎(chǔ)8086指令系統(tǒng)概述nintel 8086指令系統(tǒng)共有99條基本指令,可分成6個功能組 數(shù)據(jù)傳送類指令數(shù)據(jù)傳送類指令 算術(shù)運(yùn)算類指令算術(shù)運(yùn)算類指令 位操作類指令位操作類指
2、令 串操作類指令串操作類指令 控制轉(zhuǎn)移類指令控制轉(zhuǎn)移類指令 處理機(jī)控制類指令處理機(jī)控制類指令如何學(xué)習(xí)如何學(xué)習(xí)學(xué)習(xí)指令的注意事項n指令的功能該指令能夠?qū)崿F(xiàn)何種操作。通常指令助記符就是指令功能的英文單詞或其縮寫形式n指令支持的尋址方式該指令中的操作數(shù)可以采用何種尋址方式n指令對標(biāo)志的影響該指令執(zhí)行后是否對各個標(biāo)志位有影響,以及如何影響n其他方面該指令其他需要特別注意的地方,如指令執(zhí)行時的約定設(shè)置、必須預(yù)置的參數(shù)、隱含使用的寄存器等匯編語言指令格式n由4部分組成:標(biāo)號:指令助記符 目的操作數(shù),源操作數(shù) ;注釋 標(biāo)號表示該指令在主存中的邏輯地址標(biāo)號表示該指令在主存中的邏輯地址 每個指令助記符就代表一種
3、指令每個指令助記符就代表一種指令 目的和源操作數(shù)表示參與操作的對象目的和源操作數(shù)表示參與操作的對象 注釋是對該指令或程序段功能的說明注釋是對該指令或程序段功能的說明指令操作數(shù)的表達(dá)寄存器nr8任意一個8位通用寄存器ah ah al bhal bh bl bl chch cl cl dh dh dl dlnr16任意一個16位通用寄存器ax ax bxbx cx cx dx si dx si di di bpbp sp spnreg代表r8或r16nseg段寄存器 cs/ds/es/ss一定要熟悉噢!一定要熟悉噢!指令操作數(shù)的表達(dá)存儲器nm8一個8位存儲器操作數(shù)單元(所有主存尋址方式)nm16一
4、個16位存儲器操作數(shù)單元(所有主存尋址方式)nmem代表m8或m16一定要熟悉噢!一定要熟悉噢!指令操作數(shù)的表達(dá)立即數(shù)ni8一個8位立即數(shù)ni16一個16位立即數(shù)nimm代表i8或i16ndest目的操作數(shù)nsrc源操作數(shù)一定要熟悉噢!一定要熟悉噢!教學(xué)提示全面而準(zhǔn)確地理解每條指令的功能和應(yīng)用,是編寫匯編語言程序的關(guān)鍵1 數(shù)據(jù)傳送類指令n數(shù)據(jù)傳送是計算機(jī)中最基本、最重要的一種操作n傳送指令也是最常使用的一類指令n傳送指令把數(shù)據(jù)從一個位置傳送到另一個位置n除標(biāo)志寄存器傳送指令外,均不影響標(biāo)志位n重點掌握mov xchg xlat push pop leamov xchg xlat push po
5、p lea1.1 通用數(shù)據(jù)傳送指令n提供方便靈活的通用傳送操作n有3條指令movxchgxlat(1) 傳送指令mov(movemove)n把一個字節(jié)或字的操作數(shù)從源地址傳送至目的地址mov reg/mem,immmov reg/mem,imm;立即數(shù)送寄存器或主存;立即數(shù)送寄存器或主存例題例題1 1mov reg/mem/seg,regmov reg/mem/seg,reg;寄存器送(段)寄存器或主存寄存器送(段)寄存器或主存例題例題2 2mov reg/seg,memmov reg/seg,mem;主存送(段)寄存器;主存送(段)寄存器例題例題3 3mov reg/mem,segmov r
6、eg/mem,seg;段寄存器送寄存器或主存段寄存器送寄存器或主存例題例題4 4例1 1:立即數(shù)傳送mov al,4mov al,4;al4al4,字節(jié)傳送,字節(jié)傳送mov cx,mov cx,0 0ffhffh;cx00ffhcx00ffh,字傳送,字傳送mov si,200hmov si,200h;si0200hsi0200h,字傳送,字傳送mov mov byte ptr byte ptr si,si,0ah0ah;byte ptr byte ptr 說明是字節(jié)操作說明是字節(jié)操作mov mov word ptr word ptr si+2,si+2,0bh0bh;word ptr wor
7、d ptr 說明是字操作說明是字操作 注意立即數(shù)是字節(jié)量還是字量注意立即數(shù)是字節(jié)量還是字量 明確指令是字節(jié)操作還是字操作明確指令是字節(jié)操作還是字操作例2 2:寄存器傳送mov ax,bxmov ax,bx;axbxaxbx,字傳送,字傳送mov ah,almov ah,al;ahalahal,字節(jié)傳送,字節(jié)傳送mov ds,axmov ds,ax;dsaxdsax,字傳送,字傳送mov bx,almov bx,al;bxalbxal,字節(jié)傳送,字節(jié)傳送例3 3:存儲器傳送mov al,bxmov al,bxmov dx,bpmov dx,bp;dxss:bpdxss:bpmov es,simo
8、v es,si;esds:siesds:si 不存在存儲器向存儲器的傳送指令不存在存儲器向存儲器的傳送指令例4 4:段寄存器傳送mov si,dsmov si,dsmov ax,esmov ax,es;axesaxesmov ds,axmov ds,ax;dsaxesdsaxes 對段寄存器的操作有一些限制對段寄存器的操作有一些限制mov指令傳送功能mov也并非任意傳送立即數(shù)立即數(shù)段寄存器段寄存器cs ds es sscs ds es ss通用寄存器通用寄存器ax bx cx dxax bx cx dxbp sp si dibp sp si di存存儲儲器器非法傳送示例n兩個操作數(shù)的類型不一致
9、p例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或例如源操作數(shù)是字節(jié),而目的操作數(shù)是字;或相反相反n兩個操作數(shù)不能都是存儲器p傳送指令很靈活,但主存之間的直接傳送卻不傳送指令很靈活,但主存之間的直接傳送卻不允許允許n段寄存器的操作有一些限制p段寄存器屬專用寄存器,對他們的操作能力有段寄存器屬專用寄存器,對他們的操作能力有限限兩個操作數(shù)的類型要一致n絕大多數(shù)雙操作數(shù)指令,除非特別說明,目的操作數(shù)與源操作數(shù)必須類型一致,否則為非法指令mov al,050ah;非法指令:050ah為字,而al為字節(jié)n寄存器有明確的字節(jié)或字類型,有寄存器參與的指令其操作數(shù)類型就是寄存器的類型n對于存儲器單元與立即數(shù)同時作為操
10、作數(shù)的情況,必須顯式指明;byte ptr指示字節(jié)類型,word ptr指示字類型兩個操作數(shù)不能都是存儲器n8086指令系統(tǒng)不允許兩個操作數(shù)都是存儲單元(除串操作指令),要實現(xiàn)這種傳送,可通過寄存器間接實現(xiàn)mov ax,buffer1mov ax,buffer1;axbuffer1axbuffer1(將(將buffer1buffer1內(nèi)容送內(nèi)容送axax)mov buffer2,axmov buffer2,ax;buffer2axbuffer2ax;這里buffer1和buffer2是兩個字變量;實際表示直接尋址方式要小心段寄存器的操作n不允許立即數(shù)傳送給段寄存器mov ds,100hmov
11、ds,100h;非法指令:立即數(shù)不能傳送段寄存器;非法指令:立即數(shù)不能傳送段寄存器n不允許直接改變cs值mov cs,simov cs,si;不允許使用的指令;不允許使用的指令n不允許段寄存器之間的直接數(shù)據(jù)傳送mov ds,esmov ds,es;非法指令:不允許段寄存器間傳送;非法指令:不允許段寄存器間傳送(2) 交換指令xchg(exchangeexchange)n把兩個地方的數(shù)據(jù)進(jìn)行互換寄存器與寄存器之間對換數(shù)據(jù)寄存器與寄存器之間對換數(shù)據(jù)寄存器與存儲器之間對換數(shù)據(jù)寄存器與存儲器之間對換數(shù)據(jù)不能在存儲器與存儲器之間對換數(shù)據(jù)不能在存儲器與存儲器之間對換數(shù)據(jù)xchg reg,reg/memxc
12、hg reg,reg/mem;reg reg reg/memreg/mem例5 5:寄存器間交換mov ax,1234hmov ax,1234h;ax=1234hax=1234hmov bx,5678hmov bx,5678h;bx=5678hbx=5678hxchg ax,bxxchg ax,bx;ax=5678hax=5678h,bx=1234hbx=1234hxchg ah,alxchg ah,al;ax=7856hax=7856h例6 6:寄存器與存儲器交換xchg ax,2000hxchg ax,2000h ;字交換;字交換;等同于;等同于 xchg 2000h,axxchg 200
13、0h,axxchg al,2000h xchg al,2000h ;字節(jié)交換;字節(jié)交換;等同于;等同于 xchg 2000h,alxchg 2000h,al 換碼指令執(zhí)行前:換碼指令執(zhí)行前:在主存建立一個在主存建立一個字節(jié)量表格字節(jié)量表格,內(nèi)含要轉(zhuǎn)換成的目的代碼,內(nèi)含要轉(zhuǎn)換成的目的代碼表格首地址表格首地址存放于存放于bxbx,alal存放相對表格首地址的存放相對表格首地址的位移量位移量換碼指令執(zhí)行后:換碼指令執(zhí)行后:將將alal寄存器的內(nèi)容轉(zhuǎn)換為寄存器的內(nèi)容轉(zhuǎn)換為目標(biāo)代碼目標(biāo)代碼(3) 換碼指令xlat(translate)n將bx指定的緩沖區(qū)中、al指定的位移處的一個字節(jié)數(shù)據(jù)取出賦給alxl
14、atxlat;alds:bx+alalds:bx+al例7 7:代碼轉(zhuǎn)換mov bx,100hmov bx,100hmov al,03hmov al,03hxlatxlat 換碼指令沒有顯式的操作數(shù),但使用換碼指令沒有顯式的操作數(shù),但使用了了bxbx和和alal;因為換碼指令使用了隱含尋;因為換碼指令使用了隱含尋址方式址方式采用默認(rèn)操作數(shù)采用默認(rèn)操作數(shù)1.2 堆棧操作指令n堆棧是一個“后進(jìn)先出filo”(或說“先進(jìn)后出filo”)的主存區(qū)域,位于堆棧段中;ss段寄存器記錄其段地址n堆棧只有一個出口,即當(dāng)前棧頂;用堆棧指針寄存器sp指定n棧頂是地址較小的一端(低端),棧底不變堆棧和隊列n堆棧:按
15、照后進(jìn)先出(lifo)的原則組織的存儲器空間(棧)n隊列:按照先進(jìn)先出(fifo)的原則組織的存儲器空間lifofifo堆棧的操作n堆棧只有兩種基本操作:進(jìn)棧和出棧,對應(yīng)兩條指令push和poppushpush;進(jìn)棧指令先使堆棧;進(jìn)棧指令先使堆棧指針指針spsp減減2 2,然后把,然后把一個字操作數(shù)存入堆一個字操作數(shù)存入堆棧頂部棧頂部poppop;出棧指令把棧頂?shù)囊唬怀鰲V噶畎褩m數(shù)囊粋€字傳送至指定的目的個字傳送至指定的目的操作數(shù),然后堆棧指針操作數(shù),然后堆棧指針spsp加加2 2(1) 進(jìn)棧指令pushpush axpush axpush 2000hpush 2000hpush r16/m1
16、6/segpush r16/m16/seg;spspspsp2 2;ss:spr16/m16/segss:spr16/m16/seg(2) 出棧指令poppop axpop axpop 2000hpop 2000hpop r16/m16/segpop r16/m16/seg;r16/m16/segss:spr16/m16/segss:sp;spspspsp2 2堆棧的特點n堆棧操作的單位是字,進(jìn)棧和出棧只對字n字?jǐn)?shù)據(jù)從棧頂壓入和彈出時,都是低地址字節(jié)送低字節(jié),高地址字節(jié)送高字節(jié)n堆棧操作遵循先進(jìn)后出原則,但可用存儲器尋址方式隨機(jī)存取堆棧中的數(shù)據(jù)n堆棧常用來p臨時存放數(shù)據(jù)臨時存放數(shù)據(jù)p傳遞參數(shù)傳
17、遞參數(shù)p保存和恢復(fù)寄存器保存和恢復(fù)寄存器例8 8:現(xiàn)場保護(hù)恢復(fù)push axpush ax;進(jìn)入子程序后;進(jìn)入子程序后push bxpush bxpush dspush ds.pop dspop ds;返回主程序前;返回主程序前pop bxpop bxpop axpop ax1.3 標(biāo)志傳送指令n標(biāo)志寄存器傳送指令用來傳送標(biāo)志寄存器flags的內(nèi)容n標(biāo)志位操作指令直接對cf、df、if標(biāo)志進(jìn)行復(fù)位或置位:clc,stc,cld,std,cli,sti(1) 標(biāo)志寄存器傳送n標(biāo)志寄存器傳送指令用來傳送標(biāo)志寄存器flags的內(nèi)容,方便進(jìn)行對各個標(biāo)志位的直接操作n有2對4條指令p低低8 8位傳送:位
18、傳送:lahflahf和和sahfsahfp1616位傳送:位傳送:pushfpushf和和popfpopf標(biāo)志低字節(jié)進(jìn)出ah指令lahflahf;ahflags的低字節(jié)lahf指令將標(biāo)志寄存器的低字節(jié)送寄存器ahsf/zf/af/pf/cf狀態(tài)標(biāo)志位分別送入ah的第7/6/4/2/0位,而ah的第5/3/1位任意sahfsahf;flags的低字節(jié)ahsahf將ah寄存器內(nèi)容送flags的低字節(jié)用ah的第7/6/4/2/0位相應(yīng)設(shè)置sf/zf/af/ pf/cf標(biāo)志標(biāo)志寄存器進(jìn)出堆棧指令pushfpushf;spsp2;ss:spflagspushf指令將標(biāo)志寄存器的內(nèi)容壓入堆棧,同時棧頂指
19、針sp減2popfpopf;flagsss:sp;spsp2popf指令將棧頂字單元內(nèi)容送標(biāo)志寄存器,同時棧頂指針sp加2例9 9:置位單步標(biāo)志pushfpushf;保存全部標(biāo)志到堆棧;保存全部標(biāo)志到堆棧pop axpop ax;從堆棧中取出全部標(biāo)志;從堆棧中取出全部標(biāo)志or ax,0100hor ax,0100h ;設(shè)置;設(shè)置d d8 8=tf=1=tf=1,;axax其他位不變其他位不變push axpush ax;將;將axax壓入堆棧壓入堆棧popfpopf;flagsaxflagsax;將堆棧內(nèi)容取到標(biāo)志寄存器;將堆棧內(nèi)容取到標(biāo)志寄存器(2) 標(biāo)志位操作n標(biāo)志位操作指令直接對cf、d
20、f、if標(biāo)志進(jìn)行復(fù)位或置位,常用于特定的情況n對標(biāo)志位進(jìn)行設(shè)置的指令pclc stc cmcclc stc cmcpcld stdcld stdpcli sticli sti進(jìn)位標(biāo)志操作指令n用于任意設(shè)置進(jìn)位標(biāo)志clcclc;復(fù)位進(jìn)位標(biāo)志:cf0stcstc;置位進(jìn)位標(biāo)志:cf1cmccmc;求反進(jìn)位標(biāo)志:cfcf方向標(biāo)志操作指令串操作指令中,需要使用cldcld;復(fù)位方向標(biāo)志:df0stdstd;置位方向標(biāo)志:df1中斷標(biāo)志操作指令n在編寫中斷服務(wù)程序時,需要控制可屏蔽中斷的允許和禁止clicli;復(fù)位中斷標(biāo)志:df0stisti;置位中斷標(biāo)志:df11.4 地址傳送指令n地址傳送指令將存儲
21、器單元的邏輯地址送至指定的寄存器p有效地址傳送指令有效地址傳送指令 lealeap指針傳送指令指針傳送指令 ldslds和和leslesn注意不是獲取存儲器單元的內(nèi)容注意不是獲取存儲器單元的內(nèi)容有效地址傳送指令lea(load eaload ea)n將存儲器操作數(shù)的有效地址傳送至指定的16位寄存器中l(wèi)ea r16,memlea r16,mem;r16memr16mem的有效地址的有效地址eaea例1010:獲取有效地址mov bx,0400hmov bx,0400hmov si,3chmov si,3chlea bx,bx+si+0f62hlea bx,bx+si+0f62h;bxbx0400
22、h0400h003ch003ch0f62h0f62h139eh139eh 獲得主存單元的有效地址;不是物理獲得主存單元的有效地址;不是物理地址,也不是該單元的內(nèi)容地址,也不是該單元的內(nèi)容 可以實現(xiàn)計算功能可以實現(xiàn)計算功能主要用于傳送標(biāo)號的邏輯地址主要用于傳送標(biāo)號的邏輯地址指針傳送指令lds r16,mem;r16mem,;dsmem+2lds指令將主存中mem指定的字送至r16,并將mem的下一字送ds寄存器les r16,mem;r16mem,;esmem+2les指令將主存中mem指定的字送至r16,并將mem的下一字送es寄存器例1111:地址指針傳送mov word ptr 3060h
23、,0100hmov word ptr 3060h,0100hmov word ptr 3062h,1450hmov word ptr 3062h,1450hles di,3060hles di,3060h ;es=1450hes=1450h,di=0100hdi=0100hlds si,3060hlds si,3060h ;ds=1450hds=1450h,si=0100hsi=0100h mem mem指定主存的連續(xù)指定主存的連續(xù)4 4個字節(jié)作為邏輯個字節(jié)作為邏輯地址(地址(3232位的地址指針),送入位的地址指針),送入ds:r16ds:r16或或es:r16es:r161.5 輸入輸出指
24、令n8086通過輸入輸出指令與外設(shè)進(jìn)行數(shù)據(jù)交換;呈現(xiàn)給程序員的外設(shè)是端口(port)即i/o地址n8086用于尋址外設(shè)端口的地址線為16條,端口最多為21665536(64k)個,端口號為0000hffffhn每個端口用于傳送一個字節(jié)的外設(shè)數(shù)據(jù)輸入輸出尋址方式n8086的端口有64k個,無需分段,設(shè)計有兩種尋址方式v直接尋址直接尋址:只用于尋址:只用于尋址00h00hffhffh前前256256個端口,個端口,操作數(shù)操作數(shù)i8 i8表示端口號表示端口號v間接尋址間接尋址:可用于尋址全部:可用于尋址全部64k64k個端口,個端口,dxdx寄寄存器的值就是端口號存器的值就是端口號n對大于ffh的端
25、口只能采用間接尋址方式輸入指令inn將外設(shè)數(shù)據(jù)傳送給cpu內(nèi)的al/axin al,i8in al,i8;字節(jié)輸入:;字節(jié)輸入:ali/oali/o端口(端口(i8i8直接尋址)直接尋址)in al,dxin al,dx;字節(jié)輸入:;字節(jié)輸入:ali/oali/o端口(端口(dxdx間接尋址)間接尋址)in ax,i8in ax,i8;字輸入:;字輸入:axi/oaxi/o端口(端口(i8i8直接尋址)直接尋址)in ax,dxin ax,dx;字輸入:;字輸入:axi/oaxi/o端口(端口(dxdx間接尋址)間接尋址)例1212:輸入字;直接尋址,字節(jié)輸入;直接尋址,字節(jié)輸入in al,2
26、1hin al,21hmov ah,almov ah,alin al,20hin al,20h;直接尋址,字輸入;直接尋址,字輸入in ax,20hin ax,20h;間接尋址,字輸入;間接尋址,字輸入mov dx,20hmov dx,20hin ax,dxin ax,dx 兩 段 功 能 相兩 段 功 能 相同同 字 數(shù) 據(jù) 傳 送字 數(shù) 據(jù) 傳 送實際上實現(xiàn)了實際上實現(xiàn)了連續(xù)的兩個端連續(xù)的兩個端口地址的字節(jié)口地址的字節(jié)量傳送量傳送輸出指令outn將cpu內(nèi)的al/ax數(shù)據(jù)傳送給外設(shè)out i8,alout i8,al;字節(jié)輸出:;字節(jié)輸出:i/oi/o端口端口alal(i8i8直接尋址)直
27、接尋址)out dx,alout dx,al;字節(jié)輸出:;字節(jié)輸出:i/oi/o端口端口alal(dxdx間接尋址)間接尋址)out i8,axout i8,ax;字輸出:;字輸出:i/oi/o端口端口axax(i8i8直接尋址)直接尋址)out dx,axout dx,ax;字輸出:;字輸出:i/oi/o端口端口axax(dxdx間接尋址)間接尋址)例1313:輸出字節(jié);間接尋址,字節(jié)輸出;間接尋址,字節(jié)輸出mov dx,3fchmov dx,3fchmov al,80hmov al,80hout dx,alout dx,al2 算術(shù)運(yùn)算類指令n四則運(yùn)算是計算機(jī)經(jīng)常進(jìn)行的一種操作。算術(shù)運(yùn)算指
28、令實現(xiàn)二進(jìn)制(和十進(jìn)制)數(shù)據(jù)的四則運(yùn)算n請注意算術(shù)運(yùn)算類指令對標(biāo)志的影響p掌握:掌握:add/adc/incadd/adc/inc、sub/sbb/dec/ sub/sbb/dec/ neg/cmpneg/cmpp熟悉:熟悉:mul/imulmul/imul、div/idivdiv/idivp理解:理解:cbw/cwdcbw/cwd、daa/dasdaa/das、 aaa/ aaa/ aas/aam/aadaas/aam/aad加法指令addnadd指令將源與目的操作數(shù)相加,結(jié)果送到目的操作數(shù)nadd指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置add reg,imm/reg/memadd reg,imm/re
29、g/mem;regregregregimm/reg/memimm/reg/memadd mem,imm/regadd mem,imm/reg;memmemmemmemimm/regimm/reg例14a14a:加法運(yùn)算mov al,0fbhmov al,0fbh;al=0fbhal=0fbhadd al,07hadd al,07h;al=02hal=02hmov word ptr 200h,4652hmov word ptr 200h,4652h;200h=4652h200h=4652hmov bx,1fehmov bx,1feh;bx=1fehbx=1fehadd al,bladd al,b
30、l;al=00hal=00hadd word ptr bx+2,0f0f0hadd word ptr bx+2,0f0f0h;200h=3742h200h=3742h帶進(jìn)位加法指令adcnadc指令將源與目的操作數(shù)相加,再加上進(jìn)位cf標(biāo)志,結(jié)果送到目的操作數(shù)nadc指令按狀態(tài)標(biāo)志的定義相應(yīng)設(shè)置nadc指令主要與add配合,實現(xiàn)多精度加法運(yùn)算adc reg,imm/reg/memadc reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memcfcfadc mem,imm/regadc mem,imm/reg;memmemmemmemimm/regim
31、m/regcfcf例14b14b:雙字加法mov ax,4652hmov ax,4652h;ax=4652hax=4652hadd ax,0f0f0hadd ax,0f0f0h;ax=3742hax=3742h,cf=1cf=1mov dx,0234hmov dx,0234h;dx=0234hdx=0234hadc dx,0f0f0hadc dx,0f0f0h;dx=f325hdx=f325h,cf=0cf=0;dx.axdx.ax0234 4652h0234 4652hf0f0 f0f0hf0f0 f0f0hf325 3742hf325 3742h增量指令inc(incrementincre
32、ment)ninc指令對操作數(shù)加1(增量)ninc指令不影響進(jìn)位cf標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志inc reg/meminc reg/mem;reg/memreg/memreg/memreg/mem1 1inc bxinc bxinc byte ptr bxinc byte ptr bx減法指令sub(subtractsubtract)nsub指令將目的操作數(shù)減去源操作數(shù),結(jié)果送到目的操作數(shù)nsub指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志sub reg,imm/reg/memsub reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memsub mem,imm/
33、regsub mem,imm/reg;memmemmemmemimm/regimm/reg例15a15a:減法運(yùn)算mov al,0fbhmov al,0fbh;al=0fbhal=0fbhsub al,07hsub al,07h;al=0f4hal=0f4h,cfcf0 0mov word ptr 200h,4652hmov word ptr 200h,4652h;200h=4652h200h=4652hmov bx,1fehmov bx,1feh;bx=1fehbx=1fehsub al,blsub al,bl;al=al=0f6h0f6hsub word ptr bx+2,0f0f0hsu
34、b word ptr bx+2,0f0f0h;200h=5562h200h=5562h,cfcf1 1帶借位減法指令sbbnsbb指令將目的操作數(shù)減去源操作數(shù),再減去借位cf(進(jìn)位),結(jié)果送到目的操作數(shù)。nsbb指令按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志nsbb指令主要與sub配合,實現(xiàn)多精度減法運(yùn)算sbb reg,imm/reg/memsbb reg,imm/reg/mem;regregregregimm/reg/memimm/reg/memcfcfsbb mem,imm/regsbb mem,imm/reg;memmemmemmemimm/regimm/regcfcf例15b15b:雙字減法mov ax
35、,4652hmov ax,4652h;ax=4652hax=4652hsub ax,0f0f0hsub ax,0f0f0h;ax=5562hax=5562h,cf=1cf=1mov dx,0234hmov dx,0234h;dx=0234hdx=0234hsbb dx,0f0f0hsbb dx,0f0f0h;dx=1143hdx=1143h,cf=1cf=1;dx.axdx.ax0234 4652h0234 4652hf0f0 f0f0hf0f0 f0f0h1143 5562h1143 5562h減量指令dec(decrementdecrement)ndec指令對操作數(shù)減1(減量)ndec指令
36、不影響進(jìn)位cf標(biāo)志,按定義設(shè)置其他狀態(tài)標(biāo)志dec reg/memdec reg/mem;reg/memreg/memreg/memreg/mem1 1dec cxdec cxdec word ptr sidec word ptr si inc inc指令和指令和decdec指令都是單操作數(shù)指令指令都是單操作數(shù)指令 主要用于對計數(shù)器和地址指針的調(diào)整主要用于對計數(shù)器和地址指針的調(diào)整求補(bǔ)指令neg(negativenegative)nneg指令對操作數(shù)執(zhí)行求補(bǔ)運(yùn)算:用零減去操作數(shù),然后結(jié)果返回操作數(shù)n求補(bǔ)運(yùn)算也可以表達(dá)成:將操作數(shù)按位取反后加1nneg指令對標(biāo)志的影響與用零作減法的sub指令一樣ne
37、g reg/memneg reg/mem;reg/mem0reg/mem0reg/memreg/mem例1616:求補(bǔ)運(yùn)算mov ax,0ff64hmov ax,0ff64hneg alneg al;ax=ff9chax=ff9ch,of=0of=0、sf=1sf=1、zf=0zf=0、pf=1pf=1、cf=1cf=1sub al,9dhsub al,9dh;ax=ffffhax=ffffh,of=0of=0、sf=1sf=1、zf=0zf=0、pf=1pf=1、cf=1cf=1neg axneg ax;ax=0001hax=0001h,of=0of=0、sf=0sf=0、zf=0zf=0、
38、pf=0pf=0、cf=1cf=1dec aldec al;ax=0000hax=0000h,of=0of=0、sf=0sf=0、zf=1zf=1、pf=1pf=1、cf=1cf=1neg axneg ax;ax=0000hax=0000h,of=0of=0、sf=0sf=0、zf=1zf=1、pf=1pf=1、cf=0cf=0比較指令cmp(comparecompare)ncmp指令將目的操作數(shù)減去源操作數(shù),按照定義相應(yīng)設(shè)置狀態(tài)標(biāo)志ncmp指令執(zhí)行的功能與sub指令,但結(jié)果不回送目的操作數(shù)cmp reg,imm/reg/memcmp reg,imm/reg/mem;regregimm/reg
39、/memimm/reg/memcmp mem,imm/regcmp mem,imm/reg;memmemimm/regimm/reg例1717:比較alal與100100cmp al,100cmp al,100;al-100al-100jb belowjb below;al100al100,跳轉(zhuǎn)到,跳轉(zhuǎn)到belowbelow執(zhí)行執(zhí)行sub al,100sub al,100;al100al100,alal-100alal-100inc ahinc ah;ahah+1ahah+1below:below: . 執(zhí)行比較指令之后,可以根據(jù)標(biāo)志執(zhí)行比較指令之后,可以根據(jù)標(biāo)志判斷兩個數(shù)是否相等、大小關(guān)系等
40、判斷兩個數(shù)是否相等、大小關(guān)系等2.3 乘法指令mul r8/m8mul r8/m8;無符號字節(jié)乘法;無符號字節(jié)乘法;axalaxalr8/m8r8/m8mul r16/m16mul r16/m16;無符號字乘法;無符號字乘法;dx.axaxdx.axaxr16/m16r16/m16imul r8/m8imul r8/m8;有符號字節(jié)乘法;有符號字節(jié)乘法;axalaxalr8/m8r8/m8imul r16/m16imul r16/m16;有符號字乘法;有符號字乘法;dx.axaxdx.axaxr16/m16r16/m16乘法指令的功能n乘法指令分無符號和有符號乘法指令n乘法指令的源操作數(shù)顯式給
41、出,隱含使用另一個操作數(shù)ax和dxp字節(jié)量相乘:字節(jié)量相乘:alal與與r8/m8r8/m8相乘,得到相乘,得到1616位的結(jié)位的結(jié)果,存入果,存入axaxp字量相乘:字量相乘:axax與與r16/m16r16/m16相乘,得到相乘,得到3232位的結(jié)位的結(jié)果,其高字存入果,其高字存入dxdx,低字存入,低字存入axaxn乘法指令利用of和cf判斷乘積的高一半是否具有有效數(shù)值乘法指令對標(biāo)志的影響n乘法指令如下影響of和cf標(biāo)志:pmulmul指令指令若乘積的高一半(若乘積的高一半(ahah或或dxdx)為為0 0,則,則of=cf=0of=cf=0;否則;否則of=cf=1of=cf=1pim
42、ulimul指令指令若乘積的高一半是低一半若乘積的高一半是低一半的的符號擴(kuò)展符號擴(kuò)展,則,則of=cf=0of=cf=0;否則均為;否則均為1 1n乘法指令對其他狀態(tài)標(biāo)志沒有定義 對標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任對標(biāo)志沒有定義:指令執(zhí)行后這些標(biāo)志是任意的、不可預(yù)測(就是誰也不知道是意的、不可預(yù)測(就是誰也不知道是0 0還是還是1 1) 對標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)對標(biāo)志沒有影響:指令執(zhí)行不改變標(biāo)志狀態(tài)例1818:乘法運(yùn)算mov al,0b4hmov al,0b4h;al=b4h=180al=b4h=180mov bl,11hmov bl,11h;bl=11h=17bl=11h=
43、17mul blmul bl;ax=obf4h=3060ax=obf4h=3060;of=cf=1of=cf=1,axax高高8 8位不為位不為0 0mov al,0b4hmov al,0b4h;al=b4h=al=b4h=7676mov bl,11hmov bl,11h;bl=11h=17bl=11h=17imul blimul bl;ax=faf4h=ax=faf4h=12921292;of=cf=1of=cf=1,axax高高8 8位含有效數(shù)字位含有效數(shù)字2.4 除法指令div r8/m8div r8/m8;無符號字節(jié)除法:;無符號字節(jié)除法:alaxalaxr8/m8r8/m8的商,的商
44、,ahaxahaxr8/m8r8/m8的余數(shù)的余數(shù)div r16/m16div r16/m16;無符號字除法:;無符號字除法:;axdx.axaxdx.axr16/m16r16/m16的商,的商,dxdx.axdxdx.axr16/m16r16/m16的余數(shù)的余數(shù)idiv r8/m8idiv r8/m8;有符號字節(jié)除法:;有符號字節(jié)除法:alaxalaxr8/m8r8/m8的商,的商,ahaxahaxr8/m8r8/m8的余數(shù)的余數(shù)idiv r16/m16idiv r16/m16;有符號字除法:;有符號字除法:;axdx.axaxdx.axr16/m16r16/m16的商,的商,dxdx.ax
45、dxdx.axr16/m16r16/m16的余數(shù)的余數(shù)除法指令的功能n除法指令分無符號和有符號除法指令n除法指令的除數(shù)顯式給出,隱含使用另一個操作數(shù)ax和dx作為被除數(shù)p字節(jié)量除法:字節(jié)量除法:axax除以除以r8/m8r8/m8,8 8位商存入位商存入alal,8 8位余數(shù)存入位余數(shù)存入ahahp字量除法:字量除法:dx.axdx.ax除以除以r16/m16r16/m16,1616位商存入位商存入axax,1616位余數(shù)存入位余數(shù)存入dxdxn除法指令對標(biāo)志沒有定義n除法指令會產(chǎn)生結(jié)果溢出除法錯中斷n當(dāng)被除數(shù)遠(yuǎn)大于除數(shù)時,所得的商就有可能超出它所能表達(dá)的范圍。如果存放商的寄存器al/ax不能
46、表達(dá),便產(chǎn)生溢出,8086cpu中就產(chǎn)生編號為0的內(nèi)部中斷除法錯中斷p對對divdiv指令,除數(shù)為指令,除數(shù)為0 0,或者在字節(jié)除時,或者在字節(jié)除時商超過商超過8 8位,或者在字除時商超過位,或者在字除時商超過1616位,位,則發(fā)生除法溢出則發(fā)生除法溢出p對對idividiv指令,除數(shù)為指令,除數(shù)為0 0,或者在字節(jié)除時,或者在字節(jié)除時商不在商不在-128-128127127范圍內(nèi),或者在字除時商范圍內(nèi),或者在字除時商不在不在-32768-327683276732767范圍內(nèi),則發(fā)生除法溢范圍內(nèi),則發(fā)生除法溢出出例1919:除法運(yùn)算mov ax,0400hmov ax,0400h;ax=400
47、h=1024ax=400h=1024mov bl,0b4hmov bl,0b4h;bl=b4h=180bl=b4h=180div bldiv bl;商;商alal05h05h5 5;余數(shù);余數(shù)ahah7ch7ch124124mov ax,0400hmov ax,0400h;ax=400h=1024ax=400h=1024mov bl,0b4hmov bl,0b4h;bl=b4h=bl=b4h=7676idiv blidiv bl;商;商alalf3hf3h1313;余數(shù);余數(shù)ahah24h24h36362.5 符號擴(kuò)展指令cbw;al的符號擴(kuò)展至ah;如al的最高有效位是0,則ah00;al的
48、最高有效位為1,則ahffh。al不變cwd;ax的符號擴(kuò)展至dx;如ax的最高有效位是0,則dx00;ax的最高有效位為1,則dxffffh。ax不變符號擴(kuò)展指令常用于獲得倍長的數(shù)據(jù)符號擴(kuò)展指令常用于獲得倍長的數(shù)據(jù) 不影響標(biāo)志位不影響標(biāo)志位符號擴(kuò)展的概念n符號擴(kuò)展是指用一個操作數(shù)的符號位(即最高位)形成另一個操作數(shù),后一個操作數(shù)的各位是全0(正數(shù))或全1(負(fù)數(shù))。符號擴(kuò)展不改變數(shù)據(jù)大小p對于數(shù)據(jù)對于數(shù)據(jù)64h64h(表示數(shù)據(jù)(表示數(shù)據(jù)100100),其最高位),其最高位d d7 7為為0 0,符號擴(kuò)展后高,符號擴(kuò)展后高8 8位都是位都是0 0,成為,成為00640064h h(仍表(仍表示數(shù)
49、據(jù)示數(shù)據(jù)100100)p對于數(shù)據(jù)對于數(shù)據(jù)ff00hff00h(表示有符號數(shù)(表示有符號數(shù)256256),其最),其最高位高位d d1515為為1 1,符號擴(kuò)展后高,符號擴(kuò)展后高1616位都是位都是1 1,成為,成為ffffff00hffffff00h(仍表示有符號數(shù)(仍表示有符號數(shù)256256)例2020:符號擴(kuò)展mov al,80hmov al,80h;al=80hal=80hcbwcbw;ax=ff80hax=ff80hadd al,255add al,255;al=7fhal=7fhcbwcbw;ax=007fhax=007fh例2121:axaxbxbxcwdcwd;dx.axaxdx
50、.axaxidiv bxidiv bx;axdx.axaxdx.axbxbx 利用符號擴(kuò)展指令得到除法指令所利用符號擴(kuò)展指令得到除法指令所需要的倍長于除數(shù)的被除數(shù)需要的倍長于除數(shù)的被除數(shù) 對無符號數(shù)除法應(yīng)該采用直接使高對無符號數(shù)除法應(yīng)該采用直接使高8 8位或高位或高1616位清位清0 0的方法,獲得倍長的被的方法,獲得倍長的被除數(shù)除數(shù)2.6 十進(jìn)制調(diào)整指令q壓縮bcd碼就是通常的8421碼;它用4個二進(jìn)制位表示一個十進(jìn)制位,一個字節(jié)可以表示兩個十進(jìn)制位,即0099q非壓縮bcd碼用8個二進(jìn)制位表示一個十進(jìn)制位,只用低4個二進(jìn)制位表示一個十進(jìn)制位09,高4位任意,通常默認(rèn)為0十進(jìn)制數(shù)調(diào)整指令對二
51、進(jìn)制運(yùn)算的結(jié)果進(jìn)十進(jìn)制數(shù)調(diào)整指令對二進(jìn)制運(yùn)算的結(jié)果進(jìn)行十進(jìn)制調(diào)整,以得到十進(jìn)制的運(yùn)算結(jié)果行十進(jìn)制調(diào)整,以得到十進(jìn)制的運(yùn)算結(jié)果分成壓縮分成壓縮bcdbcd碼和非壓縮碼和非壓縮bcdbcd碼調(diào)整碼調(diào)整bcd碼(binary coded decimalbinary coded decimal)n二進(jìn)制編碼的十進(jìn)制數(shù):一位十進(jìn)制數(shù)用4位二進(jìn)制編碼來表示n8086支持壓縮bcd碼和非壓縮bcd碼的調(diào)整運(yùn)算真值864二進(jìn)制編碼08h40h壓縮bcd碼08h64h非壓縮bcd碼08h0604h壓縮bcd碼加、減調(diào)整指令(add al,i8/r8/m8)(adc al,i8/r8/m8)daa;al將al的加
52、和調(diào)整為壓縮bcd碼(sub al,i8/r8/m8)(sbb al,i8/r8/m8)das;al將al的減差調(diào)整為壓縮bcd碼使用使用daadaa或或dasdas指令前,應(yīng)先執(zhí)行以指令前,應(yīng)先執(zhí)行以alal為目的操作數(shù)的加法為目的操作數(shù)的加法或減法指令或減法指令daadaa和和dasdas指令對指令對ofof標(biāo)志無定義,按結(jié)果影響其他標(biāo)志,例標(biāo)志無定義,按結(jié)果影響其他標(biāo)志,例如如cfcf反映壓縮反映壓縮bcdbcd碼相加或減的進(jìn)位或借位狀態(tài)碼相加或減的進(jìn)位或借位狀態(tài)例22a22a:壓縮bcdbcd加法mov al,68hmov al,68h;al=68hal=68h,壓縮,壓縮bcdbcd
53、碼表示真值碼表示真值6868mov bl,28hmov bl,28h;bl=28hbl=28h,壓縮,壓縮bcdbcd碼表示真值碼表示真值2828add al,bladd al,bl;二進(jìn)制加法:;二進(jìn)制加法:al=68h+28h=90hal=68h+28h=90hdaadaa;十進(jìn)制調(diào)整:;十進(jìn)制調(diào)整:al=96hal=96h;實現(xiàn)壓縮;實現(xiàn)壓縮bcdbcd碼加法:碼加法:686828289696例22b22b:壓縮bcdbcd減法mov al,68hmov al,68h;al=68hal=68h,壓縮,壓縮bcdbcd碼表示真值碼表示真值6868mov bl,28hmov bl,28h;b
54、l=28hbl=28h,壓縮,壓縮bcdbcd碼表示真值碼表示真值2828sub al,blsub al,bl;二進(jìn)制減法:;二進(jìn)制減法:al=68h-28h=40hal=68h-28h=40hdasdas;十進(jìn)制調(diào)整:;十進(jìn)制調(diào)整:al=40hal=40h;實現(xiàn)壓縮;實現(xiàn)壓縮bcdbcd碼加法:碼加法:68-2868-284040例2323:壓縮bcdbcd減法mov ax,1234hmov ax,1234hmov bx,4612hmov bx,4612hsub al,blsub al,bldasdas;34-1234-122222,cfcf0 0 xchg al,ahxchg al,ahs
55、bb al,bhsbb al,bhdasdas;12-4612-466666,cf=1cf=1xchg al,ahxchg al,ah ;1 12341 12344612461266226622非壓縮bcd碼加、減調(diào)整指令(add al,i8/r8/m8add al,i8/r8/m8)(adc al,i8/r8/m8adc al,i8/r8/m8)aaaaaa;alal將將alal的加和調(diào)整為的加和調(diào)整為非壓縮非壓縮bcdbcd碼碼;ahahahah調(diào)整的進(jìn)位調(diào)整的進(jìn)位(sub al,i8/r8/m8sub al,i8/r8/m8)(sbb al,i8/r8/m8sbb al,i8/r8/m8
56、)aasaas;alal將將alal的減差調(diào)整的減差調(diào)整為非壓縮為非壓縮bcdbcd碼碼;ahahahah調(diào)整的借位調(diào)整的借位使用使用aaaaaa或或aasaas指令前,應(yīng)先執(zhí)行以指令前,應(yīng)先執(zhí)行以alal為目的操作數(shù)的加法為目的操作數(shù)的加法或減法指令或減法指令aaaaaa和和aasaas指令在調(diào)整中產(chǎn)生了進(jìn)位或借位,則指令在調(diào)整中產(chǎn)生了進(jìn)位或借位,則ahah要加上進(jìn)要加上進(jìn)位或減去借位,同時位或減去借位,同時cf=af=1cf=af=1,否則,否則cf=af=0cf=af=0;它們對其他;它們對其他標(biāo)志無定義標(biāo)志無定義例24a24a:非壓縮bcdbcd加mov ax,0608hmov ax,0608h;ax=0608hax=0608h,非壓縮,非壓縮bcdbcd碼表示真值碼表示真值6868mov bl,09hmov bl,09h;bl=09hbl=09h,非壓縮,非壓縮bcdbcd碼表示真值碼表示真值9 9add al,bladd al,bl;二進(jìn)制加法:;二進(jìn)制加法:al=08h+09h=11hal=08h+09h=11haaaaaa;十進(jìn)制調(diào)整:;十進(jìn)制調(diào)整:ax=0707hax=0707h;實現(xiàn)非壓縮;實現(xiàn)非壓縮bcdbcd碼加法:碼加法:68689 97777例24b24b:非壓縮b
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 目視化管理與產(chǎn)品開發(fā)考核試卷
- 銻冶煉生產(chǎn)數(shù)據(jù)分析與應(yīng)用技巧考核試卷
- 管道工程法律法規(guī)政策深度研究與探討考核試卷
- 鐵路軌道電路調(diào)試技術(shù)考核試卷
- 航空航天器材料與工藝考核試卷
- 新生兒黃疸檢測的臨床意義
- 肺部真菌感染診斷與治療進(jìn)展
- 轉(zhuǎn)運(yùn)呼吸機(jī)操作規(guī)范
- 防呼吸道傳染病科普講座
- 視網(wǎng)膜動脈阻塞性疾病
- 2025榆林能源集團(tuán)有限公司招聘工作人員(473人)筆試參考題庫附帶答案詳解
- 成人教育代理協(xié)議書
- 合同式婚姻協(xié)議書
- 1.6 人教統(tǒng)編版語文一年級下冊第六單元教材解讀課件
- 2025高中思想政治教師課標(biāo)考試模擬試卷附參考答案(三套)
- 2024年交通系統(tǒng)建模與仿真技術(shù)試題及答案
- 2025年中考《道德與法治》非選擇題答題要點匯編(全)
- 調(diào)查與研究能力試題及答案
- 2025安全生產(chǎn)月安全生產(chǎn)隱患查找培訓(xùn)課件
- 北方華創(chuàng)招聘考試真題2024
- 兵團(tuán)基礎(chǔ)知識試題及答案
評論
0/150
提交評論