bash.im ithappens.me zadolba.li
9894

Ноль по наследству

19 сентября 2012, 07:15

Технический вуз. Первое знакомство с ассемблером. Задание на лабораторную работу: написать прогу, которая демонстрирует работу конструкции if-then-else. Собственно, с клавиатуры вводится число, и если оно не равно 10, то преобразуется по одной формуле, а если да — то по другой: x = 5x − 45.

Программу написал быстро. Проверка на неравенство прошла нормально. Остаётся проверить при х = 10, и можно со спокойной душою сдавать, тем более что преподаватель обещал поощрить двух самых быстрых кодеров.

Ввожу «10». Программа быстренько прыгает по регистрам, по флажкам и в конце бодро выдаёт мне результат: «50». Я, конечно, почти ничего против не имею, но ответ должен быть ровно в десять раз меньше. Следующие несколько минут проходят в подробном изучении синтаксиса ассемблера: лекцию ведь я бессовестно проспал. Однако даже после этого программа непреклонна — «50», и всё.

Люди понемногу начинают сдавать свои программы. Некоторые собираются возле меня, и мы вместе начинаем искать ошибки. Проверяется свыше десятка альтернативных вариантов, но ответ при этом не меняется. Самое обидное, что в аккумуляторном регистре, содержание которого в итоге и выводится на экран, хранится заветное «05», но увидеть пятёрку на экране почему-то не судьба.

Только когда пара уже почти заканчивалась, я, как это обычно бывает, внезапно понял, в чём дело. Проверяя условие, которое работало нормально, я вводил, например, «3», и получал ответ, скажем, «49». А здесь я вводил «10» в начале первой строки консоли, программа мне выводила «5» там же. Соответственно, нолик от введённой мной десятки благополучно переезжал в новое число — об очистке экрана или переносе на новую строку никто ведь не подумал…

Мало написать программу, которая может решить вашу задачу. Нужно ещё понять, что она выводит вам в ответ.