小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

匯編(十二)——位操作類指令練習(xí)

 shamo9966 2015-09-29
種不同數(shù)制輸入/輸出的轉(zhuǎn)換

 

例12-1:數(shù)字0~9對(duì)應(yīng)的格雷碼為:18H,31H,05H,06H,09H,0AH,0CH,11H,12H,14H。編程將0~9數(shù)字轉(zhuǎn)換成格雷碼,并顯示輸出。
將0~9數(shù)字對(duì)應(yīng)的格雷碼作為轉(zhuǎn)換表,用轉(zhuǎn)換指令XLAT將AL中的在表中的相對(duì)偏移量轉(zhuǎn)換為轉(zhuǎn)換表中的格雷碼。格雷碼的輸出,因?yàn)楦窭状a為兩位十六進(jìn)制數(shù),需要用邏輯運(yùn)算指令或移位指令將兩位十六進(jìn)制數(shù)分離出來,在將其轉(zhuǎn)換為相應(yīng)的ASCII碼并顯示輸出(轉(zhuǎn)換也是使用了轉(zhuǎn)換指令XLAT)。
NAME  LI12-1.ASM
DATA SEGMENT
TABLE1 DB 18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H
TABLE2 DB 30H,31H,32H,33H,34H,35H,36H,37H
 DB 38H,39H,41H,42H,43H,44H,45H,46H
BUF DB ?
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
GO: MOV AX,DATA
 MOV DS:AX
 MOV DH,0H
 MOV CX,10
@1: MOV BX,OFFSET TABLE1
 MOV AL,DH
 XLAT TABLE1
 MOV BUF,AL
 MOV BX,OFFSET TABLE2
 SHR AL,1
 SHR AL,1
 SHR AL,1
 SHR AL,1
 XLAT TABLE2
 MOV DL,AL
 MOV AH,02H
 INT 21H
 MOV AL,BUF
 AND AL,0FH
 XLAT TABLE2
 MOV DL,AL
 MOV AH,02H
 INT 21H
 MOV DL,'H'
 INT 21H
 MOV DL,' '
 INT 21H
 INC DH
 LOOP @1
 MOV AH,4CH
 INT 21H
CODE ENDS
 END GO
例12-2:非壓縮型bcd碼的輸入(ASCII碼轉(zhuǎn)換成非壓縮BCD碼)。
假設(shè)從鍵盤上鍵入一個(gè)8位的十進(jìn)制數(shù),要求將他們以真正的非壓縮型BCD碼的形式存放在內(nèi)存輸入緩沖區(qū)。0~9數(shù)字的ASCII碼,只要將高4位清零,即為對(duì)應(yīng)的非壓縮BCD碼。假設(shè)從十進(jìn)制的高位開始輸入,轉(zhuǎn)換后從低地址字節(jié)開始依次存放。
NAME LI12-2.ASM
DATA SEGMENT
BUF DB 8DUP(?)
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
 MOV DS,AX
 MOV DI,OFFSET BUF
 MOV AH,01H
L01: INT 21H
 AND AL,0F
 MOV [DI],AL
 INC DI
 LOOP L01
 MOV AH,4CH
 INT 21H
CODE ENDS
 END START 
例12-3:非壓縮型BCD碼的輸出(非壓縮型BCD碼轉(zhuǎn)換成ASCII碼)。
將內(nèi)存緩沖區(qū)中的6位十進(jìn)制數(shù)字(非壓縮型BCD碼)顯示在屏幕上,假設(shè)十進(jìn)制數(shù)字低位存放在低地址,輸出時(shí)應(yīng)從高位依次顯示。顯示輸出數(shù)字時(shí),將0~9數(shù)字轉(zhuǎn)換成ASCII碼,即用OR指令將其高4位拼上3。
NAME LI12-3.ASM
DATA SEGMENT
A DB 06H,08H,04H,00H,03H
COUNT EQU $-OFFSET A
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
 MOV DS,AX
 MOV CX,COUNT
 MOV SI,OFFSET A+5
 MOV AH,02H
L01: MOV DL,[SI]
 OR DL,30H
 INT 21H
 DEC SI
 LOOP L01
 MOV AH,4CH
 INT 21H
CODE ENDS
 END START
例12-3:壓縮型BCD碼的輸入
從鍵盤上鍵入一個(gè)十進(jìn)制數(shù)字(如32495),以壓縮型BCD碼的形式存放在內(nèi)存緩沖區(qū)里。設(shè)計(jì)思想:首先將鍵入的數(shù)字字符以ASCII碼的形式存入具有30個(gè)字節(jié)的內(nèi)存緩沖區(qū)ASC_BUF;然后將ASC_BUF中的ASCII碼轉(zhuǎn)換成壓縮型BCD碼存入具有20個(gè)字節(jié)的內(nèi)存緩沖區(qū)BCD_BUF。從高位開始鍵入十進(jìn)制數(shù)字(例如:‘3’,‘2’,‘4’,‘9’,‘5’),以ASCII碼的形式從低地址字節(jié)開始依次存入ASC_BUF。數(shù)字以空格鍵為結(jié)束,并且在接收數(shù)字字符時(shí)在CX寄存器記下個(gè)數(shù)。若個(gè)數(shù)為奇數(shù)則將數(shù)字字符往后移動(dòng)一個(gè)字節(jié),空出的第一個(gè)字節(jié)填入‘0’,并將個(gè)數(shù)加1使之為偶數(shù)個(gè)。因此,個(gè)數(shù)減半為轉(zhuǎn)換成壓縮型BCD碼后所占的字節(jié)數(shù),將這個(gè)數(shù)字存入BCD_BUFF緩沖區(qū)的第一個(gè)字節(jié),然后,將ASC_BUF中的ASCII碼的高4位清0,并用邏輯指令和移位指令將它們每?jī)晌黄丛谝黄?,成為壓縮型BCD形式存入BCD_BUF(叢低地址的第2個(gè)字節(jié)開始一次存放)。
NAME LI12-3.ASM
DATA SEGMENT
ASC_BUF DB 30 DUP(?)
BCD_BUF DB 20 DUP(?)
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
 MOV AX,DATA
 MOV DS,AX
 MOV DI,OFFSET ASC_BUF
 MOV CX,0
 MOV AH,01H
L1: INT 21H
 CMP AL,' '
 JE L2
 MOV [DI],AL
 INC DI
 INC CX
 JMP L1
 TEST CX,01H
L2: JNE L4
 MOV DX,CX
 MOV SI,CX
L3: MOV AL,ASC_BUF[SI-1]
 MOV ASC_BUF[SI],AL
 DEC SI
 LOOP L3
 MOV ASC_BUF,'0'
 MOV CX,DX
 INC CX
L4: SHR CX,1
 MOV DI,OFFSET BCD_BUF
 MOV SI,OFFSET ASC_BUF
 MOV [DI],CL
 INC DI
LOOPER: 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
 ADD SI,2
 INC DI
 LOOP LOOPER
 MOV AH,4CH
 INT 21H
CODE ENDS
 END START
例12-4:壓縮型BCD碼的輸出。
將內(nèi)存緩沖區(qū)中的壓縮型BCD碼在屏幕上輸出。假設(shè)十進(jìn)制數(shù)字(壓縮型BCD碼)的低位放在低地址,因此輸出時(shí)需要從高地址(高位)開始。因?yàn)閴嚎s型BCD碼是一個(gè)字節(jié)里存放兩位十進(jìn)制數(shù)字,需要將兩位BCD碼分離出來。
NAME LI12-4.ASM
DATA SEGMENT
BUF DB 34H,04H,50H,47H,89H,00H,78H,90H
COUNT EQU $-OFFSET BUF
DATA ENDS
CODE    SEGMENT
 ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
 MOV DS,AX
 MOV CX,COUNT
 MOV SI,OFFSET BUF+7
LL: MOV DL,[SI]
 MOV BX,CX
 MOV CL,4
 SHR DL,CL
 OR DL,30H
 MOV AH,02H
 INT 21H
 MOV DL,[SI]
 AND DL,0FH
 OR DL,30H
 MOV AH,02H
 INT 21H
 DEC SI
 MOV CX,BX
 LOOP LL
 MOV AH,4CH
 INT 21H
CODE ENDS
 END START
例12-5:從鍵盤上輸入十六進(jìn)制數(shù)。
假設(shè)需要從鍵盤上輸入一個(gè)無符號(hào)的十六進(jìn)制數(shù),將其存入一個(gè)字存儲(chǔ)器里。如輸入14A0。假設(shè)鍵入的字符都是0~9,A~F字符之一。0~9的ASCII碼的高四位中的3去掉,就成為與其對(duì)應(yīng)的十六進(jìn)制數(shù)值。而A~F的ASCII碼比與之對(duì)應(yīng)的十六進(jìn)制數(shù)值均達(dá)37H,從ASCII碼中減去37H,就是相應(yīng)的十六進(jìn)制數(shù)值了。
NAME LI12-5.ASM
DATA SEGMENT
BUF DW ?
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
 MOV DS,AX
 MOV CX,4
 MOV BUF,0
L1: MOV AH,01H
 INT 21H
 SUB AL,30H
 CMP AL,0AH
 JNAE L2
 SUB AL,7
L2: MOV BX,CX
 MOV CL,4
 SHL BUF,CL
 MOV AH,0
 OR BUF,AX
 MOV CX,BX
 LOOP L1
 MOV AH,4CH
 INT 21H
CODE ENDS
 END START
例12-6:從鍵盤上輸入十進(jìn)制數(shù)并將其化為二進(jìn)制數(shù)(“十化二”輸入)。
對(duì)無符號(hào)整數(shù)來說,假設(shè)它的值不大于16位(一個(gè)字)所能表示的數(shù)的范圍(0~65535),則只需要將鍵入的0~9數(shù)字的ASCII轉(zhuǎn)換成對(duì)應(yīng)的數(shù)值送至AL,在把每一位十進(jìn)制數(shù)拼在一起時(shí),先將字緩沖區(qū)的內(nèi)容乘10,然后用算術(shù)加法指令A(yù)DD加上AX(AH=0)的內(nèi)容。假設(shè)鍵入的十進(jìn)制數(shù)字以“,”字符最為一個(gè)數(shù)的結(jié)束。
NAME LI12-6.ASM
DATA SEGMENT
BUF DW ?
DATA ENDS
CODE SEGMENT
 ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
 MOV DS,AX
 MOV BUF,0
IN_L: MOV AH,01H
 INT 21H
 CMP AL,','
 JE END_L
 AND AL,0FH
 SHLBUF,1
 MOV BX,BUF
 SHL BUF,1
 SHL BUF,1
 ADD BUF,BX
 MOV AH,0
 ADD BUF,AX
 JMP IN_L
END_L: MOV AH,4CH
 INT 21H
CODE ENDS
 END START
例12-7:二化十輸出。
在進(jìn)行算術(shù)運(yùn)算時(shí),常需要將二進(jìn)制的結(jié)果,轉(zhuǎn)換成十進(jìn)制數(shù)(BCD碼)形式,進(jìn)一步轉(zhuǎn)換成ASCII碼顯示或打印出來(簡(jiǎn)稱“二化十”輸出)。假設(shè)我們把CX寄存器中的無符號(hào)整數(shù)進(jìn)行二化十輸出,則需要把CX中的數(shù)值轉(zhuǎn)換成BCD碼,也就是檢查CX中的二進(jìn)制數(shù)包含有多少個(gè)10000(2710H),多少個(gè)1000(03E8H),多少個(gè)100(64H),多少個(gè)10(0AH),在把這些數(shù)以及剩下的個(gè)位數(shù)拼上30H,使之變成對(duì)應(yīng)的ASCII碼,輸出顯示。
NAME LI12-7.ASM
CODE SEGMENT
 ASSUME CS:CODE
START: MOV CX,0A2F0H
 MOV DL,0
L1: CMP CX,2710H
 JNAE L2
 INC DL
 SUB CX,2710H
 JMP L1
L2: OR DL,30H
 MOV AH,02H
 INT 21H
 MOV DL,0
L3: CMP CX,03E8H
 JNAE L4
 INC DL
 SUB CX,03E8H
 JMP L3
L4: OR DL,30H
 MOV AH,02H
 INT 21H
 MOV DL,0
L5: CMP CX,64H
 JNAE L6
 INC DL
 SUB CX,64H
 JMP L5
L6: OR DL,30H
 MOV AH,02H
 INT 21H
 MOV DL,0
L7: CMP CX,0AH
 JNAE L8
 INC DL
 SUB CX,0AH
 JMP L7
L8: OR DL,30H
 MOV AH,02H
 INT 21H
 MOV DL,CL
 OR DL,30H
 MOV AH,02H
 INT 21H
 MOV AH,4CH
 INT 21H
CODE  ENDS
 END START

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多