




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第五章 算術(shù)邏輯運(yùn)算程序,5.1帶符號(hào)和無符號(hào)二進(jìn)制數(shù)加減運(yùn)算,5.2帶符號(hào)和無符號(hào)二進(jìn)制數(shù)乘除法運(yùn)算,5.3十進(jìn)制數(shù)算術(shù)運(yùn)算,5.4邏輯運(yùn)算程序,5.1帶符號(hào)和無符號(hào)二進(jìn)制數(shù)加減運(yùn)算,5.1.1加減運(yùn)算指令,1、ADD指令 (字節(jié)或字相加) 格式:ADD 目的操作數(shù) ,源操作數(shù) 功能:將目的操作數(shù)加上源操作數(shù), 和送至目的操作數(shù)。,注意: 目:寄存器、存儲(chǔ)器操作數(shù)。 源: 寄存器、存儲(chǔ)器操作數(shù)和立即數(shù)。 二者類型要一致,即同時(shí)為字,或同時(shí) 為字節(jié)。但不能同時(shí)為存儲(chǔ)器操作數(shù)。 影響狀態(tài)標(biāo)志:AF、CF、OF、PF、SF、ZF,1)寄存器-寄存器 例: ADD AX ,BX ;(AX)+(BX)
2、=AX ADD CX, DX ADD BX,DI,2)存儲(chǔ)器-寄存器 例: ADD CX, A ;A用DW定義 ADD AX,BETASI ; BETA用DW定義 ADD BX,BXSI,3)寄存器-存儲(chǔ)器 例: ADD A,CX ;A用DW定義 ADD BETASI,AX,4)立即數(shù)累加到寄存器/存儲(chǔ)器 例:ADD AL,3 ADD AX,356 ADD CX,100 ADD BETASI, 34,狀態(tài)標(biāo)志位: ZF:當(dāng)運(yùn)算結(jié)果為0時(shí),置1。 SF:結(jié)果為負(fù)時(shí),置1。 CF: 執(zhí)行加法指令時(shí),CF是根據(jù)最高有效位是否有 向高位進(jìn)位設(shè)置的。有進(jìn)位時(shí)CF置1 OF: 據(jù)操作數(shù)的符號(hào)及其變化情況來
3、定,若兩操作 數(shù)符號(hào)相同而結(jié)果符號(hào)與之相反時(shí),OF=1。 也既是 如果結(jié)果溢出,則OF置1。,格式:同ADD 功能:源操作數(shù)加目的操作數(shù)再加進(jìn)位標(biāo)志CF的和 送至目的操作數(shù)。 即:如果進(jìn)位標(biāo)志位被置位則兩個(gè)操作數(shù)相加的 結(jié)果在存入目的操作數(shù)之前再加1,否則,再加0。,影響狀態(tài)標(biāo)志位:AF,CF,OF,PF,SF,ZF。 ADD和ADC指令既適用于無符號(hào)二進(jìn)制數(shù)也適用 于有符號(hào)的。 但它們的兩個(gè)操作數(shù)必須同時(shí)為字 節(jié)(8位)或字(16位)。,2、ADC指令 (帶進(jìn)位的加法指令),3、INC指令 (字節(jié)或字加1),格式:INC 目的操作數(shù) 功能:目的操作數(shù)加1后送至目的操作數(shù)。,例:INC CX
4、INC A ;A為變量名 INC WORD PTRSI;注意INC SI是錯(cuò)的。,注意:目的操作數(shù)可以為通用寄存器,也可以存儲(chǔ)器, 但不能是立即數(shù)。本指令主要用在循環(huán)程序中 修改地址指針和循環(huán)次數(shù)等。指令執(zhí)行結(jié)果影 響AF,OF,PF,SF,ZF。但不影響CF 。,4、SUB指令 (字節(jié)或字相減),格式:SUB 目的操作數(shù),源操作數(shù) 功能:目的操作數(shù)減源操作數(shù),結(jié)果送目的操作數(shù)。 影響狀態(tài)標(biāo)志位:AF,CF,OF,PF,SF,ZF。,例:MOV AL,04H MOV BL,05H SUB AL,BL ;實(shí)現(xiàn)(AL)-(BL)=AL,5、SBB指令 (帶借位的減法指令),格式:SBB 目的操作數(shù)
5、,源操作數(shù) 功能:目的操作數(shù)減源操作數(shù),再減去進(jìn)位標(biāo)志CF的值, 結(jié)果送目的操作數(shù)。影響AF,CF,OF,PF,SF,ZF.,本指令主要用于多字節(jié)操作數(shù)相減。在進(jìn)行減法運(yùn)算時(shí)(SUB或SBB)若有高位的借位就置CF為1;,例:MOV AL,64H MOV BL,03H SBB AL,BL ;AL-BL-CF=AL,若CF=1,則AL結(jié)果為60H,6、DEC指令 (字節(jié)或字相減),格式:DEC 目的操作數(shù) 功能:將目的操作數(shù)的值減1,在將結(jié)果送回目的操作數(shù)。,注意:操作數(shù)不能是立即數(shù),在相減時(shí)把操作數(shù)作為一個(gè) 無符號(hào)二進(jìn)制數(shù)來對待。影響:AF,OF,PF,SF,ZF, 但不影響CF。,7、NEG
6、指令 (求補(bǔ)),格式:NEG 目的操作數(shù) 功能:使目的操作數(shù)的符號(hào)變反, 即0減去目的操作數(shù) 后送目的操作數(shù),例+1變?yōu)?1。 也就是將操作數(shù)按位取反后末位加1,影響AF,CF,OF,PF,SF,ZF。,5.1.2程序舉例,例:5.1計(jì)算356+789和0B4H-25H,DATA SEGMENT A DW 356 B DW 789 C DW ? D DB 0B4H E DB 25H F DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX,MOV AX,A ADD AX,B MOV C,A
7、X MOV AL,D SUB AL,E MOV F,AL MOV AH,4CH INT 21H CODE ENDS END START,例5.2 多字節(jié)二進(jìn)制加法,求兩個(gè)無符號(hào)的六字節(jié) 十六進(jìn)制數(shù)的加法運(yùn)算。 A03487EA6B14H+78659D4789FCH,筆算: A 0 3 4 8 7 E A 6 B 1 4H + 7 8 6 5 9 D 4 7 8 9 F CH - 1 1 8 9 A 2 5 3 1 F 5 1 0H,因?yàn)橛?jì)算機(jī)中無如此大的寄存器,所以把其分解成 8位或16位的數(shù)據(jù)從最低有效位開始,連續(xù)的進(jìn)行 反復(fù)加法運(yùn)算。,第一步,第六步,FIRST DB 14H, 6BH,0
8、EAH,87H,34H,0A0H,00H SECOND DB 0FCH,89H, 47H, 9DH,65H, 78H :,L1: MOV AL,SECONDSI ADC FIRSTSI,AL INC SI,LOOP L1,MOV CX,6,CLC ; CF=0,MOV AL,0 ADC AL,0 MOV FIRSTSI,AL,MOV SI,0,為了不單獨(dú)處理進(jìn)位,可用增加一次循環(huán)加法來解決, 如下:,FIRST DB 14H,6BH,0EAH,87H,34H,0A0H,00H SECOND DB 0FCH,89H,47H,9DH,65H,78H,00H : MOV CX,7 MOV SI,0
9、CLC ;0=CF L1: MOV AL,SECONDSI ADC FIRSTSI,AL INC SI LOOP L1 :,5.2 帶符號(hào)和無符號(hào)二進(jìn)制數(shù)乘除法運(yùn)算,5.2.1乘除運(yùn)算指令,1、MUL 無符號(hào)二進(jìn)制數(shù)相乘,格式:MUL 源操作數(shù) 目的操作數(shù)隱含為AL(字節(jié)乘)或AX(字乘)。 源操作數(shù)可以為寄存器也可以存儲(chǔ)器。,8086/8088規(guī)定:如果源操作數(shù)為8位無符號(hào)數(shù), 則AL中的8位無符號(hào)數(shù)與源操作數(shù)相乘,得到 16位乘積送至AX;如果源操作數(shù)為16位無符 號(hào)數(shù),則AX中的16位無符號(hào)數(shù)與源操作數(shù)相乘, 得到32位乘積放在DX,AX中,乘積的高16位送 至寄存器DX,低16位送至A
10、X。如下頁圖:,乘法運(yùn)算的情形,影響標(biāo)志:OF,CF。 如果乘積的高一半是0, 則CF,OF都置0, 否則CF和OF均為1。,例:16410=? MOV AL,164 ; AL存放164D的二進(jìn)制補(bǔ)碼0A4H MOV BL,10 MUL BL ;執(zhí)行MUL BL后的結(jié)果為(AX)=0668H=1640D,CF=OF=1,2、IMUL 帶符號(hào)二進(jìn)制數(shù)相乘,格式:IMUL源操作數(shù) 功能: 執(zhí)行的操作與MUL相同,但這里的操作數(shù)被看 作是帶符號(hào)數(shù)。影響標(biāo)志:OF,CF。 如果乘積的高一半是低一半的符號(hào)擴(kuò)展,則CF, OF都置0,否則CF和OF均為1。,例:-9210=? MOV AL,-92 ; A
11、L存放-92D的二進(jìn)制補(bǔ)碼0A4H MOV BL,10 IMUL BL ;執(zhí)行MUL BL后的結(jié)果為 ;(AX)= 0FC68H =-920D,CF=OF=1,3、DIV指令 (無符號(hào)的字節(jié)或字除法),格式:DIV源操作數(shù) 功能:將累加器及其擴(kuò)展寄存器中的雙倍長度的無符 號(hào)的被除數(shù)除以源操作數(shù)中的無符號(hào)除數(shù)。 對于8位除數(shù)的除法運(yùn)算,被除數(shù)在AH和AL中, 對于16位除數(shù)的除法運(yùn)算,被除數(shù)在DX和AX中。 運(yùn)算后將單倍長度的商送回累加器AL或AX,將單 倍長度的余數(shù)送到擴(kuò)展器AH或DX。 如下頁圖:,如果除法指令產(chǎn)生的結(jié)果(商的值)超出了保存它的 目的寄存器的范圍,溢出并置OF為1,產(chǎn)生溢出
12、中斷。,例:求25210=? MOV AX, 252; MOV BL,10 DIV BL; 執(zhí)行后得到商(AL)=19H=25 D,余數(shù)(AH)=02H=2D,例.求275610=? 分析:因?yàn)楸磉_(dá)式的商超出字節(jié)的無符號(hào)數(shù)表示范圍0-255,所以只能用字除。 MOV AX,2756;(AX)=0AC4H MOV DX,0 MOV BX,10 DIV BX ;指令執(zhí)行完后,AX存放商0113H(275D),DX存放余數(shù)0006,4、IDIV指令 (帶符號(hào)的字節(jié)或字除法) 規(guī)定余數(shù)和被除數(shù)的符號(hào)相同。因此使得商和余數(shù)是唯一的。,例如:-274=? MOV AX,-27;AX中存放的是-27D的補(bǔ)碼
13、0FFE5H MOV BL,4 IDIV BL ; 執(zhí)行后得到商-6 的補(bǔ)碼表示(AL)=0FAH,余數(shù)-3的補(bǔ)碼(AH)=0FDH 例如:-27(- 4)=? MOV AX,-27;AX中存放的是-27D的補(bǔ)碼0FFE5H MOV BL,-4 ; BL中存放的是-4D的補(bǔ)碼0FCH IDIV BL ; 執(zhí)行后得到商6補(bǔ)碼表示(AL)=06H,余數(shù)-3的補(bǔ)碼(AH)=0FDH補(bǔ)碼表示,5、CBW和CWD,格式:CBW CWD 功能:進(jìn)行帶符號(hào)的8位除法時(shí),需要將AL里的數(shù)據(jù)擴(kuò)展到AX,CBW即完成此功能。 CWD將AX中的16位數(shù)擴(kuò)展到DX和AX中 。,例如:求-1282=? 設(shè)AL存放帶符號(hào)
14、數(shù)的-128D,即是 (AL)=80H;BL存放帶符號(hào)數(shù)的2D,即是 (BL)=02H,采用字節(jié)除,應(yīng)該將被除數(shù)擴(kuò)展到AX中。 例如: MOV AL, -128 ; CBW ;此指令將AL中的數(shù)擴(kuò)展至16位,(AX)=0FF80H MOV BL,2 ; IDIV BL ;此指令執(zhí)行結(jié)束后,商(AL)=0C0H=-64D,余數(shù)(AH)=0000H。,5.2.2 程序舉例,例5.3 :將16位無符號(hào)二進(jìn)制數(shù)用除10取余法化為 十進(jìn)制數(shù),并輸出結(jié)果。,分析:假設(shè)無符號(hào)二進(jìn)制數(shù)為111001000,即是十進(jìn)制數(shù)的456??紤]16位數(shù)除以10商仍可能是16位,即有可能AL里放不下商而溢出,所以采用32位
15、除以16位的除法動(dòng)算:將被除數(shù)放在AX寄存器里,DX清零.除數(shù)10放在BX寄存器里,除完后的余數(shù)即是想要的十進(jìn)制數(shù)字,保存起來,商如果不為0,繼續(xù)除。,我們將無符號(hào)進(jìn)進(jìn)制數(shù)用變量NUM存放, 將除之后得到的十進(jìn)制數(shù)字用D_NUM存放, 則程序如下:,DATA SEGMENT D_NUM DB 6_DUP(?) ;存放除完后得到的10進(jìn)制數(shù)字 NUM DW 0000000011001000B ;要轉(zhuǎn)換的無符號(hào) DATA ENDS 二進(jìn)制數(shù)。 CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX,MOV BX,10 ;除數(shù)1
16、0 MOV SI,OFFSET D_NUM MOV AX,NUM ;存放被除數(shù) L1: MOV DX,0 DIV BX MOV SI,DL ;將存放在DL中的有效十 INC SI 進(jìn)制數(shù)字送至D_NUM。 CMP AX,0 JE L2 JMP L1,SS1 DB 0123456789 L2: MOV CX,SI ;將十進(jìn)制數(shù)字的個(gè)數(shù)送CX OUT_L:DEC SI MOV AL,SI MOV BX,OFFSET SS1 XLAT MOV DL,AL MOV AH,02H INT 21H LOOP OUT_L,方法2:用指令將十進(jìn)制數(shù)字換成ASCII碼 L2: MOV CX,SI ;將十進(jìn)制數(shù)字
17、的個(gè)數(shù)送CX OUT_L:DEC SI MOV DL,SI OR DL,30H MOV AH,02H INT 21H LOOP OUT_L,MOV AH,4CH INT 21H CODE ENDS END START,5.3 十進(jìn)制數(shù)算術(shù)運(yùn)算,5.3.1壓縮的BCD碼調(diào)整指令,1、DAA 加法的十進(jìn)制調(diào)整,格式:DAA 功能:用在ADD或ADC指令之后,對兩個(gè)BCD碼數(shù)相 加后的結(jié)果(在AL中)進(jìn)行調(diào)整,使之成為正 確的壓縮BCD碼結(jié)果。 影響狀態(tài)標(biāo)志位:AF,CF,PF,SF,ZF, 不影響OF。,5.3 十進(jìn)制數(shù)算術(shù)運(yùn)算,5.3.1壓縮的BCD碼調(diào)整指令,1、DAA 加法的十進(jìn)制調(diào)整,例:
18、求8948=?用壓縮BCD碼實(shí)現(xiàn)。 則實(shí)現(xiàn)的程序段為:,MOVAL,89H MOVBL,48H ADD AL,BL;此指令執(zhí)行完后(AL)=0D1H,CF=0 DAA ;指令執(zhí)行完后(AL)=37H,且CF=1,2、DAS 減法的十進(jìn)制調(diào)整,格式:DAS 功能:與DAA相似,只是對減法進(jìn)行調(diào)整,使之成為 正確的壓縮BCD碼結(jié)果。,5.3.2壓縮型BCD碼加法舉例:,例:計(jì)算:56743829+95744856=?用壓縮BCD碼存儲(chǔ)計(jì)算,分析: 用壓縮型BCD碼存儲(chǔ)計(jì)算,每兩位占一個(gè)字節(jié) 采用低位存放低地址字節(jié)。 實(shí)現(xiàn)兩個(gè)多字節(jié)BCD碼相加,和多字節(jié)二進(jìn)制數(shù)的加 法類似,從低字節(jié)開如加,每次加完
19、用DAA調(diào)整 。,程序如下: DATA SEGMENT NUM1 DB 29H,38H,74H,56H,00H NUM2 DB 56H,48H,74H,95H,00H DATA ENDS ADD_BCD SEGMENT ASSUME CS:ADD_BCD,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AH,4CH INT 21H ADD_BCD ENDS END START,插入處理程序,MOV CX,5 MOV SI,0 CLC;由于用的是ADC指令,必須事先 ;將CF清零, 才保證結(jié)果正確。 L1: MOV AL,NUM2SI ADC AL,NUM1SI
20、DAA MOV NUM1SI,AL INC SI LOOP L1 (結(jié)果并未輸出),5.3.3 非壓縮型BCD碼(ASCII碼)的加法調(diào)整指令,1、AAA 加法的ASCII碼調(diào)整,格式:AAS 功能:與AAA相似,只是對減法進(jìn)行調(diào) 整,使之成為 正確的非壓縮BCD碼結(jié)果。,格式:AAA 功能:在ADD或ADC指令后,對兩個(gè)非壓縮BCD碼相加后存 放于AL中的和進(jìn)行調(diào)整,以獲得正確的非壓 縮BCD碼結(jié)果。 注意:只要低四位大于9,CF就置1,即記錄進(jìn)位。同時(shí)將AH加1.,2、AAS 減法的ASCII碼調(diào)整,3、AAM乗法的ASCII碼調(diào)整,格式:AAM 功能:用在8位無符號(hào)二進(jìn)制乘法MUL指令后
21、。對兩 個(gè)非壓縮型BCD碼相乘后存放于AX中的乘積 進(jìn)行調(diào)整,以得到正確的BCD碼乘積。,例:MOV AL,07H MOV BL,05H MUL BL ;此指令執(zhí)行完后(AX)=35D=0000 0000 0010 0011B=0023H AAM ;此指令執(zhí)行完后 (AX)=0000 0011 0000 0101B=0305H,4、AAD除法的ASCII碼調(diào)整,格式:AAD 功能:用在除法指令之前,將AX中的兩位非壓縮碼 轉(zhuǎn)換成真正的二進(jìn)制數(shù)。,例如:計(jì)算 34/5 MOV AX,0304H ;AX中存放34D的非壓縮BCD碼 AAD ;將AX的內(nèi)容調(diào)整為0000 0000 0010 0010
22、B 即0022H MOV BL,05H DIV BL ;除完后,余數(shù)(AH)=04H,商(AL)=06H,5.3.4 非壓縮型 BCD碼程序舉例,例5.4.2 計(jì)算56743829+95744856=? 用非壓縮型BCD碼存儲(chǔ)計(jì)算,并輸出。,分析:因?yàn)橛梅菈嚎s型BCD碼計(jì)算,所以采用從低到高 的存儲(chǔ)方法。 存儲(chǔ)方式或?yàn)橐韵聨追N:,1、NUM1 DB 09H ,02H, . 05H,00H 2、NUM1 DB 9,2,8,3,4,7,6,5,0 3、NUM1 DB 928347650 實(shí)現(xiàn)程序如下:,DATASEGMENT NUM1DB 928347650 NUM2DB 658447590 DA
23、TA ENDS ASC_ADD SEGMENT ASSUMECS:ASC_ADD,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,0,MOV CX,9 CLC L1: MOV AL,NUM1SI ADC AL,NUM2SI AAA,MOV NUM1SI,AL;(AL)=NUM1SI INC SI LOOPL1;CX-1=CX,CX=0?如果不等,繼續(xù)循環(huán),;下面完成計(jì)算結(jié)果從高位到低位的輸出 MOVCX,9 DEC SI L2:MOVDL,NUM1SI OR DL , 30H MOVAH,02H INT 21H DEC SI LOOP L2 MOV AH,
24、4CH INT 21H ASC_ADD ENDS END START,DATASEGMENT NUM1DB 928347650 NUM2DB 658447590 DATA ENDS ASC_ADD SEGMENT ASSUMECS:ASC_ADD,DS:DATA START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2,MOV CX,9 CLC L1: MOV AL,SI ADC AL,DI AAA,MOV SI,AL;(AL)=SI INC SI INC DI LOOPL1;CX-1=CX,CX=0?如果不等,繼續(xù)循環(huán)
25、,;下面完成計(jì)算結(jié)果從高位到低位的輸出 MOVAH,02H MOVCX,9 DEC SI L2:MOVDL,SI OR DL, 30H;將結(jié)果拼成ASCII碼 INT 21H DEC SI LOOP L2 MOV AH,4CH INT 21H ASC_ADD ENDS END START,MOV CX,9 CLC L1: MOV AL,SI ADC AL,DI AAA,LAHF ;因?yàn)橄乱粭l指令OR將改變標(biāo)志CF的值, ;所以要先將狀態(tài)標(biāo)志保存至AH OR AL,30H;將結(jié)果拼成ASCII碼 SAHF ;恢復(fù)狀態(tài)標(biāo)志寄存器的值,即將保存在AH ;中的標(biāo)志送標(biāo)志寄存器 MOV SI,AL;(A
26、L)=SI INC SI INC DI LOOPL1;CX-1=CX,CX=0?如果不等,繼續(xù)循環(huán),;下面完成計(jì)算結(jié)果從高位到低位的輸出 MOVAH,02H MOVCX,9 DEC SI L2:MOVDL,SI INT 21H DEC SI LOOP L2 MOV AH,4CH INT 21H ASC_ADD ENDS END START,5.4邏輯運(yùn)算程序,5.4.1邏輯指令,AND 邏輯與 OR 邏輯或 NOT 邏輯非 XOR 異或 TEST 測試,邏輯運(yùn)算可對字或字節(jié)運(yùn)算,并且是按位操作,所以,其操作數(shù)應(yīng)該是位串而不是數(shù)。,1、AND(and)邏輯與指令 格式:AND 目的操作數(shù),源操作
27、數(shù) 執(zhí)行的操作:目的操作數(shù)和源操作數(shù)進(jìn)行按位與運(yùn)算,將結(jié)果送回目的操作數(shù)。,例如: 與 ,可以看出,與操作可以用來給某些特定的位清0,比如,把AL寄存器存放的5的ASCII碼35H,高4位清0,僅留下有效的數(shù)值位5。 MOV AL , 35H AND AL, 0FH,或操作可以用來把某些特定位的值置1,比如,把DL寄存器存放的5,變?yōu)?的ASCII碼35H。 MOV DL , 05H OR DL , 30H,MOV AL , 55H NOT AL ;AL執(zhí)行結(jié)果為0AAH,例如: XOR AL , AL ;AL寄存器清0,5、TEST測試指令 格式: TEST 目的操作數(shù), 源操作數(shù) 執(zhí)行的操
28、作:目的操作數(shù)和源操作數(shù)進(jìn)行按位與運(yùn)算,結(jié)果不送回目的操作數(shù)。僅僅是影響狀態(tài)標(biāo)志位。,常用來檢測某個(gè)固定的位為 0,還是1。例如:檢測AL寄存器的第3位是否為0。 TEST AL , 00001000B ;如果AL的第3位為0,則計(jì)算結(jié)果影響狀態(tài)標(biāo)志位,使ZF=1。 JZ L1; 如果ZF=1,則轉(zhuǎn)向L1。,注意:在以上五種指令中,NOT不能是立即數(shù),其他四 條除非操作數(shù)是立即數(shù),否則至少有一個(gè)操作數(shù) 必須放在寄存器中另一個(gè)操作數(shù)則可以使用任意 尋址方式。它們對標(biāo)志位的影響是NOT指令不影 響標(biāo)志位,其他4種將使CF位和OF位為0,AF位 無定義,而SF,ZF位和PF位則根據(jù)運(yùn)算結(jié)果設(shè)置,5.
29、4.2移位指令,SHL邏輯左移 SAL算術(shù)左移 SHR邏輯右移 SAR算術(shù)右移 ROL 循環(huán)左移 ROR循環(huán)右移 RCL 帶進(jìn)位循環(huán)左移 RCR 帶進(jìn)位循環(huán)右移,1、移位指令, SHL 邏輯左移指令 格式: SHL 目的操作數(shù),CNT 執(zhí)行的操作如下圖所示:,其中OPR用除立即數(shù)外的任何尋址方式、移位次數(shù) 由CNT決定,在8086中它可以是1或CL,CNT為1時(shí) 只移一位,如果需要移位的次數(shù)大于 1,則可以在 該移位指令前把移位次數(shù)置于CL寄存器中,而移位 指令中的CNT寫為CL即可。,SAL 算術(shù)左移指令 格式: SAL 目的操作數(shù),CNT 執(zhí)行的操作與SHL相同。, SHR 邏輯右移指令
30、格式: SHR目的操作數(shù),CNT 執(zhí)行的操作如圖5.4所示。, SAR 算術(shù)右移指令 格式:SAR目的操作數(shù),CNT 執(zhí)行的操作如圖5.5所示。,ROL(rotate left)循環(huán)左移 格式:ROL目的操作數(shù),CNT 執(zhí)行的操作如圖5.6所示。,ROR(rotate right)循環(huán)右移 格式:ROR目的操作數(shù),CNT 執(zhí)行的操作如圖5.8所示。,RCL(rotate left through carry)帶進(jìn)位循環(huán)左移 格式:RCL目的操作數(shù),CNT 執(zhí)行的操作如圖5.7所示。,RCR(rotate right through carry)帶進(jìn)位循環(huán)右移 格式:RCR目的操作數(shù),CNT 執(zhí)
31、行的操作如圖5.9所示。,5.4.3 程序舉例,例5.5從鍵盤讀入一個(gè)十進(jìn)制數(shù),設(shè)此數(shù)以“;”為結(jié)束,且小于一個(gè)字大小,將其轉(zhuǎn)化成它所代表的二進(jìn)制數(shù)據(jù)。,分析: (1)從鍵盤讀入的是ASCII碼,首先轉(zhuǎn)換成對應(yīng)的十進(jìn)制數(shù)字 (2)按照習(xí)慣,從高位輸入,只需將先輸入的數(shù)*10,加上現(xiàn)在 輸入的數(shù)即可。,DATA SEGMENT BUF DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA MOV DS,AX : : END_L: MOV AH,4CH INT 21H CODE ENDS END START,MO
32、V BUF,0 IN_L: MOV AH,01H INT 21H CMP AL,; JE END_L AND AL,0FH SAL BUF,1 MOV BX,BUF SAL BUF,1 SAL BUF,1 ADD BUF,BX MOV AH,0 ADD BUF,AX JMP IN_L,例5.6 從鍵盤上輸入一個(gè)十進(jìn)制數(shù)(設(shè)有偶數(shù)個(gè)數(shù)字 位),以壓縮型BCD碼的方式存入內(nèi)存緩沖區(qū)。,分析: 1)首先將鍵入的數(shù)字字符以ASCII碼的方式存入內(nèi) 存緩沖區(qū)。 2)將ASCII碼轉(zhuǎn)換為壓縮型BCD碼。 程序如下:,DATA SEGMENT ASC_NUM DB 30 DUP(?) BCD_NUM DB
33、20 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX,DATA,MOV DS,AX MOV SI,OFFSET ASC_NUM ; 輸入并將ASCII碼存 儲(chǔ)到ASC_NUM中 MOV CX,0 ;CX用于記錄輸入字符的個(gè)數(shù) IN_ASC:MOV AH,01H INT 21H CMP AL,0DH ;和回車比較,如果相等,轉(zhuǎn)L2 JE L2 MOV SI,AL INC SI INC CX JMP IN_ASC L2:SHR CX,1; 壓縮型BCD碼所占字節(jié)數(shù)為字符個(gè)數(shù)/2,L3: MOV SI,OFFSET
34、 ASC_NUM MOV DI,OFFSET BCD_NUM L4: MOV DL,SI SHL DL,1 SHL DL,1 SHL DL,1 SHL DL,1 MOV AL,SI+1 AND AL,0FH OR DL,AL MOV DI,DL INC SI INC SI INC DI LOOP L4,MOV AH,4CH INT 21H CODE ENDS END START,例5.7 壓縮型BCD碼的輸出,設(shè)壓縮型BCD碼的存放是高位字節(jié)存放在高地址,低位字節(jié)存放在低地址,輸出時(shí)按照習(xí)慣從高位到低位輸出。,分析:一個(gè)字節(jié)里存放了兩位十進(jìn)制數(shù)字,因此需要將其分離出來,分離方法:先輸出高位,將
35、存放在DL里的壓縮型BCD碼右移四位,再拼成ASCII碼輸出即可,然后再將低位拼成ASCII碼,輸出。,程序如下:DATA SEGMENT BCD_NUM DB 34H,56H,78H,94H COUNT EQU $-OFFSET BCD_NUMDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BCD_NUM+3 MOV AH,4CH INT 21HCODE ENDS END START,MOV CX,COUNT L1: MOV DL,SI MOV BX,CX ;下面用到CX,先將CX保存起來 MOV CX,4 SHR DL,CL ;將存在DL里的壓縮型BCD碼右移4位 OR DL,3
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 智能反應(yīng)控制-洞察及研究
- 基因編輯再生應(yīng)用-洞察及研究
- 鏟車駕駛員安全事故心得體會(huì)
- 二手減速機(jī)購銷合同模板
- 【牛皮紙板流送抄紙工段工藝論證及流程分析3100字】
- 晉城市重點(diǎn)中學(xué)2025屆高二化學(xué)第二學(xué)期期末質(zhì)量檢測試題含解析
- 2025屆浙江省天略外國語學(xué)?;瘜W(xué)高一下期末檢測試題含解析
- 安徽省安師大附中2025屆高一下化學(xué)期末復(fù)習(xí)檢測試題含解析
- 2025至2030中國益康倍松行業(yè)市場占有率及投資前景評估規(guī)劃報(bào)告
- 2025至2030中國白芍浸膏行業(yè)市場占有率及投資前景評估規(guī)劃報(bào)告
- 云南保山永昌教育發(fā)展有限公司招聘考試真題2024
- 變電站改擴(kuò)建安全培訓(xùn)
- 《民營經(jīng)濟(jì)促進(jìn)法》金融支持條款的解讀與實(shí)施路徑研究
- 2023-2024學(xué)年山東省日照市高二下學(xué)期期末考試數(shù)學(xué)試題(解析版)
- 2024年 北京市公務(wù)員考試(行測)考試真題試題(附答案)
- 既有建筑地基基礎(chǔ)加固技術(shù)規(guī)范 JGJ 123-2012知識(shí)培訓(xùn)
- 2025至2030中國改裝車行業(yè)深度發(fā)展研究與企業(yè)投資戰(zhàn)略規(guī)劃報(bào)告
- 中醫(yī)執(zhí)業(yè)醫(yī)師歷年真題及解答
- 2025年7月浙江省普通高中學(xué)業(yè)水平考試歷史仿真模擬卷01(含答案)
- 2024-2025學(xué)年人教版PEP六年級下學(xué)期期末試卷(含答案含聽力原文無音頻)
- 2025-2030年中國聚脲涂料行業(yè)市場現(xiàn)狀供需分析及投資評估規(guī)劃分析研究報(bào)告
評論
0/150
提交評論