Почему падает ядро при записи в массив?
возникла проблема. Имеется код в программе:
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 шт):
Когда Вы с консоли вводите число 2, в регистр попадает скорее всего ее аскии код (в данном случае 50) и происходит выход за пределы массива. И конечно, это может закончится падением. Если Вы уверенны в пользовательском вводе, то просто вначале нужно вычесть код нуля (48) и потом делать сложение.
то есть
sub eax, 48
add ebx, eax