版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第5章 算術(shù)和邏輯運算指令,,羅文堅中國科大 計算機學(xué)院http://staff.ustc.edu.cn/~wjluo/mcps/,本章內(nèi)容,加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算術(shù)運算指令基本邏輯運算指令移位和循環(huán)移位指令串比較指令,加法指令,加法指令,加法指令,加法指令注意事項:源操作數(shù)和目的操作數(shù)不能同時為內(nèi)存單元(MEM)。不允許與段寄存器(SREG)相關(guān)的加法。XADD指令的源
2、操作數(shù)在寄存器(REG)中。標志寄存器中狀態(tài)位隨運算結(jié)果而變化,但INC指令不影響CF標志。指令中操作數(shù)是帶符號數(shù)還是無符號數(shù)由程序員解釋。注意:第4章的數(shù)據(jù)傳送指令不改變狀態(tài)標志。,Example 1,例、試用加法指令對兩個8位16進制數(shù)5EH和3CH求和,并分析加法運算指令執(zhí)行后對標志位的影響。解:MOV AL, 5EH;AL=5EH(94)MOV BL, 3CH;BL=3CH(50)ADD AL, BL;結(jié)果
3、AL=9AH,運算后標志:ZF=0, AF=1, CF=0, SF=1, PF=1, OF=1。,若程序員認為兩個加數(shù)是無符號數(shù),則運算結(jié)果位9AH,即154。此時,SF標志和OF標志沒有意義。若程序員認為兩個加數(shù)是有符號數(shù),則運算溢出,結(jié)果無效。此時,CF標志沒有意義。,CF標志和OF標志,當(dāng)加減運算結(jié)果的最高有效位有進位(加法)或借位(減法)時,CF標志置1,即CF=1;否則CF=0。針對無符號整數(shù),判斷加減結(jié)果是否超出表達
4、范圍。N個二進制位表達無符號整數(shù)的范圍:0~2N-1有符號數(shù)加減結(jié)果有溢出,則OF=1;否則OF=0。針對有符號整數(shù),判斷加減結(jié)果是否超出表達范圍。N個二進制位表達有符號整數(shù)的范圍: -2N-1~2N-1-1,進位標志CF:舉例,8位二進制數(shù)相加:00111010+01111100=10110110十六進制表達:3A+7C=B6轉(zhuǎn)換成十進制數(shù):58+124=182沒有產(chǎn)生進位:CF=0,8位
5、二進制數(shù)相加:10101010+01111100=[1]00100110十六進制表達:AA+7C=[1]26轉(zhuǎn)換成十進制數(shù):170+124=294=256+38產(chǎn)生進位:CF=1,0<182<255,進位1表達256,溢出標志OF:舉例,8位二進制數(shù)相加:00111010+01111100=10110110十六進制表達:3A+7C=B6轉(zhuǎn)換成十進制數(shù):58+124=182超出范圍:OF=1,8位二進制數(shù)相加:10
6、101010+01111100=[1]00100110十六進制表達:AA+7C=[1]26轉(zhuǎn)換成十進制數(shù):-86+124=38沒有超出范圍:OF=0,182>127,補碼AAH表達-86,Example 2,設(shè)一個學(xué)生的三門課的成績分別為60、65、90,入學(xué)分數(shù)線為總分256分,判斷該學(xué)生是否取得入學(xué)資格。;采用無符號數(shù)表示MOV AL, 60ADD AL, 65ADD AL, 90JC PASS;超過256分?
7、……PASS:……;取得入學(xué)資格,設(shè)張三在海拔60米的地點,他先往上走了65米,然后又往上走了90米,請問他現(xiàn)在所在地點的海拔高度?;為便于表示低于海平面的;情況,采用有符號數(shù)表示MOV AL, 60ADD AL, 65JO ERROR;(AL)=01111101ADD AL, 90JO ERROR;(AL)=11010111……ERROR:……;錯誤處理,進位和溢出的區(qū)別,進位標志反映無符號整數(shù)運算結(jié)果
8、是否超出范圍有進位,加上進位或借位后運算結(jié)果仍然正確溢出標志反映有符號整數(shù)運算結(jié)果是否超出范圍有溢出,運算結(jié)果已經(jīng)不正確處理器按照無符號整數(shù)求得結(jié)果在設(shè)置進位標志CF的同時,根據(jù)是否超出有符號整數(shù)的范圍設(shè)置溢出標志OF。應(yīng)該利用哪個標志,由程序員決定!操作數(shù)是無符號數(shù),關(guān)心進位操作數(shù)是有符號數(shù),注意溢出,溢出標志的判斷,處理器硬件判斷規(guī)則最高位和次高位同時有進位或同時無進位,無溢出;最高位和次高位進位狀態(tài)不同,有溢
9、出人工判斷的簡單規(guī)則只有當(dāng)兩個相同符號數(shù)相加(含兩個不同符號數(shù)相減),而運算結(jié)果的符號與原數(shù)據(jù)符號相反時,產(chǎn)生溢出;其他情況下,不會產(chǎn)生溢出,奇偶標志PF(Parity Flag),當(dāng)運算結(jié)果最低8位中“1”的個數(shù)為零或偶數(shù)時,PF=1;否則PF=0,舉例,8位二進制數(shù)相加:00111010+01111100=10110110“1”的個數(shù)為5個:PF=08位二進制數(shù)相加:10000100+01111100=[1]000
10、00000“1”的個數(shù)為0個:PF=1,,,結(jié)果,,進位,the least-significant byte 中“1”的個數(shù),零標志ZF(Zero Flag),運算結(jié)果為0,則ZF=1,否則ZF=0,結(jié)果是0,ZF標志不是0 !,舉例,8位二進制數(shù)相加:00111010+01111100=10110110結(jié)果不是0,ZF=08位二進制數(shù)相加:10000100+01111100=[1]00000000結(jié)果是0,Z
11、F=1,,,結(jié)果,,進位,符號標志SF(Sign Flag),運算結(jié)果最高位為1,則SF=1;否則SF=0。,舉例,8位二進制數(shù)相加:00111010+01111100=10110110最高位=1:SF=18位二進制數(shù)相加:10000100+01111100=[1]00000000最高位=0:SF=0,,,結(jié)果,,進位,最高位=符號位=SF,輔助進位標志(Auxiliary Carry),AF(Auxiliary Ca
12、rry):輔助進位標志。用于標志D3向D4位之間的進位(加法運算)或借位(減法運算)的狀態(tài)。AF標志供DAA和DAS指令使用,以便在BCD碼的加法或減法之后對AL中的結(jié)果值進行十進制調(diào)整。,Example 3,例、32位CPU中,實現(xiàn)64位加法。把ARRAY1地址開始的四個字(低字在前)和ARRAY2地址開始的四個字相加,和存放在ARRAY1開始處。,ARRAY1 ARRAY2
13、,低地址,高地址,程序段,MOV ESI , OFFSET ARRAY1 ; 取第一個數(shù)的首地址MOV EAX, [ESI] ; 將第一個數(shù)的低32位送AXMOV EDI, OFFSET ARRAY2 ; 取第二個數(shù)的首地址ADD EAX, [EDI] ; 第一個數(shù)的低32位和第2個數(shù)的低32位相加(不加CF,但此條指令的執(zhí)行影響CF)MOV [ESI], EAX; 存低32位相加結(jié)果MOV EAX, [ESI+4];
14、ADC EAX, [EDI+4]; 兩個高32位連同CF(低32位相加形成的)相加.MOV [ESI+4], EAX; 存高32位相加結(jié)果.,思考:128位整數(shù)相加/減?,Example 4,MOV BL, 12HMOV DL, 02HXADD BL, DL;BL=14H, DL=12H,減法指令,減法指令,減法指令注意事項與加法指令類似:源操作數(shù)和目的操作數(shù)不能同時為內(nèi)存單元(MEM)。不允許與段寄存器(SREG)相關(guān)的
15、加法。標志寄存器中狀態(tài)位隨運算結(jié)果而變化,但DEC指令不影響CF標志。指令中操作數(shù)是帶符號數(shù)還是無符號數(shù)由程序員解釋。,Example,SUB CL, BLSUB DH, 4FHSUB AX, SPSUB DI, TEMP[ESI]DEC QWORD PTR [RSI]SBB BYTE PTR [DI], 3,比較指令,比較指令,Example,CMP CL, BLCMP EBP, ESICMP RDI, RSI
16、CMP AX, 2000HCMP R10W, 12HCMP [DI], CHCMP DI, TEMP[BX]CMPCHG CX, DXCMPXCHG8B TEMP,本章內(nèi)容,加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算術(shù)運算指令基本邏輯運算指令移位和循環(huán)移位指令串比較指令,乘法指令,乘法指令,乘法指令,乘法指令,Example,Example,例1、設(shè)AL=55H,BL=14H,計算它們的乘積。
17、MUL BL結(jié)果:AX=06A4H。由于AH=06H,不為0,則CF=1,OF=1。例2、AL=-28H,BL=59H,計算它們的乘積。IMUL BL結(jié)果:AX=0F98CH,CF=1,OF=1。,MUL與IMUL,能否用MUL做帶符號數(shù)的乘法?例、嘗試用MUL計算FFH×FFH。用二進制進行計算,可表示為: 1111 1111× 1111 1111
18、 1111 1110 0000 0001若為無符號數(shù),則相當(dāng)于255×255=65025的運算,結(jié)果正確。若為有符號數(shù),則上面的結(jié)果表示為(-1)×(-1)=-511,結(jié)果不正確。,,MUL與IMUL,IMUL指令采用什么算法來實現(xiàn)其功能?有多種方案??梢灾苯硬捎醚a碼相乘。也可以先將參加運算的操作數(shù)恢復(fù)成原碼,數(shù)位當(dāng)成符號號數(shù)相乘,然后給乘積賦予正確的符號。這些工作由微處理器自動完成。,除法指令,除法指
19、令,除法指令,除法指令可能發(fā)生兩種錯誤除數(shù)為0除法溢出除法溢出:在被除數(shù)很大,而除數(shù)很小時,會發(fā)生除法溢出。例如,AX=3000,除數(shù)BL=2,此時商在AL=1500使得除法溢出。這兩種錯誤都會使得微處理器產(chǎn)生中斷。此時所得的商和余數(shù)都不確定。在任何微處理器中,都不存在立即數(shù)除法指令。,乘法指令、除法指令與標志位,標志:O D I T S Z A P C IMUL × --- U
20、U U U X MUL × --- U U U U X IDIV U --- U U U U U DIV U --- U U U U UX:根據(jù)結(jié)果設(shè)置。當(dāng)結(jié)果(乘積)的高半部分=0時,CF?0,OF?0,表示高半部分無有效數(shù)字;否則, CF?1,OF?1。U:無定義。-:不影響。,Example,例、給定無符號數(shù)7A86H和04H,求7
21、A86H÷04H=?。若用DIV指令進行計算,即MOV AX, 7A86HMOV BL, 04HDIV BL ;7A86H÷04H的商為1EA1H>FFH由于BL 中的除數(shù)04H為字節(jié),被除數(shù)為字,商1EA1H大于AL中能存放的最大無符號數(shù)FFH,結(jié)果將產(chǎn)生除法出錯中斷。,符號擴展指令,除法指令中,被除數(shù)常常需要進行符號擴展或零擴展。,例:設(shè)AX=379AH。若執(zhí)行CBW指令,則AX=FF9AH;若
22、執(zhí)行的是CWD指令,則DX=0000H,AX=379AH。注意:80386以上CPU還有MOVSX指令和MOVZX指令。,Example,二進制四則混合算術(shù)運算程序段試計算: AX = ( V-(X*Y+Z-540) ) / X 之商, DX = 余數(shù), 其中,X ,Y ,Z ,V 均為字變量、有符號數(shù)。,Program,; ( V- (X*Y+Z-540) ) / XMOV AX, X;
23、 IMUL Y; X*Y,結(jié)果在DX:AX中MOV CX, AX;MOV BX, DX; 將乘積存在BX:CX中MOV AX, Z;CWD; 將符號擴展后的Z加到BX:CX中的乘積上去ADD CX, AX; ADC BX, DX;SUB CX, 540;SBB BX, 0;
24、 從BX:CX中減去540MOV AX, V;CWD;SUB AX, CX; 從符號擴展后的V中減去(BX:CX)并SBB DX, BX; 除以X,商在AX中,余數(shù)在DX中。IDIV X;,關(guān)于余數(shù),可以根據(jù)實際應(yīng)用的需求來處理余數(shù)。四舍五入截斷如果是無符號數(shù)除法,采取四舍五入方式時,可將余數(shù)與除數(shù)的一半進行比較,以決定余數(shù)是加入到商,還是舍去。例,AX除以BL
25、,無符號數(shù),結(jié)果四舍五入,DIV BLADD AH, AHCMP AH, BLJB NEXTINC ALNEXT:,本章內(nèi)容,加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算術(shù)運算指令基本邏輯運算指令移位和循環(huán)移位指令串比較指令,BCD算術(shù)運算指令,BCD算術(shù)運算指令不能用于64位模式。DAA,加法的十進制修正Decimal Adjust AL after AdditionDAS,減法的十進制修正
26、Decimal Adjust AL after Subtraction,BCD數(shù),BCD數(shù):二進制編碼的十進制數(shù)(Binary Coded Decimal)用4位二進制碼表示一位十進制數(shù);0000~1001是合法BCD碼;1010~1111是非法BCD碼。壓縮BCD數(shù):用一個字節(jié)表示2位BCD數(shù)。例:37非壓縮BCD數(shù):用一個字節(jié)的低4位表示一位BCD數(shù),高4位為0。例:37,例 1 : 18 + 7 = 25
27、 0 0 0 1 1 0 0 0 - - - - - - - - 18 + 0 0 0 0 0 1 1 1 - - - - - - - - 7 0 0 0 1 1 1 1 1 - - - - - - - - ? (1111是非法BCD碼),壓縮BCD數(shù)十進制調(diào)整原理(1),需要
28、對結(jié)果進行變換(調(diào)整),方法:“加6調(diào)整”。 0 0 0 1 1 1 1 1 + 0 0 0 0 0 1 1 0 0 0 1 0 0 1 0 1 - - - - - - - - 25(正確結(jié)果) 注意:此時,第3位向第4位(低半字節(jié)向高半字節(jié))有進位,AF=1。,,,,例2 : 19 + 8 = 27 0 0 0 1
29、1 0 0 1 --------- 19 + 0 0 0 0 1 0 0 0 --------- 8 0 0 1 0 0 0 0 1----------21(結(jié)果不對)運算時,低位數(shù)字向高位數(shù)字產(chǎn)生了進位(AF=1或CF=1),實際上是“滿16進一”,但進到高位,當(dāng)成了10,“少6”,需“加6調(diào)整”。 0 0 1 0 0 0 0 1 + 0 0
30、0 0 0 1 1 0 0 0 1 0 0 1 1 1-----------27(結(jié)果正確)可見,在BCD數(shù)運算時,若AF=1(或CF=1)就需在低4位(或高4位)上進行“加6調(diào)整”。,,,壓縮BCD數(shù)十進制調(diào)整原理(2),壓縮BCD數(shù)十進制調(diào)整原理(3),加法器實際上是按二進制運算 “滿16進一”但對于BCD數(shù),應(yīng)當(dāng)按10進制算
31、 “滿10進一”,“進1當(dāng)10”在BCD碼結(jié)果中,若某一位BCD數(shù)字所對應(yīng)的二進制碼超過9(1010~1111),應(yīng)“加上6”,產(chǎn)生進位,進行調(diào)整。若低位數(shù)字向高位數(shù)字產(chǎn)生了進位(AF=1或CF=1),應(yīng)“加上6”,補上少加的“6”,進行調(diào)整。這可由軟件(調(diào)整指令)來完成。,壓縮BCD數(shù)十進制調(diào)整原理(4),壓縮BCD數(shù)加法十進制調(diào)整規(guī)則:如果兩個BCD數(shù)字相加的結(jié)果是一個在1010~1111之間
32、的二進制數(shù),或者有向高一位數(shù)字的進位(AF=1或CF=1),則應(yīng)在現(xiàn)行數(shù)字上加6(0110B)調(diào)整。壓縮BCD數(shù)減法十進制調(diào)整規(guī)則: (1) AF=1, 或運算結(jié)果的低位是一個在1010~1111之間的二進制數(shù),則在低位上要進行“-6”調(diào)整。 (2) CF=1,或運算結(jié)果的高位是一個在1010~1111之間的二進制數(shù),則在高位上要進行“-6”調(diào)整。,壓縮BCD數(shù)十進制修正指令(1),加法的十進制修正指令: 格
33、式: DAA (必須緊跟在ADD、ADC指令后) 操作:AL?AL中的和數(shù)調(diào)整到壓縮BCD格式 修正規(guī)律:AL的低4位>9或AF=1,則AL?AL+06H,AF?1 AL的高4位>9或CF=1,則AL?AL+60H,CF?1 注意:狀態(tài)位OF不確定,其余狀態(tài)位隨運算結(jié)果而變。 DAA--Decimal Adjust for Addition 標志:O D I T S
34、Z A P C U ---× ×× ××,壓縮BCD數(shù)十進制修正指令(2),減法的十進制修正指令: 格式: DAS (必須緊跟在SUB、SBB指令后) 操作:AL ? AL中的差數(shù)調(diào)整到壓縮BCD格式。 修正規(guī)律:AL的低4位>9或AF=1,則AL?AL-06H,AF?1 AL的高4位>9或CF=1,則AL?A
35、L-60H,CF?1 注意事項:狀態(tài)位OF不確定,其余狀態(tài)位隨運算結(jié)果而變。 DAS-- Decimal Adjust for Subtraction 標志:O D I T S Z A P C U ---× ××××,例:計算BCD3 = BCD1+BCD2,例、設(shè)BCD1,BCD2, BCD3定義為字變量,可分別存放4位數(shù)字的組合B
36、CD數(shù)。假定字變量BCD1的值為1834 ,字變量BCD2的值為2789。要求計算BCD3 = BCD1+BCD2,并指出執(zhí)行每條指令的操作及執(zhí)行指令后AL, AF, CF 的內(nèi)容。程序段附后。,BCD1,BCD1+1,BCD2,BCD2+1,BCD3,例:計算BCD3 = BCD1+BCD2,計算:1834+2789=4623,壓縮BCD數(shù)的乘除法,沒有壓縮BCD數(shù)的乘法和除法調(diào)整指令。主要原因是相應(yīng)的調(diào)整算法比較復(fù)雜,所以不支持
37、壓縮BCD數(shù)的乘除法運算。如果要處理壓縮BCD數(shù)的乘除法問題,可以把操作數(shù)(壓縮BCD數(shù))變換成相等的二進制數(shù),然后用二進制算法進行運算,運算完成后再將結(jié)果轉(zhuǎn)換成BCD數(shù)。,ASCII算術(shù)運算指令,AAA,加法的ASCII修正ASCII Adjust After AdditionAAS,減法的ASCII修正ASCII Adjust AL After SubtractionAAM,乘法的ASCII修正ASCII Adjust
38、 AX After MultiplyAAD,除法的ASCII修正ASCII Adjust AX Before Division均不能用于64位模式。,ASCII算術(shù)運算指令,AAA,加法的ASCII修正格式:AAA(必須緊跟在ADD,ADC指令后)功能:對AL中的非壓縮BCD數(shù)(或十進制的ASCII碼)的加法結(jié)果進行修正。修正規(guī)律:AL的低4位>9或AF=1,則AL?AL+06H,AF?1,AH?AH+1,AL?A
39、L∧0FH,CF?AF,其中AH=AH+1用來實現(xiàn)低位BCD數(shù)向高位的進位。AL的低4位<9且AF=0,AL?AL∧0FH,CF?AF。注意:狀態(tài)位AF、CF隨操作數(shù)結(jié)果變化;其余狀態(tài)位都是不確定的。,ASCII算術(shù)運算指令,AAS,減法的ASCII修正格式:AAS(必須緊跟在SUB,SBB指令后)功能:對AL中的非壓縮BCD數(shù)(或十進制的ASCII碼)的減法結(jié)果進行修正。修正規(guī)律:AL的低4位>9或AF=1,
40、則AL?AL-06H,AF?1,AH?AH-1,AL?AL∧0FH,CF?AF,其中AH=AH-1用來實現(xiàn)低位BCD數(shù)向高位的借位。AL的低4位<9且AF=0,AL?AL∧0FH,CF?AF。注意:狀態(tài)位AF、CF隨操作數(shù)結(jié)果變化;其余狀態(tài)位都是不確定的。,ASCII算術(shù)運算指令,AAM,乘法的ASCII修正格式:AAM(必須緊跟在MUL指令后)功能:操作數(shù)為累加器AX,對AL中的非壓縮BCD數(shù)的乘法結(jié)果進行修正。
41、修正規(guī)律:AH=AL/10的商(高位非壓縮BCD數(shù)),AL=AL/10的余數(shù)(低位非壓縮BCD數(shù))。注意:狀態(tài)位SF、ZF、PF隨操作結(jié)果變化;其余狀態(tài)位都是不確定的。,ASCII算術(shù)運算指令,AAD,除法的ASCII修正格式:AAD(必須緊跟在DIV指令前)功能:操作數(shù)為累加器AX,AX的內(nèi)容為兩位非壓縮的BCD數(shù);在做除法前,對AX中的非壓縮BCD數(shù)進行修正。修正規(guī)律:AL=AH×10+AL,AH=0。本質(zhì)
42、:把BCD碼轉(zhuǎn)換成二進制數(shù)。注意:狀態(tài)位SF、ZF、PF隨操作結(jié)果變化;其余狀態(tài)位都是不確定的。,Example1,例、求兩個非壓縮十進制數(shù)09和06之乘積,可用下列指令實現(xiàn)。MOV AL, 09H ;置初值MOV BL, 06HMUL BL;計算乘積,得AL=36HAAM;調(diào)整后得AH=05H(十位),AL=04H(個位),Example2,例、求BCD數(shù)72除以9。MOV BL, 09H MOV AX, 70
43、2H ;置初值A(chǔ)AD;調(diào)整,AX=0048HDIV BL;計算乘積,得AL=09H,本章內(nèi)容,加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算術(shù)運算指令基本邏輯運算指令移位和循環(huán)移位指令串比較指令,邏輯運算指令,名稱格式操作與AND DST, SRCDST ? DST ∧ SRC或OR DST, SRCDST ? DST V SRC 非NOT DSTDST
44、 ? DST異或XOR DST, SRCDST ? DST⊕SRC測試TEST DST, SRCDST∧ SRC,,DST可以是reg,mem;SRC可以是reg,mem,或imm。注意: AND, OR, NOT, XOR, TEST是按位進行運算。,邏輯運算指令,AND DST, SRC,OR DST, DST和XOR DST, SRCDST和SRC不能同時為mem。狀態(tài)位SF、ZF和PF隨運算
45、結(jié)果而變化,CF?0,OF?0,而AF不確定。NOT DST注意:NOT不影響標志位。TEST DST, SRC執(zhí)行DST∧ SRC操作后,兩個操作數(shù)內(nèi)容不變。DST和SRC不能同時為mem。狀態(tài)SF、ZF和PF隨運算結(jié)果而變化,CF?0,OF?0,而AF不確定。,Example,設(shè)AX=3538HAND AX, 0F0FH;AX?0508H設(shè)AX=0508HOR AX, 3030H;AX?3538HNOT
46、BYTE PTR [BX];對存儲單元的內(nèi)容按位取反TEST BX, 3;合法TEST 3, BX;MASM5.0中不合法MASM6.15中,編譯器會把TEST 3, BL轉(zhuǎn)換成TEST BL, 3,基本邏輯運算指令,80386以上CPU新增加了一些測試單一位的位測試指令。,Example,BT AX, 4;如果第4位為1,則CF=1,否則CF=0BTC AX, 4BTR AX, 4BTS AX, 4
47、,基本邏輯運算指令,方法:“各位(包括符號位)求反,末位加1”。對比:由原碼求補碼?由補碼求原碼?,Example,若AL=00010001B=+17,執(zhí)行NEG AL后, AL=11101111B=[-17]補若AL=11010001B=[-47]補,執(zhí)行NEG AL后, AL=00101111B=+47,本章內(nèi)容,加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算術(shù)運算指令基本邏
48、輯運算指令移位和循環(huán)移位指令串比較指令,移位指令,邏輯右移 SHR REG/MEM, CL/IMM8,,,,,,,,,,0,算術(shù)右移 SAR REG/MEM, CL/IMM8,算術(shù)右移時,符號位保持不變。,邏輯左移 SHL REG/MEM, CL/IMM8,,,,,,,0,0,算術(shù)左移 SAL REG/MEM, CL/IMM8,SHL和SAL功能一樣。,移位指令,8086CPU中,IMM8只能是1。8086CPU不對移位次
49、數(shù)取模。32位CPU對移位次數(shù)取32的模。對于64位目的操作數(shù),取64的模。狀態(tài)位SF、ZF和PF隨運算結(jié)果變化。AF不確定。狀態(tài)位CF:最后一次移入到CF中的值。對于SHL和SHR,當(dāng)移位次數(shù)超過目的操作數(shù)長度時,CF值不確定。狀態(tài)位OF:左移1位時,結(jié)果的最高位(即符號位)與CF一致,則OF=0,否則為1。SAR右移,OF=0;SHR右移,OF=源操作數(shù)的最高有效位。左移/右移多位時,OF值不確定。,移位指令,邏輯移位
50、:把操作數(shù)作為無符號數(shù)進行移位。 右移時,最高位補0; 左移時,最低位補0。算術(shù)移位:把操作數(shù)作為有符號數(shù)進行移位。 右移時,最高位保持不變; 左移時,最低位補0。,Example,例,AX的內(nèi)容乘以5。,MOV BX, AXSHL AX, 2ADD AX, BX,雙精度移位指令,80386以上的CPU包含2條雙精度移位指令:SHLD(左移),SHRD(右移),循環(huán)移位指令,不帶進位的循環(huán)左移:ROL
51、 REG/MEM, CL/IMM8,,,,,,,,,,,,,不帶進位的循環(huán)右移:ROR REG/MEM, CL/IMM8,帶進位的循環(huán)左移:RCL REG/MEM, CL/IMM8,,,,,,帶進位的循環(huán)右移:RCR REG/MEM, CL/IMM8,循環(huán)移位指令,8086CPU中,IMM8只能是1。8086CPU不對移位次數(shù)取模。32位CPU對移位次數(shù)取32的模。對于64位目的操作數(shù),移位次數(shù)取64的模。狀態(tài)位SF、ZF
52、、、AF不受影響。狀態(tài)位CF:最后一次移入到CF中的值。狀態(tài)位OF:左移1位時,結(jié)果的最高位(即符號位)與CF一致,則OF=0,否則為1。右移1位時,結(jié)果的最高2位的異或值。左移/右移多位時,OF值不確定。,Example,例,將DX、BX和AX中的48位數(shù)據(jù)向左移移位。SHL AX, 1RCL BX, 1RCL DX, 1,位掃描指令,80386+包含了兩條位掃描指令:BSF:Bit scan forward,向前
53、位掃描指令BSR:Bit scan reverse,向后位掃描指令,位掃描指令,BSF和BSR的用途:為位操作指令尋址值為1的位。例,設(shè)EAX=60000000H。如果執(zhí)行BSF EBX, EAX,則EBX=29,ZF=0。如果執(zhí)行BSR EBX, EAX,則EBX=30,ZF=0.注意:教材的中英文版不一致。英文版寫錯了。,本章內(nèi)容,加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算術(shù)運算指令基本邏輯運算指令
54、移位和循環(huán)移位指令串比較指令,串比較指令,SCAS:String Scan,串掃描CMPS:String Compare,串比較,SCAS指令,通過 REP 前綴,SCAS、SCASB、SCASW 及 SCASD 指令可用于整塊比較 CX個字節(jié)、字或雙字或四字。,Example,例,假定從BLOCK開始的存儲區(qū)域長為100字節(jié),要求測試該存儲區(qū)域,查看哪個單元有00H。MOV DI, OFFSET BLOCKCLDMOV
55、CX, 100XOR AL, ALREPNE SCASB,CMPS指令,在CMPS、CMPSB、CMPSW、CMPSD及CMPSQ前面增加 REP前綴,可整塊比較CX個字節(jié)、字或雙字或四字。,Example,例,假定LINE和TABLE分別指向兩段存儲區(qū)域,要求檢查它們的內(nèi)容是否相同。MOV SI, OFFSET LINEMOV DI, OFFSET TABLECLDMOV CX, 10REPE CMPSB,REP前綴,
56、REP前綴指令常用格式:REP MOVS/LODS/STOS若CX≠0,重復(fù)執(zhí)行,每執(zhí)行一次CX=CX-1若CX=0,則退出重復(fù),結(jié)束串操作。REPE/REPZ前綴指令常用格式:REPE/REPZ CMPS/SCASCX≠0且ZF=1,重復(fù)執(zhí)行,每執(zhí)行一次CX=CX-1CX=0或ZF=0,則停止重復(fù)執(zhí)行。REPNE/REPNZ前綴指令常用格式:REPNE/REPNZ CMPS/SCASCX≠0且ZF=
57、0重復(fù)執(zhí)行,每執(zhí)行一次CX=CX-1CX=0或ZF=1,則停止重復(fù)執(zhí)行。,REP前綴,前綴指令本身不影響狀態(tài)位。關(guān)于CX寄存器:80386以上微處理器使用ECX。Pentium 4在64位模式下,使用RCX。REP MOVSB指令:先檢查CX是否等于0,然后再執(zhí)行MOVSB 。若CX=0,則一次都不執(zhí)行MOVSB ,也不會執(zhí)行CX=CX-1的操作。,本章小結(jié),加法、減法和比較指令乘法和除法指令BCD碼和ASCII碼算
58、術(shù)運算指令基本邏輯運算指令移位和循環(huán)移位指令串比較指令熟記指令的格式和功能。,作業(yè)(1),習(xí)題5、習(xí)題13、習(xí)題19、系統(tǒng)37、習(xí)題55。(補充題1)指出下列指令中哪些是錯誤的,錯在什么地方?(1)ADD AL, AX(2)ADD 8650H, AX(3)ADD DS, 0200H(4)ADD [BX], [1200H](5)ADD IP, 0FFH(6)ADD [BX+SI+3], IP(8)INC [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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- alu算術(shù)邏輯運算單元的設(shè)計
- 實驗二 算術(shù)邏輯運算及移位操作
- 二帶進位控制8位算術(shù)邏輯運算
- 邏輯運算
- 邏輯運算和分支結(jié)構(gòu)
- 基于脈沖神經(jīng)膜系統(tǒng)的算術(shù)邏輯運算研究.pdf
- 全定制高性能的算術(shù)邏輯運算單元的研究設(shè)計.pdf
- 邏輯運算真、假判斷
- DNA自組裝邏輯運算模型.pdf
- 帶進位控制8位算數(shù)邏輯運算實驗
- 基于DNA鏈置換的分子邏輯運算.pdf
- 高速全光邏輯運算及其應(yīng)用的理論和實驗研究.pdf
- 基于邏輯最小項的高速全光數(shù)字邏輯運算研究.pdf
- DPSK信號的全光數(shù)字邏輯運算研究.pdf
- 基于DNA鏈置換反應(yīng)的分子邏輯運算研究.pdf
- 基于憶阻器的混沌電路與邏輯運算.pdf
- QD-SOA波長轉(zhuǎn)換及邏輯運算特性的研究.pdf
- 膜計算中的邏輯運算及其應(yīng)用研究.pdf
- 基于憶阻存儲陣列的讀寫及邏輯運算研究.pdf
- 面向?qū)ο蟮膹V義空間邏輯運算模型與推理研究.pdf
評論
0/150
提交評論