最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

匯編語言系列之匯編實(shí)現(xiàn)各種碼制的轉(zhuǎn)換(思路詳解)

 更新時(shí)間:2021年11月27日 12:44:51   作者:BoBoRing  
本文列出了十六進(jìn)制轉(zhuǎn)二進(jìn)制、十進(jìn)制、ASCII碼及大小寫字母轉(zhuǎn)換的代碼,對匯編語言系列之實(shí)現(xiàn)各種碼制的轉(zhuǎn)換問題感興趣的朋友跟隨小編一起看看吧

軟件:emu8086

語言:匯編語言(Assembly)

注意:本文列出了十六進(jìn)制轉(zhuǎn)二進(jìn)制、十進(jìn)制、ASCII碼及大小寫字母轉(zhuǎn)換的代碼,全部代碼為博主獨(dú)自一人編寫,會(huì)有瑕疵,謹(jǐn)慎使用。

1.十六進(jìn)制轉(zhuǎn)換為二進(jìn)制數(shù)設(shè)計(jì)

1.1設(shè)計(jì)要求:

設(shè)計(jì)轉(zhuǎn)換程序,將鍵盤鍵入的四位十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為等值的二進(jìn)制數(shù),并在終端顯示。要求:完善程序結(jié)構(gòu),設(shè)置程序錯(cuò)誤出口。輸入的不是0-F間的值,顯示錯(cuò)誤提示信息,并要求重新輸入。

1.2設(shè)計(jì)思路:

依次輸入四個(gè)十六進(jìn)制數(shù)并依次存放到BX中,最后將BX中結(jié)果一位一位輸出為二進(jìn)制。

1.3程序清單:

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       ;輸入十六進(jìn)制數(shù)循環(huán)4次
    LEA SI,numm     ;開辟變址寄存器SI
    LEA DX,pkey
    MOV AH,9
    INT 21H          ;DOS功能調(diào)用,輸出字符串
               
lp: MOV AH, 1
    INT 21H          ;DOS功能調(diào)用,輸入4個(gè)十六進(jìn)制數(shù)
    CMP AL,'9'
    JA abow9 
    CMP AL,'0'
    JB eero
    SUB AL,30h      ;輸入為0~9時(shí)ASCII碼減30H存放
    JMP lop  
    
eero:LEA DX, ekey     ;輸入不在0~9且不在A~F時(shí),顯示錯(cuò)誤
     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時(shí)ASCII碼減37H存放
      JMP lop 
    
lop: MOV [SI],AL
    ROL BX,4
    ADD BX,[SI]    ;將輸入的數(shù)據(jù)存入BX寄存器中
    INC SI
    DEC CX 
    JNZ lp
    MOV CX,16      ;輸出二進(jìn)制數(shù)循環(huán)16次
    LEA DX,huiche
MOV AH,9     
INT 21H        ;DOS功能調(diào)用,輸出字符串

lp1: ROL BX,1        ;左移1位后顯示的是最高位
    MOV DL,BL
    AND DL,01H     ;屏蔽DL高7位
    ADD DL,30H     ;加30H對應(yīng)ASCII碼
    MOV AH,2
    INT 21H        ;DOS功能調(diào)用,將內(nèi)容按位輸出
    DEC CX 
    JNZ lp1
          
CODE ENDS

END STATE

1.4程序運(yùn)行結(jié)果及分析:

存放和輸出時(shí)會(huì)遇到一些小問題,本程序通過移位和加法指令實(shí)現(xiàn)存放,比較麻煩但可以實(shí)現(xiàn),后面的程序有所改進(jìn)。

圖1 十六進(jìn)制轉(zhuǎn)換為二進(jìn)制數(shù)設(shè)計(jì)結(jié)果

2.十六進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)設(shè)計(jì)

2.1設(shè)計(jì)要求:

設(shè)計(jì)轉(zhuǎn)換程序,將鍵盤輸入的一位十六進(jìn)制數(shù)轉(zhuǎn)換為等值的十進(jìn)制數(shù),并在終端顯示。設(shè)計(jì)要求:完善程序結(jié)構(gòu),設(shè)置程序錯(cuò)誤出口。輸出的不是0-F間的數(shù)字,顯示錯(cuò)誤提示信息,并要求重新輸入。

2.2設(shè)計(jì)思路:

輸入一位十六進(jìn)制數(shù),判斷是否為0~9,a~f,A~F,各自轉(zhuǎn)換后輸出。

2.3程序清單:

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     ;開辟緩沖區(qū)
    LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能調(diào)用,輸出字符串
    
LP: MOV AH, 1
    INT 21H         ;DOS功能調(diào)用,輸入1個(gè)十六進(jìn)制數(shù)
    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功能調(diào)用,輸出錯(cuò)誤字符串 
     JMP LP
           
OUTPUT:
     MOV BX,AX
     LEA DX,huiche
     MOV AH,9
     INT 21H         ;DOS功能調(diào)用,輸出字符串
     MOV [SI],BH 
     MOV DL,[SI]
     MOV AH,2
     INT 21H        ;DOS功能調(diào)用,高位輸出
     MOV [SI],BL 
     MOV DL,[SI]
     MOV AH,2
     INT 21H        ;DOS功能調(diào)用,低位輸出 
     JMP STATE
            
CODE ENDS

END STATE

2.4程序運(yùn)行結(jié)果及分析:

這里輸出分高位和低位輸出,因?yàn)槭且晃皇M(jìn)制數(shù)的轉(zhuǎn)換,如果換兩位或更多就需要將程序修改到更智能化。

圖2 十六進(jìn)制轉(zhuǎn)換為十進(jìn)制數(shù)設(shè)計(jì)結(jié)果

3.十六進(jìn)制轉(zhuǎn)換為ASCII碼

3.1設(shè)計(jì)要求:

設(shè)計(jì)轉(zhuǎn)換程序,將鍵盤鍵入的十六進(jìn)制數(shù)據(jù)轉(zhuǎn)換為對應(yīng)的ASCII碼,并在終端顯示。

3.2設(shè)計(jì)思路:

將輸入數(shù)的高位左移轉(zhuǎn)ASCII輸出,低位轉(zhuǎn)ASCII輸出。

3.3程序清單:

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     ;開辟緩沖區(qū)
    LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能調(diào)用,輸出字符串
    
LP: MOV AH, 1
    INT 21H         ;DOS功能調(diào)用,輸入1個(gè)十六進(jìn)制數(shù)
    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功能調(diào)用,輸出錯(cuò)誤字符串
     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功能調(diào)用,輸出字符串  
     MOV [SI],BH 
     MOV DL,[SI]
     MOV AH,2
     INT 21H          ;DOS功能調(diào)用,高位輸出 
     MOV [SI],BL 
     MOV DL,[SI]
     MOV AH,2
     INT 21H          ;DOS功能調(diào)用,低位輸出
     JMP STATE 

CODE ENDS

END STATE

3.4程序運(yùn)行結(jié)果及分析:

圖3 十六進(jìn)制轉(zhuǎn)換為ASCII碼設(shè)計(jì)結(jié)果

4.英文字母大小寫轉(zhuǎn)換設(shè)計(jì)

4.1設(shè)計(jì)要求:

英文字母大小寫轉(zhuǎn)換本質(zhì)上是ASCII碼直接的轉(zhuǎn)換。要求掌握大小寫字母在計(jì)算機(jī)內(nèi)的表示方法及轉(zhuǎn)換方法。設(shè)計(jì)程序,連續(xù)將鍵盤輸入的小寫字母轉(zhuǎn)換為大寫字母,并在終端顯示。設(shè)計(jì)要求:小寫字母轉(zhuǎn)換為大寫字母輸出,非字母或大寫字母輸入,不做處理直接輸出。

4.2設(shè)計(jì)思路:

判斷輸入是否為a~z,是的話減20H輸出,不是直接輸出。

4.3程序清單:

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       ;初始化數(shù)據(jù)段
    
LP: LEA DX,pkey
    MOV AH,9
    INT 21H         ;DOS功能調(diào)用,輸出字符串
    MOV AH, 1
    INT 21H         ;DOS功能調(diào)用,鍵盤輸入
    CMP AL,'z'
    JA LLP  
    CMP AL,'a'       ;輸入不在a~z之間直接輸出
    JB LLP
    SUB AL,20H      ;輸入為a~z轉(zhuǎn)換,ASCII碼減20H          
    MOV BL,AL
           
OUTPUT:
     LEA DX,result
     MOV AH,9
     INT 21H         ;DOS功能調(diào)用,輸出字符串
     MOV DL,BL
     MOV AH,2
     INT 21H         ;DOS功能調(diào)用,輸出DL中內(nèi)容
     JMP LP                          
     
LLP: MOV BL,AL
     JMP OUTPUT    
            
CODE ENDS

END STATE

4.4程序運(yùn)行結(jié)果及分析:

圖4 英文字母大小寫轉(zhuǎn)換設(shè)計(jì)結(jié)果

相關(guān)文章

  • 匯編語言DOSBox及debug.exe在Windows64下環(huán)境搭建

    匯編語言DOSBox及debug.exe在Windows64下環(huán)境搭建

    這篇文章主要為大家介紹了匯編語言環(huán)境的搭建DOSBox及debug.exe在Windows64下安裝配置過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 匯編語言實(shí)現(xiàn)電子鬧鐘思路詳解

    匯編語言實(shí)現(xiàn)電子鬧鐘思路詳解

    這篇文章主要介紹了匯編語言實(shí)現(xiàn)電子鬧鐘思路詳解,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 用匯編語言實(shí)現(xiàn)從1加到100的方法(1+2+...+100)

    用匯編語言實(shí)現(xiàn)從1加到100的方法(1+2+...+100)

    這篇文章主要介紹了用匯編語言實(shí)現(xiàn)從1加到100的方法(1+2+...+100),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 匯編語言中XLAT查表指令的使用

    匯編語言中XLAT查表指令的使用

    XLAT指令是匯編語言查表指令,本文主要介紹了匯編語言中XLAT查表指令的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 匯編語言 寄存器內(nèi)存訪問原理解析

    匯編語言 寄存器內(nèi)存訪問原理解析

    這篇文章主要介紹了匯編語言 寄存器內(nèi)存訪問原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 匯編語言Debug命令詳解教程

    匯編語言Debug命令詳解教程

    這篇文章主要為大家介紹了匯編語言Debug命令的教程,文中對Debug的命令進(jìn)行了全面的講解有需要的朋友可以借鑒參考共同學(xué)習(xí)下,希望能夠有所幫助
    2021-11-11
  • UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP

    UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP

    這篇文章主要為大家介紹了UEFI開發(fā)實(shí)戰(zhàn)SlimBootloader中調(diào)用FSP基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • 匯編語言 輸入10個(gè)數(shù)排序并輸出的實(shí)現(xiàn)

    匯編語言 輸入10個(gè)數(shù)排序并輸出的實(shí)現(xiàn)

    這篇文章主要介紹了匯編語言 輸入10個(gè)數(shù)排序并輸出的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Debug的基本使用()

    Debug的基本使用()

    Debug是一個(gè)通過操作系統(tǒng)(os)對cpu寄存器進(jìn)行訪問用于學(xué)習(xí)匯編的程序,但是如今的win10(64位)已經(jīng)不支持cmd打開debug,但是我們可以通過DOSBOX模擬器對其進(jìn)行訪問
    2023-08-08
  • 匯編語言mov指令及基本用法

    匯編語言mov指令及基本用法

    在匯編語言中,MOV指令是數(shù)據(jù)傳送指令,也是最基本的編程指令,用于將一個(gè)數(shù)據(jù)從源地址傳送到目標(biāo)地址(寄存器間的數(shù)據(jù)傳送本質(zhì)上也是一樣的)。這篇文章給大家介紹匯編語言mov指令及基本用法,感興趣的朋友一起看看吧
    2020-01-01

最新評論

永吉县| 广东省| 马鞍山市| 临海市| 大庆市| 淮北市| 青川县| 洛扎县| 余姚市| 大荔县| 梁山县| 湟中县| 镇平县| 苏州市| 崇阳县| 无极县| 凤阳县| 武夷山市| 和政县| 金坛市| 九龙坡区| 大港区| 汤原县| 钦州市| 资中县| 三台县| 嘉峪关市| 龙州县| 邵阳市| 松潘县| 肃南| 松滋市| 江门市| 丽江市| 大方县| 永和县| 乌鲁木齐市| 齐河县| 德保县| 延庆县| 唐河县|