Итак, я пишу программу, которая создает матрицу 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