Ниже я написал код, который будет сравнивать символы и перемещать буквы в буквенный массив, а цифры в числовой массив. Проблема в том, что когда я пытаюсь напечатать массив букв с помощью printf, он на самом деле ничего не печатает. Я думаю, что сделал ошибку, когда я перемещал значения из массива, в котором есть все символы, в другой массив, но я не уверен.
litere times 255 db 0
numere times 255 db '?'
mov ESI,0 ;index of the full array of characters from text file
mov EDI,0 ;index of numbers array
mov EBX,0 ;index of letters array
mov ECX,[numar_caractere_citite] ;the number of all numbers and letters from the original array
repeta:
push ECX
mov DL,byte[continut_fisier+esi]
cmp DL,"0"
jl cmp_litere
cmp DL,"9"
jg cmp_litere ;if EDX>=0 && EDX <= 9 --> we found a number
jmp found_cifra
cmp_litere:
cmp DL, "A" ; compare EDX with "A"
jl continua ; jump to next character if less
cmp DL, "Z" ; compare EDX with "Z"
jle found_letter ; if EDX is >= "A" && <= "Z" -> found a letter
cmp DL, "a" ; compare EDX with "a"
jl continua ; jump to next character if less (since it's between "Z" & "a")
cmp DL, "z" ; compare EDX with "z"
jg continua ; above "Z" -> not a character
found_letter:
mov [litere+EBX],byte DL
inc EBX
jmp continua
found_cifra :
mov [numere+EDI],byte DL
inc EDI
continua:inc ESI
pop ECX
loop repeta
; ЗДЕСЬ я пытаюсь напечатать каждый символ из литерального массива
mov ECX,[dim_sir_litere] ;number of letters from litere array
mov ESI,0
afisare_litere:
push ECX
mov AL, byte [litere+ESI]
cbw
cwde
push dword EAX
push dword format_caracter ;format is %c
call [printf]
add ESP, 4*2
inc ESI
pop ECX
loop afisare_litere
=== >> ОБНОВЛЕНИЕ << ===== ЭТОТ КОД, КОТОРЫЙ АКТУАЛЬНЫЙ РАБОТАЮЩИЙ </p>
mov [dim_sir_litere], EBX ;the length of letters array
mov EBX,[dim_sir_litere] ;number of letters from litere array
mov ESI,litere
afisare_litere:
lodsb
push dword EAX
push dword format_caracter ;format is %c
call [printf]
add ESP, 4*2
sub EBX,1
cmp EBX,0
jne afisare_litere