彙編---將輸入的字元數字轉化為二進位制資料
阿新 • • 發佈:2019-01-28
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
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)