Вот код Последний вызов ;Системный вызов #3 read: пропускается ( и не выполняется.....завершается...(без ошибок)... Программа должна сначала, вывести определённые данные, затем пользователь должен ввести какето данные, затем прога снова выводит данные....и потом снова должен быть ввод пользователя..но он, почемуто ...по непонятной мне причине..не выполняется...а просто игнорируется...... что делать?
"Учиться, учиться, и учиться...товалищи, и пиво - нивкоем случае..." из речи тов. В.И.Ленина на 1-м всесоюзном съезде програмистов
проблема - у тебя, перед тем как писать "вот код", напиши - на каком языке ты пишишь, в какой среде, чем копилируишь я знаю ( как-бы) только масм, и с точки зрения масма твой "код" смахивает на шизоидальный бред, хотя, может быть "правильный" ассемблер и должен быть таким ...
Blackbeam код под linux на nasm'е. Имхо это очевидно из-за int 0x80 и syscall'ов. stellaco код верен, не знаю почему у тебя не работает. Посмотри в отладчике и приведи полный код.
meduza Весь код не могу выложить..он слишком большой... Но ошибка именно тут, точнее даже не ошибка.......а не пойми что =) не ясность какая-то... через gdb я могу просмотреть только до определённого сравнения.. вот оно cmp byte[accepted_buf], 'y' je label_accepted cmp byte[accepted_buf], 'Y' je label_accepted jmp exit ;если пользователь ввёл что-то отличное от символов 'y' 'Y' то выходим label_accepted: далее идёт код, который написан в самом начале темы)... gdb доходит до jmp exit и дальше...всё.....end_dump........
stellaco Код, который ты привел в посте #1 верен! Если у тебя возникает какая-то ошибка, то она возникает за пределами этого кода. залей на файлообменник, хотя бы 1 файл, тот который глючит
stellaco И во избежание недоразумений как с Blackbeam, а также чтобы другим бегиннерсам было проще искать пости пожалуйста вопросы по никсам в разделе WASM.UNIX
Y_Mur ок. но из того раздела меня посылали в этот =) Да и там темы не особо смотрят... моя тема про cgi там уже недели три, а ответов..целых два. (проблема осталась открытой).. А в этом разделе, мне реально помогли)..указали на ошибку. meduza Вот код, я удалил всё лишнее. Проблема осталась =)
ну надо наверно все же посмареть после этого куска кода в eax код ошибки или, если eax положительно, кол-во прочитаных символов(этот случай будет действительно странным) и еще попробуй предыдущий вызов read убери. возможно в буфере чтения остались символы после него. в визуал студии приходилось fflush() вызывать постоянно из-за этого
booler Я думал что при системных вызовах в буфер ничего не записывается =)... кажется это особенность СИ, делать буферизацию ... А так верно, нужно после второго read проверить EAX... как буду в linex сразу проверю.. И ещё, я запускаю программы через bash ..и подумываю.... может терминал что-то мудрит?.. хотя пробовал прогу запускать и через xterm... результат был тотже (
Хех, забавно .. раньше всегда компилировал) так.. nasm -f elf file ld file.o ./a.out (запуск).. и прога заступоривалась на втором вызове read... а тут ... решил откомпилировать так)))) nasm -f elf file | ld file.o | ./a.out (для запуска нового файла..нужно эту стоку два раза вбить... видимо терминал сразу последовательно выполняет эти команды, а программа ещё не успевает скомпилироваться.......но на второй ввод¸программа всегда запускается новенькая..) Ну вобщем ближе к делу... Теперь программа не доходит и до первого вызова read Видимо проблема в передаче данных терминалом =).. (теперь расмотрим запуск проги вот так ./a.out) Теперь обратим внимание на первый вызов read Там нужно ввести "y" или "Y" ...Появляется запрос на ввод ..вводим.. Y или y и жмём Enter...и чтож это такое получается??? терминал что?? шлёт первый символ в первой сис вызов read а во второй...Enter? (0x0A).. Забавно =) щас кстати это проверю....
stellaco Не вижу смысла в этом, "a | b" передает stdout "a" в stdin "b". В твоем случае это бессмысленно. Если хочешь за раз скомпилить, слинкить и запустить, то замени '|' на '&&'. Да, скорее всего в этом проблема. Замени на "mov edx,2" (а лучше еще больше, для "защиты от дурака") в первом read.