Я специально, раз ты решил сделать из этого бага большую проблему, поизучал, как он проявляется.
Он проявляется только в экзотических случаях, когда некто специально желает проверить бейсик на предмет безглючности и сравнивает значения заведомо тождественных выражений. Если присвоить 0.5 и 1/2 переменным и потом их сравнить - результат будет правильный. Поэтому можно обоснованно считать, что этот баг практических препятствий к написанию программ на бейсике не представляет и в реальных (не надуманных) условиях не проявляется. В частности, я ни разу сам на него не напоролся, программируя на спектрумовском бейсике, да и о том, чтобы кто-то напоролся - тоже не слышал. А даже если это когда-то с кем-то произошло - то последствия заведомо не превышали последствия от глюка собственной программы на ассемблере.
Те, кто нашел этот глюк первыми (Ян Логан и Френк о хара) - они его нашли не случайно напоровшись, а детально анализируя код бейсика.
А чего ты ждешь от новичка, "Лучшей игры-2011" что ли?
Мой сапер отрабатывает нажатие клавиши "открыть квадрат" менее, чем за секунду. Собственно, там и делать-то ничего не надо, откуда взяться тормозам? А даже если программа тратит 2-3 секунды - то от этого играбельность "сапера" не зависит, так как человек тратит большее время на обдумывание следующего хода.
Так что, по кусочкам пишешь программу, а потом сидишь и сравниваешь, правильно ли ассемблер ее компилировал? А потом еще раз, скомпилировал ли он правильно всю программу, потому что ведь по кусочкам могло сработать правильно, а всю - с ошибкой.
Посмотри дизассемблер ПЗУ от Логана и О'Хары - какого размера там подпрограмма RST 16. Своя программа, конечно, может быть и короче, но добрых 100 строк она может занять в зависимости от функциональности.
А какие критерии? Где определено, что такое "заигрываться с регистрами"? И что, тогда точно не будет порчи памяти?
PRINT AT x,y;c$. Причем обращаю внимание: обращение к переменным x и y - это прямая (абсолютная), а не косвенная адресация. Неверные или даже специально злоумышленно подобранные значения переменных не могут привести к порче программы или ее данных. Теперь твой ход. Пожалуйста то же самое, без косвенной адресации, на ассемблере.
Собственно говоря, на бейсике нет необходимости решение указанной задачи реализовывать в виде подпрограммы, поскольку задача решается одной командой. Поэтому вместо присвоения переменным значений и вызова подпрограммы целесообразнее просто подставить команду PRINT AT в то место программы, где нужно вывести символ.
Тут явно тебе надо учиться, а не мне, поскольку именно ты демонстрируешь неправильное понимание этого термина (или намеренно употребляешь его неправильно в надежде, что остальные не разберутся). А доказательств ты не предъявил, так и запишем. Попытался стрелки перевести, не вышло.
Погроммистом я себя никогда не называл. Это твои домыслы. Что это за жаргон? "Погроммист", "напейсать"? Ты часом не антисемит?
Мы вроде говорили о более-менее ощутимых результатах от выполнения этих команд. А от "колонки свежевыученных" вряд ли даже буква на экране появится.
Я усмотрел из твоих ответов другим пользователям, что речь шла о некой прошивке "Турбо-90". Ну-ну. Только как после этого твой компьютер можно назвать Спектрумом, если быть столь же придирчивым в этом вопросе, как ты в вопросе о CP/M?
Ты стрелки-то не переводи. От того, могу ли я привести корову, не должна зависеть твоя способность доказать свои слова, что сможешь с ней справиться. Так что, если собираешься доказывать - проблема поиска коровы и учебника ложится тоже на тебя.
Это ты привел пример непосредственной адресации, когда обрабатываемая информация присутствует в самой команде. Пример на ассемблере - XOR 3. На бейсике аналогом непосредственной адресации является использование констант, вроде тех, что в твоем примере.
Когда же вместо обрабатываемой информации в команде присутствует ее адрес - то такая адресация называется прямой, или абсолютной. Пример на ассемблере - LD (VarX),A где VarX - константа. Тут адрес назначения (но не обрабатываемая информация) присутствует в самой команде. Аналог бейсика - LET x=a. В обоих случаях кроме переменной VarX, другая информация в памяти не может быть затронута.
А косвенная адресация - это, как я уже говрил, LD (HL),A. Без такой адресации в ассемблере немыслимо создание сколько-нибудь сложных программ, но именно эта адресация является самой "опасной", так как в случае неверного (по ошибке или умышленно) значения HL любая область памяти может быть испорчена (по меньшей мере, в пределах подключенных в данный момент страниц).
Да нет, потенциальная порча текста программы и данных в произвольном месте никуда не ушла с приходом эмуляторов. Похожие проблемы имели бы место на бейсике, если бы там неаккуратная работа с переменными приводила бы к порче текста программы.
Данный прием тоже не снимает проблемы порчи текста программы и данных в произвольном месте.
Вот пускай и пишет, бейсик в помощь. Моя первая игрушка (называлась "Устный счет") использовала умножение. С теми знаниями, которыми я тогда обладал (еще не выучил ни циклов, ни GOSUB) на ассемблере такое бы не получилось. И вообще ничего бы не получилось, никакой игры. А у меня получилась игра. Простая, примитивная, но своя.
Ты привел отдельно взятое сложение вне контекста какой-либо игрушки, если что.
В программах на бейсике одиночные и даже в коротких циклах сложения не представляют никаких проблем. Взять тот же "Сапер". Ну не всегда нужна скорость. Иногда человек является фактором, делающим быстродействие излишним. Поиграй-ка в Sea Dragon на уровне Admiral
На бейсике тоже надо, но еще до такого изучения человек может уже быть в состоянии написать свою игру на бейсике. То же касается ПМК, между прочим. Функции ввода и вывода тебе на нем чай не приходилось самому реализовывать.
Да не всем, в том-то и дело! Не каждый может даже "какашечную" игру на бейсике или еще чем-то написать. Этому надо учиться. Долго и постепенно.
А много ли из этого кода используется в твоих программах последних лет?
Не сразу. Он может многое дать прежде, чем станет ненужным.
Странный способ. От его применения мне (да и остальным скорее всего) не стало ясно, что же я должен был увидеть.
Не волнуйся, не разочарует. Альпинисты начинающие ведь тоже на Эверест сразу не лазают. Начинают с мест попроще, и радости от покорения таких "невысоких" вершин у них не меньше. Потому что одно дело - когда кто-то, а другое дело - когда сам.







Ответить с цитированием