中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

匯編語言如何將16進制轉10進制

發布時間:2020-07-21 17:30:43 來源:億速云 閱讀:391 作者:小豬 欄目:開發技術

小編這次要給大家分享的是匯編語言如何將16進制轉10進制,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

 使用8086匯編,輸入一個16進制的數,程序把該16進制數轉換為相應的10進制數輸出

程序運行截圖:

匯編語言如何將16進制轉10進制

要實現這樣一個程序,思路可以是這樣的:

  1.由于我們讀入的鍵盤輸入是ASCII碼表示的,且輸入一個字符便得到一個ASCII碼,如輸入ab,程序中可以得到61h和62h。現在的問題是怎么把這些輸入的字符表示成一個完整的數。對于這個問題,我們可以把每次輸入的字符的ASCII碼先轉換為對應的數,0-9之間的數,根據ASCII碼表發現可以用 ASCII碼減30h 得到0-9對應的十六進制數值,對于a-b,用ASCII碼減57h 得到a-b對應的十六進制數值。

  2.得到這些對應的數值之后,要把它們按輸入順序組合起來,這里可以用移位運算來組合,如根據輸入轉換得 1、2兩個十六進制數值,1的二進制表示為0001,2的二進制表示為0010,把0001左移4位得到00010000,加上0010,得到0001010,00010010表示的便是12h。

  3.把輸入轉換為數值之后就準備要輸出了,可采用除10法得到各個位上的數,如要輸出110,先要把110轉為 1、1、0 再把對應的數值加上30h轉為ASCII碼后輸出,把110轉換為 1、1、0,110除以10商為11,余數為0,此時余數作為個位上的數,得到個位為0;再用上一步的商11作為被除數除以10,得到商為10,余數為1,此時余數作為十位上的數,得到十位為1;重復上述步驟,商1作為被除數除以10,商0余1,得到百位為1,此時商等于0,算法結束。

DATAS SEGMENT
  bin dw 10 dup(?)  ;存放二進制結果
  buf db 5 dup(?)   ;存放十進制數 各個數位上的數值 如100,存放為 1,0,0
  msg1 db 'please input a hex number',13,10,'$'
  msg2 db 'the dec number:',13,10,'$'
  crlf db 13,10,'$'  ;回車換行
DATAS ENDS

CODES SEGMENT
  ASSUME CS:CODES,DS:DATAS
START:
  MOV AX,DATAS
  MOV DS,AX
  
    mov bx,0    ;初始化bx
    
    LEA dx,msg1    ;輸出提示字符串
    mov ah,9
    int 21h
    
 input:
    mov ah,1    ;輸入一個字符
    int 21h
    
    sub al,30h    ;把al中的ascii碼轉換成數值
    jl init
  
    cmp al,10    ;輸入的數在0-9之間跳轉
    jl toBin
    
    sub al,27h    ;再轉換為a-f
    cmp al,0ah    ;輸入的字符比a小
    jl init      ;結束輸入
    cmp al,10h    ;輸入的字符比f大
    jge init    ;結束輸入
    
 toBin:      ;轉換為二進制,把輸入組合成意義上的數值
    mov cl,4    
    shl bx,cl    ;bx左移4位
    mov ah,0    
    add bx,ax    ;把輸入后并從ascii碼轉換來的值與bx相加
    mov bin,bx    ;轉換成二進制數后存到內存bin
    jmp input    ;繼續輸入
    
 init:        ;初始化,準備轉換
   mov ax,bin    
   mov bx,10    
   mov si,4    ;循環四次,最大到萬位
   
 toDec:      ;轉為各個數位上的數值,如100轉換為1,0,0 百位為1...
   mov dx,0    
   div bx      ;除10法得到各個位上的數值
   mov [buf+si],dl  ;余數為該位上的值,第一次循環為個位,第二次為十位...;存到內存中
   dec si      
   cmp ax,0    ;商是否為0,為0算法結束
   ja toDec
 

   lea dx,crlf      ;顯示提示
   mov ah,9
   int 21h
   lea dx,msg2
   mov ah,9
   int 21h
   
 output:        ;輸出內存中存放的各個數位上的數值
   inc si
   mov dl,[buf+si]
   add dl,30h      ;轉為ascii
   mov ah,2
   int 21h
   cmp si,4
   jb output
   
  
  mov ah,1
  int 21h
  MOV AH,4CH
  INT 21H
CODES ENDS
  END START

看完這篇關于匯編語言如何將16進制轉10進制的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

丹巴县| 石狮市| 同心县| 广德县| 台江县| 绥德县| 衡山县| 延寿县| 化州市| 抚远县| 凭祥市| 兰西县| 衡南县| 安西县| 杭锦后旗| 轮台县| 锦州市| 华坪县| 台中县| 辽阳县| 来安县| 北碚区| 阳山县| 皮山县| 延川县| 红河县| 平定县| 康乐县| 荣昌县| 梁山县| 庆安县| 六盘水市| 凤凰县| 南安市| 财经| 普安县| 胶南市| 呼和浩特市| 独山县| 通州市| 北流市|