1. 程式人生 > >彙編---將輸入的字元數字轉化為二進位制資料

彙編---將輸入的字元數字轉化為二進位制資料

assume cs:code,ds:data
data segment
 BUFFER DB 6,?,6 DUP(?)
 C10 DW 10
data ends

code segment
 start: MOV AX,DATA
        MOV DS,AX
        MOV AH,0AH
        INT 21H
        MOV AX,0
        MOV CL,BUFFER+1
        MOV CH,0
        LEA BX,BUFFER+2

     s: MUL C10
        MOV DL,[BX]
        AND DL,0FH
        ADD
AL,DL ADC AH,0 INC BX LOOP s MOV AX,4C00H INT 21H code ends end start

BUFFER DB 6,?,6 DUP(?):資料段在記憶體中定義7個位元組的資料BUFFER,第一個6表示輸入的數字最大長度為6

MOV AH,0AH INT 21H:鍵盤輸入到緩衝區,DS:DX=緩衝區首地址,(DS:DX)=緩衝區最大字元數 ,傳入引數:(DS:DX+1)=實際輸入的字元數

MOV CL,BUFFER+1:將輸入的字元數用來作為迴圈的次數

MUL C10

: MUL C10(10H) 等於進位 十六進位制資料乘10H即進位

MOV DL,[BX] AND DL,0FH:比如
“1”ascll碼:0011_0001
與0F(0000_1111) AND 得到 0000_0001
即把字元1變為了數字1

ADD AL,DL ADC AH,0:把轉化後資料放入AX中,迴圈第一次時第一次AX是0,所以直接相加,第二次時之前的位進位後與再次的到的各位相加

INC BX:繼續對下一位字元轉換

執行:

輸入1234
這裡寫圖片描述
第一次將字元1 變為數字1 則AX暫存器:
這裡寫圖片描述
進位後 1變為10 則AX暫存器(000A):
這裡寫圖片描述
第二次將字元 2 變為數字2 即 總共將12 轉換為
數字12 則AX暫存器(000C):
這裡寫圖片描述


最終結果 將字元1234 轉化為數字1234 則AX暫存器(04D2)
這裡寫圖片描述