Почему падает ядро при записи в массив?

возникла проблема. Имеется код в программе:

field db '1', '2', '3', '4', '5', '6', '7', '8', '9'
move resb 1

_move:
        mov edx, 1
        mov ecx, move 
        mov ebx, 1
        mov eax, 4
        int 0x80

        mov     eax, move
        mov     ebx, field
        add      ebx, eax

        call     _clear

        mov     [ebx], byte 'X'

        ret

Опытным путём, узнал, что call _clear выполняется, а вот при подставке 'X' в [ebx] падает с сообщением: 23988 segmentation fault (core dumped) В move поступает число с помощью ввода, программа запрашивает его, и пользователь вводит число от 1 до 9 Если же вместо строки:

add ebx, eax

Написать:

add ebx, 2

То всё корректно выполняется, как я подозреваю, проблема в том, что ввод с строки не является числом, а ASCII символом, но не знаю как его обработать и вообще, так ли это, надеюсь на вашу помощь, спасибо!


Ответы (1 шт):

Автор решения: KoVadim

Когда Вы с консоли вводите число 2, в регистр попадает скорее всего ее аскии код (в данном случае 50) и происходит выход за пределы массива. И конечно, это может закончится падением. Если Вы уверенны в пользовательском вводе, то просто вначале нужно вычесть код нуля (48) и потом делать сложение.

то есть

sub eax, 48
add ebx, eax
→ Ссылка