私は現在、8086 のアセンブリでプログラミングしています。
私がやっている現在のタスクは、4 桁の 16 進数を 10 進数表現に変換することです。私は家庭教師の方法に従ってみましたが、特に0にするように言われたので、16進数に一時的な値を掛けなければならないセクションで混乱しています。 0になりますよね?
私がこれまでに持っているコードは以下の通りです。
; ------------------------------------
; Name : Gethex
; Function: converts a word (4 hex digits) into a numerical value
; Inputs : Upto a word hex values input into the console
; Outputs : Return within DX the numerical conversion
; ------------------------------------
Gethex:
MOV BX,0H ;Temp value to 0
MOV CX,0H ;Counter set to 0
Gethexloop:
call Getch
push DX ; Putch requires DL, need to save current reg
MOV DL,AL
call Putch
pop DX ; restore DL reg
MOV BH,AH ;Use BH as temp storage as AH will be corrupted
cmp AL,30H ; ASCII 0
JL Gethexloop ; If less than 0 jump to the start as not an Alphabetical char
cmp AL,39H ; ASCII 9
JLE Nums ; If less or equal to 9 then it will be a number
cmp AL,46H
JLE Case ; Start the conversion procedure
Case:
SUB AL,10
jmp Convert
Nums:
SUB AL,30 ; Convert to normal number
Convert:
push AX ; Prepare to multiply
MOV AX,BX
mul BX
POP AX
ADD AX,BX
ADD DX,AX ; final value
ADD CX,1 ; Increase counter
cmp CX,3 ; if greater than 4 (0 being included so 3)
JG EndLoop
jmp Gethexloop
EndLoop:
ret ; return to calling statement