您好,登錄后才能下訂單哦!
本篇內容主要講解“匯編語言怎么實現各種碼制的轉換”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“匯編語言怎么實現各種碼制的轉換”吧!
設計轉換程序,將鍵盤鍵入的四位十六進制數據轉換為等值的二進制數,并在終端顯示。要求:完善程序結構,設置程序錯誤出口。輸入的不是0-F間的值,顯示錯誤提示信息,并要求重新輸入。
依次輸入四個十六進制數并依次存放到BX中,最后將BX中結果一位一位輸出為二進制。
DATA SEGMENT pkey DB "pleas input 4 hex(0~F):$" ekey DB 0dh,0ah,'it is wrong!',0dh,0ah,'pleas input 4 hex(0~F) again:','$' huiche DB 0dh,0ah,'result is:',0dh,0ah,'$' numm DB 5 dup(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX MOV CX,4 ;輸入十六進制數循環4次 LEA SI,numm ;開辟變址寄存器SI LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 lp: MOV AH, 1 INT 21H ;DOS功能調用,輸入4個十六進制數 CMP AL,'9' JA abow9 CMP AL,'0' JB eero SUB AL,30h ;輸入為0~9時ASCII碼減30H存放 JMP lop eero:LEA DX, ekey ;輸入不在0~9且不在A~F時,顯示錯誤 MOV AH, 9 INT 21H JMP lp abow9:CMP AL,'A' JNB abowa JMP eero abowa:CMP AL,'F' JA eero SUB AL,37h ;輸入為A~F時ASCII碼減37H存放 JMP lop lop: MOV [SI],AL ROL BX,4 ADD BX,[SI] ;將輸入的數據存入BX寄存器中 INC SI DEC CX JNZ lp MOV CX,16 ;輸出二進制數循環16次 LEA DX,huiche MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 lp1: ROL BX,1 ;左移1位后顯示的是最高位 MOV DL,BL AND DL,01H ;屏蔽DL高7位 ADD DL,30H ;加30H對應ASCII碼 MOV AH,2 INT 21H ;DOS功能調用,將內容按位輸出 DEC CX JNZ lp1 CODE ENDS END STATE
存放和輸出時會遇到一些小問題,本程序通過移位和加法指令實現存放,比較麻煩但可以實現,后面的程序有所改進。
圖1 十六進制轉換為二進制數設計結果
設計轉換程序,將鍵盤輸入的一位十六進制數轉換為等值的十進制數,并在終端顯示。設計要求:完善程序結構,設置程序錯誤出口。輸出的不是0-F間的數字,顯示錯誤提示信息,并要求重新輸入。
輸入一位十六進制數,判斷是否為0~9,a~f,A~F,各自轉換后輸出。
DATA SEGMENT pkey DB 0dh,0ah,"pleas input 1 hex(0~F):$" huiche DB 0dh,0ah,'result is:$' end2 DB 0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$' numm DB 3 dup(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX LEA SI,numm ;開辟緩沖區 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 LP: MOV AH, 1 INT 21H ;DOS功能調用,輸入1個十六進制數 CMP AL,'9' JA abow9 CMP AL,'0' JB eero ;輸入小于0重新輸入 ADD AH,2FH ;輸入為0~9高位給0輸出 JMP OUTPUT abow9: CMP AL,'A' JNB abowA JMP eero ;輸入大于9小于A重新輸入 abowA:CMP AL,'F' JA abowF SUB AL,11H ADD AH,30H ;輸入A~F高位給1,低位減11H輸出 JMP OUTPUT abowF:CMP AL,'a' JNB abow1a JMP eero ;輸入大于F小于a重新輸入 abow1a:CMP AL,'f' JA eero ;輸入大于f重新輸入 SUB AL,31H ADD AH,30H ;輸入a~f高位給1,低位減31H輸出 JMP OUTPUT eero:LEA DX,end2 MOV AH,9 INT 21H ;DOS功能調用,輸出錯誤字符串 JMP LP OUTPUT: MOV BX,AX LEA DX,huiche MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 MOV [SI],BH MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能調用,高位輸出 MOV [SI],BL MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能調用,低位輸出 JMP STATE CODE ENDS END STATE
這里輸出分高位和低位輸出,因為是一位十六進制數的轉換,如果換兩位或更多就需要將程序修改到更智能化。
圖2 十六進制轉換為十進制數設計結果
設計轉換程序,將鍵盤鍵入的十六進制數據轉換為對應的ASCII碼,并在終端顯示。
將輸入數的高位左移轉ASCII輸出,低位轉ASCII輸出。
DATA SEGMENT pkey DB 0dh,0ah,"please input 1 hex(0~F):$" huiche DB 0dh,0ah,'result is:$' end2 DB 0dh,0ah,'it is wrong',0dh,0ah,'please input 1 hex(0~F) again:','$' numm DB 3 dup(0) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX LEA SI,numm ;開辟緩沖區 LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 LP: MOV AH, 1 INT 21H ;DOS功能調用,輸入1個十六進制數 CMP AL,'9' JA abow9 CMP AL,'0' JB end1 ;輸入小于0重新輸入 JMP OUTPUT abow9: CMP AL,'A' JNB abowA JMP end1 ;輸入大于9小于A重新輸入 abowA:CMP AL,'F' JA end1 ;輸入大于F重新輸入 JMP OUTPUT end1:LEA DX,end2 MOV AH,9 INT 21H ;DOS功能調用,輸出錯誤字符串 JMP LP OUTPUT: MOV BX,AX ROL BX,4 AND BH,0FH ADD BH,30H ;高位是AX左移四位再加30H得到 AND AL,0FH MOV BL,AL ADD BL,30H ;低位是AL低四位加30H得到 LEA DX,huiche MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 MOV [SI],BH MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能調用,高位輸出 MOV [SI],BL MOV DL,[SI] MOV AH,2 INT 21H ;DOS功能調用,低位輸出 JMP STATE CODE ENDS END STATE
圖3 十六進制轉換為ASCII碼設計結果
英文字母大小寫轉換本質上是ASCII碼直接的轉換。要求掌握大小寫字母在計算機內的表示方法及轉換方法。設計程序,連續將鍵盤輸入的小寫字母轉換為大寫字母,并在終端顯示。設計要求:小寫字母轉換為大寫字母輸出,非字母或大寫字母輸入,不做處理直接輸出。
判斷輸入是否為a~z,是的話減20H輸出,不是直接輸出。
DATA SEGMENT pkey DB 0dh,0ah,"pleas input:$" result DB 0dh,0ah,'result is:','$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA STATE: MOV AX,DATA MOV DS,AX ;初始化數據段 LP: LEA DX,pkey MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 MOV AH, 1 INT 21H ;DOS功能調用,鍵盤輸入 CMP AL,'z' JA LLP CMP AL,'a' ;輸入不在a~z之間直接輸出 JB LLP SUB AL,20H ;輸入為a~z轉換,ASCII碼減20H MOV BL,AL OUTPUT: LEA DX,result MOV AH,9 INT 21H ;DOS功能調用,輸出字符串 MOV DL,BL MOV AH,2 INT 21H ;DOS功能調用,輸出DL中內容 JMP LP LLP: MOV BL,AL JMP OUTPUT CODE ENDS END STATE
圖4 英文字母大小寫轉換設計結果
到此,相信大家對“匯編語言怎么實現各種碼制的轉換”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。