Например, в приведенном ниже коде в среднем цикле EBX всегда установлен в 0, когда он должен содержать байты файла.
Как вы это определяете?(Возможно, работает под отладчиком?)
В вашем коде есть неудачная ошибка:
; read the file
mov eax, 3 ; read(
mov ebx, eax ; file_descriptor,
Вы перезаписываете EAX (который содержит дескриптор файла, возвращаемый системным вызовом open
,если open
удалось) со значением 3, прежде чем он будет перемещен в EBX в качестве аргумента дескриптора файла на read
.
Обычно процесс начинается с присвоенных дескрипторов файлов 0, 1 и 2на stdin
, stdout
и stderr
, и первый дескриптор файла, который вы явно open
, будете равен 3, так что вам это сойдет с рук!
Но вам может не повезти, если вы работаете с отладчиком.Файловый дескриптор 3 может быть чем-то другим, и read
может завершиться ошибкой (вы не проверяете, является ли возвращаемое значение отрицательным кодом ошибки), или прочитать что-то совершенно неожиданное ...