Je suis en train de lire un fichier qui a des lignes comme celle-ciLecture d'un fichier formaté en masm
201; 18,5; 2500; 35 (4 informations, le second est un flotteur, les autres sont ints)
Et je veux convertir ces nombres en nombre décimal (pour fonctionner avec). Je n'utiliserai pas les capacités du flotteur 8086, par exemple "18,5", je multiplierai 18 par 1000 plus 5 fois 100, et les somme en un nombre (n'atteindra pas 64k).
Je connais les logiques, mais je ne sais pas comment faire.
Je dois lire jusqu'à ce que j'obtiens ";" ou "" ou "CR" (CRLF marque les lignes)
Voici ce que j'ai jusqu'à présent
atoi proc near
mov ax,0
atoi_2:
cmp byte ptr[bx], 0
jz atoi_1
mov cx,10
mul cx
mov ch,0
mov cl,[bx]
add ax,cx
sub ax,'0'
inc bx
jmp atoi_2
atoi_1:
ret
atoi endp
read_char_convert proc near
put_on_string: ;To convert using atoi
cmp FileBuffer, AscSemiColon ; is it ";"?
je column_count
cmp FileBuffer, AscComma ; Is it ","?
je fechar_string_comma
cmp FileBuffer, CR ; Is it "CR"?
je close_string_CR
;I CANT DO THIS
;add String, i
;mov String, FileBuffer
;inc i
mov si, i
mov String[si], FileBuffer ;THIS IS GETTING ME AN ERROR
inc i
close_string_comma:
columnCount:
call columnCounter
fechar_string_CR:
mov SemiColonCounter, 0 ; going to the next line
read_char_convert endp
columnCounter proc near
inc i
mov si, i
mov String[si], 0
inc SemiColonCounter
cmp SemiColonCounter, 1
je chamaConversaoTempo
cmp SemiColonCounter, 2
je chamaConversaoBateria
cmp SemiColonCounter, 3
je chamaConversaoDistancia
cmp SemiColonCounter, 4
je chamaConversaoVelocidade
callTimeConversion:
call speedConversion
jmp return_columnCounter
callBatteryConversion:
call batteryConversion
jmp return_columnCounter
callDistanceConversion:
call distanceConversion
jmp return_columnCounter
callSpeedConversion:
call speedConversion
;jmp return_columnCounter
retourn_columnCounter:
ret
columnCounter endp
timeConversion proc near
lea bx, String
call atoi
mov T_PARCIAL1, ax
cmp nbr_lines, 1
jne returnTime
mov bx, T_INICIAL
mov T_PARCIAL1, bx
returnTime:
ret
timeConversion endp
batteryConversion proc near
lea bx, String
call atoi
;cmp b_int, 1 ; flag -> 1 int part, 0, decimal part
jne mult_100
mov ax, THOUSAND ;constant
mul ax
mov B_PARCIAL1, ax
jmp jump_100
mult_100:
mov ax, HUNDRED
mul ax
add B_PARCIAL1, ax
jump_100:
cmp nbr_lines, 1
jne returnBattery
mov bx, B_INICIAL
mov B_PARCIAL1, bx
returnBattery:
ret
batteryConversion endp
distanceConversion proc near
lea bx, String
call atoi
mov D_PARCIAL1, ax
cmp nbr_lines, 1
jne returnDistance
mov bx, D_INICIAL
mov D_PARCIAL1, bx
returnDistance:
ret
distanceConversion endp
speedConversion proc near
lea bx, String
call atoi
mov V_PARCIAL1, ax
cmp nbr_lines, 1
jne returnSpeed
mov bx, V_INICIAL
mov V_PARCIAL1, bx
returnSpeed:
ret
speedConversion endp
Pouvez-vous les gars me aider? Merci
Hey, merci, je l'ai fait, pourriez-vous aider moi dans la recherche d'un moyen de lire ces valeurs séparément? – Caiorrs
Voici comment mon programme est en ce moment https://pastebin.com/7Gv2VpJ7 et un fichier d'entrée exemple https://pastebin.com/recaLkTF – Caiorrs