NASM один неверный способ проверки данных - PullRequest
0 голосов
/ 04 мая 2020

Итак, я пишу программу, которая создает матрицу 4x5, и я почти сделал это. Я храню данные в строках, чтобы проверить, какая информация там хранится. Когда я правильно ввожу данные - хорошо, но если я делаю хотя бы одну ошибку (например, + 12asd), я вижу, что моя программа снова работает из "array [3] [0]", когда я ее ввел. Что не так?

; Task: write a program that allows to enter 2-D array 4x5. Show only 2 first columns.



section .bss ; The section intended for uninitilizated data
    string_00 resb 7
    string_01 resb 7
    string_02 resb 7
    string_03 resb 7
    string_04 resb 7

    string_10 resb 7
    string_11 resb 7
    string_12 resb 7
    string_13 resb 7
    string_14 resb 7

    string_20 resb 7
    string_21 resb 7
    string_22 resb 7
    string_23 resb 7
    string_24 resb 7

    string_30 resb 7
    string_31 resb 7
    string_32 resb 7
    string_33 resb 7
    string_34 resb 7

section .data ; The section designed for using initilizated data

    pointer_0 dd string_00, string_01, string_02, string_03, string_04
    pointer_1 dd string_10, string_11, string_12, string_13, string_14
    pointer_2 dd string_20, string_21, string_22, string_23, string_24
    pointer_3 dd string_30, string_31, string_32, string_33, string_34

    pointer dd pointer_0, pointer_1, pointer_2, pointer_3

    external_counter dd 0
    internal_counter dd 0


section .text
    global _start
_start:

    call _check
ex:
    mov ebx, 0
    mov eax, 1
    int 0x80

_print:
    mov ebx, 1
    mov eax, 4
    int 0x80
    ret

_enter:
    mov edx, 7
    mov ebx, 0
    mov eax, 3
    int 0x80
    ret

_make_esi:
    mov eax, [pointer]
    mov ebx, [external_counter]
    mov esi, [eax + ebx * 4]
    mov ebx, [internal_counter]
    add ebx, ebx
    add ebx, ebx
    add ebx, ebx
    add esi, ebx
    ret


_check:
            call _make_esi
            cmp esi, string_01
            je ex
            mov ecx, esi
            call _enter

            inc dword [internal_counter]
            jmp _check
...