匯編語言指令系統_第1頁
匯編語言指令系統_第2頁
匯編語言指令系統_第3頁
匯編語言指令系統_第4頁
匯編語言指令系統_第5頁
已閱讀5頁,還剩52頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第4章

8086/8088指令系統什么是指令系統計算機的指令系統就是指該計算機能夠執行的全部指令的集合每種計算機都有它支持的指令集合

16位8086指令系統是Intel80x86系列微處理器指令系統的基礎8086指令系統概述Intel8086指令系統共有117條基本指令,可分成6個功能組①數據傳送類指令②算術運算類指令③位操作類指令④串操作類指令⑤控制轉移類指令⑥處理機控制類指令如何學習教學重點重點掌握常用指令功能及應用常用傳送指令加減法指令邏輯運算和移位指令控制轉移指令字符(串)輸入輸出功能調用學習指令的注意事項指令的功能——該指令能夠實現何種操作。通常指令助記符就是指令功能的英文單詞或其縮寫形式指令支持的尋址方式——該指令中的操作數可以采用何種尋址方式指令對標志的影響——該指令執行后是否對各個標志位有影響,以及如何影響其他方面——該指令其他需要特別注意的地方,如指令執行時的約定設置、必須預置的參數、隱含使用的寄存器等匯編語言指令格式由4部分組成:標號:指令助記符目的操作數,源操作數 ;注釋

標號表示該指令在主存中的邏輯地址

每個指令助記符就代表一種指令

目的和源操作數表示參與操作的對象

注釋是對該指令或程序段功能的說明教學提示全面而準確地理解每條指令的功能和應用,是編寫匯編語言程序的關鍵逐個展開指令4.1數據傳送類指令數據傳送是計算機中最基本、最重要的一種操作傳送指令也是最常使用的一類指令傳送指令把數據從一個位置傳送到另一個位置除標志寄存器傳送指令外,均不影響標志位重點掌握MOVXCHGXLATPUSHPOPLEA4.1.1通用數據傳送指令提供方便靈活的通用傳送操作有3條指令MOVXCHGXLATMOVXCHGXLAT1.傳送指令MOV(move)把一個字節或字的操作數從源地址傳送至目的地址MOVreg/mem,imm;立即數送寄存器或主存MOV例題4.1MOVreg/mem/seg,reg;寄存器送(段)寄存器或主存例題4.2MOVreg/seg,mem;主存送(段)寄存器例題4.3MOVreg/mem,seg;段寄存器送寄存器或主存例題4.5例4.1:立即數傳送moval,4 ;al←4,字節傳送movcx,0ffh ;cx←00ffh,字傳送movsi,200h ;si←0200h,字傳送movbyteptr[si],0ah;byteptr說明是字節操作movwordptr[si+2],0bh;wordptr說明是字操作注意立即數是字節量還是字量明確指令是字節操作還是字操作MOV例4.2:寄存器傳送movax,bx ;ax←bx,字傳送movah,al ;ah←al,字節傳送movds,ax ;ds←ax,字傳送mov[bx],al ;[bx]←al,字節傳送MOV例4.3:存儲器傳送moval,[bx]movdx,[bp] ;dx←ss:[bp]moves,[si] ;es←ds:[si]不存在存儲器向存儲器的傳送指令MOV例4.5:段寄存器傳送mov[si],dsmovax,es ;ax←esmovds,ax ;ds←ax←es對段寄存器的操作有一些限制MOVMOV指令傳送功能MOV也并非任意傳送立即數段寄存器CSDSESSS通用寄存器AXBXCXDXBPSPSIDI存儲器非法傳送種種兩個操作數的類型不一致例如源操作數是字節,而目的操作數是字;或相反兩個操作數不能都是存儲器傳送指令很靈活,但主存之間的直接傳送卻不允許段寄存器的操作有一些限制段寄存器屬專用寄存器,對他們的操作能力有限示例示例示例兩個操作數的類型要一致絕大多數雙操作數指令,除非特別說明,目的操作數與源操作數必須類型一致,否則為非法指令MOVAL,050AH;非法指令:050Ah為字,而AL為字節寄存器有明確的字節或字類型,有寄存器參與的指令其操作數類型就是寄存器的類型對于存儲器單元與立即數同時作為操作數的情況,必須顯式指明;byteptr指示字節類型,wordptr指示字類型兩個操作數不能都是存儲器8086指令系統不允許兩個操作數都是存儲單元(除串操作指令),要實現這種傳送,可通過寄存器間接實現movax,buffer1;ax←buffer1(將buffer1內容送ax)movbuffer2,ax;buffer2←ax;這里buffer1和buffer2是兩個字變量;實際表示直接尋址方式要小心段寄存器的操作不允許立即數傳送給段寄存器MOVDS,100H;非法指令:立即數不能傳送段寄存器不允許直接改變CS值MOVCS,[SI] ;不允許使用的指令不允許段寄存器之間的直接數據傳送MOVDS,ES;非法指令:不允許段寄存器間傳送2.交換指令XCHG(exchange)把兩個地方的數據進行互換寄存器與寄存器之間對換數據寄存器與存儲器之間對換數據不能在存儲器與存儲器之間對換數據XCHGXCHGreg,reg/mem;regreg/mem例題4.7例題4.6例4.6:寄存器間交換movax,1234h ;ax=1234hmovbx,5678h ;bx=5678hxchgax,bx;ax=5678h,bx=1234hxchgah,al ;ax=7856hXCHG例4.7:寄存器與存儲器交換xchgax,[2000h] ;字交換;等同于xchg[2000h],axxchgal,[2000h] ;字節交換;等同于xchg[2000h],al

XCHG換碼指令執行前:在主存建立一個字節量表格,內含要轉換成的目的代碼表格首地址存放于BX,AL存放相對表格首地址的位移量換碼指令執行后:將AL寄存器的內容轉換為目標代碼3.換碼指令XLAT(translate)將BX指定的緩沖區中、AL指定的位移處的一個字節數據取出賦給ALXLATXLAT ;al←ds:[bx+al]例題4.8例4.8:代碼轉換movbx,100hmoval,03hxlat換碼指令沒有顯式的操作數,但使用了BX和AL;因為換碼指令使用了隱含尋址方式——采用默認操作數XLAT4.1.2堆棧操作指令堆棧是一個“后進先出FILO”(或說“先進后出FILO”)的主存區域,位于堆棧段中;SS段寄存器記錄其段地址堆棧只有一個出口,即當前棧頂;用堆棧指針寄存器SP指定棧頂是地址較小的一端(低端),棧底不變第4章堆棧和隊列堆棧:按照后進先出(LIFO)的原則組織的存儲器空間(棧)隊列:按照先進先出(FIFO)的原則組織的存儲器空間LIFOFIFO堆棧的操作堆棧只有兩種基本操作:進棧和出棧,對應兩條指令PUSH和POPPUSH;進棧指令先使堆棧指針SP減2,然后把一個字操作數存入堆棧頂部POP;出棧指令把棧頂的一個字傳送至指定的目的操作數,然后堆棧指針SP加2第4章1.進棧指令PUSHPUSHpushaxpush[2000h]PUSHr16/m16/seg;SP←SP-2;SS:[SP]←r16/m16/seg第4章2.出棧指令POPpopaxpop[2000h]POPr16/m16/seg;r16/m16/seg←SS:[SP];SP←SP+2POP堆棧的特點堆棧操作的單位是字,進棧和出棧只對字量字量數據從棧頂壓入和彈出時,都是低地址字節送低字節,高地址字節送高字節堆棧操作遵循先進后出原則,但可用存儲器尋址方式隨機存取堆棧中的數據堆棧常用來臨時存放數據傳遞參數保存和恢復寄存器例題4.11例4.11:現場保護恢復pushax ;進入子程序后pushbxpushds...popds ;返回主程序前popbxpopax4.1.3標志傳送指令標志寄存器傳送指令用來傳送標志寄存器FLAGS的內容標志位操作指令直接對CF、DF、IF標志進行復位或置位1.標志寄存器傳送標志寄存器傳送指令用來傳送標志寄存器FLAGS的內容,方便進行對各個標志位的直接操作有2對4條指令低8位傳送:LAHF和SAHF16位傳送:PUSHF和POPF標志低字節進出AH指令LAHF;AH←FLAGS的低字節LAHF指令將標志寄存器的低字節送寄存器AHSF/ZF/AF/PF/CF狀態標志位分別送入AH的第7/6/4/2/0位,而AH的第5/3/1位任意SAHF;FLAGS的低字節←AHSAHF將AH寄存器內容送FLAGS的低字節用AH的第7/6/4/2/0位相應設置SF/ZF/AF/PF/CF標志第4章標志寄存器進出堆棧指令PUSHF;SP←SP-2;SS:[SP]←FLAGSPUSHF指令將標志寄存器的內容壓入堆棧,同時棧頂指針SP減2POPF;FLAGS←SS:[SP];SP←SP+2POPF指令將棧頂字單元內容送標志寄存器,同時棧頂指針SP加2例題4.12第4章例4.12:置位單步標志pushf ;保存全部標志到堆棧popax ;從堆棧中取出全部標志orax,0100h ;設置D8=TF=1,

;ax其他位不變pushax ;將ax壓入堆棧popf ;FLAGS←AX;將堆棧內容取到標志寄存器2.標志位操作標志位操作指令直接對CF、DF、IF標志進行復位或置位,常用于特定的情況對標志位進行設置的指令CLCSTCCMCCLDSTDCLISTI進位標志操作指令用于任意設置進位標志CLC

;復位進位標志:CF←0STC

;置位進位標志:CF←1CMC

;求反進位標志:CF←~CF方向標志操作指令串操作指令中,需要使用CLD

;復位方向標志:DF←0STD

;置位方向標志:DF←1中斷標志操作指令在編寫中斷服務程序時,需要控制可屏蔽中斷的允許和禁止CLI

;復位中斷標志:DF←0STI

;置位中斷標志:DF←14.1.4地址傳送指令地址傳送指令將存儲器單元的邏輯地址送至指定的寄存器有效地址傳送指令LEA指針傳送指令LDS和LES注意不是獲取存儲器單元的內容有效地址傳送指令LEA(loadEA)將存儲器操作數的有效地址傳送至指定的16位寄存器中例題4.13LEAr16,mem;r16←mem的有效地址EALEA例4.13:獲取有效地址movbx,0400hmovsi,3chleabx,[bx+si+0f62h];BX=0400h+003ch+0f62h=139EH獲得主存單元的有效地址;不是物理地址,也不是該單元的內容可以實現計算功能LEA指針傳送指令LDSr16,mem;r16←mem,;DS←mem+2LDS指令將主存中mem指定的字送至r16,并將mem的下一字送DS寄存器LESr16,mem;r16←mem,;ES←mem+2LES指令將主存中mem指定的字送至r16,并將mem的下一字送ES寄存器例題4.14第4章例4.14:地址指針傳送movwordptr[3060h],0100hmovwordptr[3062h],1450hlesdi,[3060h] ;es=1450h,di=0100hldssi,[3060h] ;ds=1450h,si=0100h

mem指定主存的連續4個字節作為邏輯地址(32位的地址指針),送入DS:r16或ES:r164.1.5輸入輸出指令8086通過輸入輸出指令與外設進行數據交換;呈現給程序員的外設是端口(Port)即I/O地址8086用于尋址外設端口的地址線為16條,端口最多為216=65536(64K)個,端口號為0000H~FFFFH每個端口用于傳送一個字節的外設數據輸入輸出尋址方式8086的端口有64K個,無需分段,設計有兩種尋址方式直接尋址:只用于尋址00H~FFH前256個端口,操作數i8表示端口號間接尋址:可用于尋址全部64K個端口,DX寄存器的值就是端口號對大于FFH的端口只能采用間接尋址方式輸入指令IN將外設數據傳送給CPU內的AL/AXINAL,i8;字節輸入:AL←I/O端口(i8直接尋址)INAL,DX;字節輸入:AL←I/O端口(DX間接尋址)INAX,i8;字輸入:AX←I/O端口(i8直接尋址)INAX,DX;字輸入:AX←I/O端口(DX間接尋址)IN例題4.15例4.15:輸入字量;直接尋址,字節量輸入inal,21hmovah,alinal,20h;直接尋址,字量輸入inax,20h;間接尋址,字量輸入movdx,20hinax,dx兩段功能相同字量數據傳送實際上實現了連續的兩個端口地址的字節量傳送IN輸出指令OUT將CPU內的AL/AX數據傳送給外設OUTi8,AL;字節輸出:I/O端口←AL(i8直接尋址)OUTDX,AL;字節輸出:I/O端口←AL(DX間接尋址)OUTi8,AX;字輸出:I/O端口←AX(i8直接尋址)OUTDX,AX;字輸出:I/O端口←AX(DX間接尋址)OUT例題4.16例4.16:輸出字節量;間接尋址,字節量輸出movdx,3fchmoval,80houtdx,alOUT4.2算術運算類指令四則運算是計算機經常進行的一種操作。算術運算指令實現二進制(和十進制)數據的四則運算請注意算術運算類指令對標志的影響掌握:ADD/ADC/INC、SUB/SBB/DEC/NEG/CMP熟悉:MUL/IMUL、DIV/IDIV理解:CBW/CWD、DAA/DAS、AAA/AAS/AAM/AAD加法指令ADDADD指令將源與目的操作數相加,結果送到目的操作數ADD指令按狀態標志的定義相應設置ADDADDreg,imm/reg/mem ;reg←reg+imm/reg/memADDmem,imm/reg ;mem←mem+imm/reg例題4.17a例4.17a:加法運算moval,0fbh ;al=0fbhaddal,07h ;al=02hmovwordptr[200h],4652h;[200h]=4652hmovbx,1feh ;bx=1fehaddal,bl ;al=00haddwordptr[bx+2],0f0f0h;[200h]=3742hADD帶進位加法指令ADCADC指令將源與目的操作數相加,再加上進位CF標志,結果送到目的操作數ADC指令按狀態標志的定義相應設置ADC指令主要與ADD配合,實現多精度加法運算ADCADCreg,imm/reg/mem ;reg←reg+imm/reg/mem+CFADCmem,imm/reg ;mem←mem+imm/reg+CF例題4.17b例4.17b:雙字加法movax,4652h ;ax=4652haddax,0f0f0h ;ax=3742h,CF=1movdx,0234h ;dx=0234hadcdx,0f0f0h ;dx=f325h,CF=0;DX.AX=02344652H +F0F0F0F0H =F3253742HADC增量指令INC(increment)INC指令對操作數加1(增量)INC指令不影響進位CF標志,按定義設置其他狀態標志INCINCreg/mem;reg/mem←reg/mem+1incbxincbyteptr[bx]減法指令SUB(subtract)SUB指令將目的操作數減去源操作數,結果送到目的操作數SUB指令按照定義相應設置狀態標志SUBSUBreg,imm/reg/mem ;reg←reg-imm/reg/memSUBmem,imm/reg ;mem←mem-imm/reg例題4.18a例4.18a:減法運算moval,0fbh ;al=0fbhsubal,07h ;al=0f4h,CF=0movwordptr[200h],4652h;[200h]=4652hmovbx,1feh ;bx=1fehsubal,bl ;al=0f6hsubwordptr[bx+2],0f0f0h;[200h]=5562h,CF=1SUB帶借位減法指令SBBSBB指令將目的操作數減去源操作數,再減去借位CF(進位),結果送到目的操作數。SBB指令按照定義相應設置狀態標志SBB指令主要與SUB配合,實現多精度減法運算SBBSBBreg,imm/reg/mem ;reg←reg-imm/reg/mem-CFSBBmem,imm/reg ;mem←mem-imm/reg-CF例題4.18b例4.18b:雙字減法movax,4652h ;ax=4652hsubax,0f0f0h ;ax=5562h,CF=1movdx,0234h ;dx=0234hsbbdx,0f0f0h ;dx=1143h,CF=1;DX.AX=02344652H -F0F0F0F0H =11435562HSBB減量指令DEC(decrement)DEC指令對操作數減1(減量)DEC指令不影響進位CF標志,按定義設置其他狀態標志DECDECreg/mem;reg/mem←reg/mem-1deccxdecwordptr[si]

INC指令和DEC指令都是單操作數指令主要用于對計數器和地址指針的調整求補指令NEG(negative)NEG指令對操作數執行求補運算:用零減去操作數,然后結果返回操作數求補運算也可以表達成:將操作數按位取反后加1NEG指令對標志的影響與用零作減法的SUB指令一樣NEGNEGreg/mem;reg/mem←0-reg/mem例題4.19例4.19:求補運算movax,0ff64hnegal;ax=ff9ch,OF=0、SF=1、ZF=0、PF=1、CF=1subal,9dh;ax=ffffh,OF=0、SF=1、ZF=0、PF=1、CF=1negax;ax=0001h,OF=0、SF=0、ZF=0、PF=0、CF=1decal;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=1negax;ax=0000h,OF=0、SF=0、ZF=1、PF=1、CF=0NEG比較指令CMP(compare)CMP指令將目的操作數減去源操作數,按照定義相應設置狀態標志CMP指令執行的功能與SUB指令,但結果不回送目的操作數CMPreg,imm/reg/mem ;reg-imm/reg/memCMPmem,imm/reg ;mem-imm/reg例題4.20CMP例4.20:比較AL與100

cmpal,100

;al-100 jbbelow

;al<100,跳轉到below執行 subal,100

;al≥100, al←al-100 incah

;ah←ah+1below: ...執行比較指令之后,可以根據標志判斷兩個數是否相等、大小關系等CMP4.2.3乘法指令MULr8/m8;無符號字節乘法;AX←AL×r8/m8MULr16/m16;無符號字乘法;DX.AX←AX×r16/m16IMULr8/m8;有符號字節乘法;AX←AL×r8/m8IMULr16/m16;有符號字乘法;DX.AX←AX×r16/m16例題4.21說明第4章乘法指令的功能乘法指令分無符號和有符號乘法指令乘法指令的源操作數顯式給出,隱含使用另一個操作數AX和DX字節量相乘:AL與r8/m8相乘,得到16位的結果,存入AX字量相乘:AX與r16/m16相乘,得到32位的結果,其高字存入DX,低字存入AX乘法指令利用OF和CF判斷乘積的高一半是否具有有效數值乘法指令對標志的影響乘法指令如下影響OF和CF標志:MUL指令——若乘積的高一半(AH或DX)為0,則OF=CF=0;否則OF=CF=1IMUL指令——若乘積的高一半是低一半的符號擴展,則OF=CF=0;否則均為1乘法指令對其他狀態標志沒有定義對標志沒有定義:指令執行后這些標志是任意的、不可預測(就是誰也不知道是0還是1)對標志沒有影響:指令執行不改變標志狀態例4.21:乘法運算moval,0b4h ;al=b4h=180movbl,11h ;bl=11h=17mulbl ;ax=Obf4h=3060;OF=CF=1,AX高8位不為0moval,0b4h ;al=b4h=-76movbl,11h ;bl=11h=17imulbl ;ax=faf4h=-1292;OF=CF=1,AX高8位含有效數字4.2.4除法指令DIVr8/m8

;無符號字節除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余數DIVr16/m16

;無符號字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余數IDIVr8/m8 ;有符號字節除法:AL←AX÷r8/m8的商,Ah←AX÷r8/m8的余數IDIVr16/m16 ;有符號字除法:;AX←DX.AX÷r16/m16的商,DX←DX.AX÷r16/m16的余數例題4.22說明第4章除法指令的功能除法指令分無符號和有符號除法指令除法指令的除數顯式給出,隱含使用另一個操作數AX和DX作為被除數字節量除法:AX除以r8/m8,8位商存入AL,8位余數存入AH字量除法:DX.AX除以r16/m16,16位商存入AX,16位余數存入DX除法指令對標志沒有定義除法指令會產生結果溢出除法錯中斷當被除數遠大于除數時,所得的商就有可能超出它所能表達的范圍。如果存放商的寄存器AL/AX不能表達,便產生溢出,8086CPU中就產生編號為0的內部中斷——除法錯中斷對DIV指令,除數為0,或者在字節除時商超過8位,或者在字除時商超過16位,則發生除法溢出對IDIV指令,除數為0,或者在字節除時商不在-128~127范圍內,或者在字除時商不在-32768~32767范圍內,則發生除法溢出例4.22:除法運算movax,0400h ;ax=400h=1024movbl,0b4h ;bl=b4h=180divbl ;商al=05h=5 ;余數ah=7ch=124movax,0400h ;ax=400h=1024movbl,0b4h ;bl=b4h=-76idivbl ;商al=f3h=-13 ;余數ah=24h=364.2.5符號擴展指令CBW ;AL的符號擴展至AH;如AL的最高有效位是0,則AH=00;AL的最高有效位為1,則AH=FFH。AL不變CWD

;AX的符號擴展至DX;如AX的最高有效位是0,則DX=00;AX的最高有效位為1,則DX=FFFFH。AX不變什么是符號擴展符號擴展指令常用于獲得倍長的數據不影響標志位例題4.23例題4.24第4章符號擴展的概念符號擴展是指用一個操作數的符號位(即最高位)形成另一個操作數,后一個操作數的各位是全0(正數)或全1(負數)。符號擴展不改變數據大小對于數據64H(表示數據100),其最高位D7為0,符號擴展后高8位都是0,成為0064H(仍表示數據100)對于數據ff00H(表示有符號數-256),其最高位D15為1,符號擴展后高16位都是1,成為ffffff00H(仍表示有符號數-256)例4.23:符號擴展moval,80h ;al=80hcbw

;ax=ff80haddal,255 ;al=7fhcbw

;ax=007fh例4.24:AX÷BXcwd

;DX.AX←AXidivbx ;AX←DX.AX÷BX利用符號擴展指令得到除法指令所需要的倍長于除數的被除數對無符號數除法應該采用直接使高8位或高16位清0的方法,獲得倍長的被除數4.2.6十進制調整指令壓縮BCD碼就是通常的8421碼;它用4個二進制位表示一個十進制位,一個字節可以表示兩個十進制位,即00~99非壓縮BCD碼用8個二進制位表示一個十進制位,只用低4個二進制位表示一個十進制位0~9,高4位任意,通常默認為0十進制數調整指令對二進制運算的結果進行十進制調整,以得到十進制的運算結果分成壓縮BCD碼和非壓縮BCD碼調整第4章BCD碼(BinaryCodedDecimal)二進制編碼的十進制數:一位十進制數用4位二進制編碼來表示8086支持壓縮BCD碼和非壓縮BCD碼的調整運算真值 8 64二進制編碼 08H

40H壓縮BCD碼 08H

64H非壓縮BCD碼 08H

0604H壓縮BCD碼加、減調整指令(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8)DAA;AL←將AL的加和調整為壓縮BCD碼(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8)DAS;AL←將AL的減差調整為壓縮BCD碼使用DAA或DAS指令前,應先執行以AL為目的操作數的加法或減法指令DAA和DAS指令對OF標志無定義,按結果影響其他標志,例如CF反映壓縮BCD碼相加或減的進位或借位狀態第4章例題4.25a例題4.25b例題4.26例4.25a:壓縮BCD加法moval,68h;al=68h,壓縮BCD碼表示真值68movbl,28h;bl=28h,壓縮BCD碼表示真值28addal,bl;二進制加法:al=68h+28h=90hdaa ;十進制調整:al=96h;實現壓縮BCD碼加法:68+28=96例4.25b:壓縮BCD減法moval,68h;al=68h,壓縮BCD碼表示真值68movbl,28h;bl=28h,壓縮BCD碼表示真值28subal,bl;二進制減法:al=68h-28h=40hdas ;十進制調整:al=40h;實現壓縮BCD碼加法:68-28=40例4.26:壓縮BCD減法movax,1234hmovbx,4612hsubal,bldas ;34-12=22,CF=0xchgal,ahsbbal,bhdas ;12-46=66,CF=1xchgal,ah ;11234-4612=6622非壓縮BCD碼加、減調整指令(ADDAL,i8/r8/m8)(ADCAL,i8/r8/m8)AAA;AL←將AL的加和調整為非壓縮BCD碼;AH←AH+調整的進位(SUBAL,i8/r8/m8)(SBBAL,i8/r8/m8)AAS;AL←將AL的減差調整為非壓縮BCD碼;AH←AH-調整的借位使用AAA或AAS指令前,應先執行以AL為目的操作數的加法或減法指令AAA和AAS指令在調整中產生了進位或借位,則AH要加上進位或減去借位,同時CF=AF=1,否則CF=AF=0;它們對其他標志無定義第2章例題4.27a例題4.27b例4.27a:非壓縮BCD加movax,0608h;ax=0608h,非壓縮BCD碼表示真值68movbl,09h;bl=09h,非壓縮BCD碼表示真值9addal,bl;二進制加法:al=08h+09h=11haaa;十進制調整:ax=0707h;實現非壓縮BCD碼加法:68+9=77例4.27b:非壓縮BCD減movax,0608h;ax=0608h,非壓縮BCD碼表示真值68movbl,09h;bl=09h,非壓縮BCD碼表示真值9subal,bl;二進制減法:al

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論