Сортировка и изменение значений в 32-битной сборке - PullRequest
0 голосов
/ 22 января 2020

Ниже я написал код, который будет сравнивать символы и перемещать буквы в буквенный массив, а цифры в числовой массив. Проблема в том, что когда я пытаюсь напечатать массив букв с помощью 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
...