Могу сказать одно - IDE пригодна лишь для навигации по тяжелому коду, а наличие такого тяжелого кода может свидетельствовать только о том, что язык который вы используете - сакс или же вы им пользуетесь не по назначению.Видимо, для отладки программы IDE уже не нужна Если взять ту же MSVS, то там есть специальный режим компиляции Debug, в котором в программу внедряется дополнительный код, облегчающий перехват ошибок исполнения. Ну и, естественно, в её составе есть дебаггер, позволяющий оттрассировать программу и отследить все изменения переменных в процессе выполнения алгоритма. Тяжёлого кода не бывает, бывают большие проекты.
Обычно, когда работаю надо проектом, просто помню, что и где лежит. В голове визуализирую.У меня этих проектов два десятка. В голове всё не удержишь, тем более, что изменения приходится вносить раз в год-полгода. Лазить по всем при помощи "блокнота" - благодарю покорно! Тем более, что существуют такие языки программирования, отличные от банального текста. Вот как, например, ты будешь программировать в CFC из блокнота И как удержишь всю диаграмму в голове Никак.
Интересно, остались ли люди, способные понять что делает этот код :)Лет 10 назад я слышал, что специалисты АСУТП какой-то конторы наловчились заменять на материнских платах стандартный BIOS на прошивку для станка с ЧПУ. Вот это действительно была бы жесть. Но, как показала дальнейшая практика, скорее всего это был фейк: ЧПУ на DOS встречаются регулярно, а ЧПУ на BIOS я не видел ни разу.
1. IDE ненужна в функциональных языках3 не следует из 1, 2.
2. Функциональные языки ненужны
3. IDE не ненужна в не-функциональных языках
4. IDE нужна.
да мне просто интересно было, при всем своем пафосе смогут ли линупсойды прочитать банальный x86 ассемблерный код (они же типа элитарные, прямо юниксы юзают!), и тем более понять что он делает.Было очень глупо. Больше так не надо. Набор вырванных из контекста ассемблерных мнемоник, включая архаичную команду вывода строки прерывания 10h...все плохо.
А если xor al,al на dec axЕсли исключающее «или» над нижней частью 16-разрядного регистра поменять на декремент всего этого регистра Очевидно, что вы программированием на языке ассемблера на жизнь не зарабатываете. Хотя вполне допускаю, что когда-то его изучали.
Было очень глупо. Больше так не надо. Набор вырванных из контекста ассемблерных мнемоник, включая архаичную команду вывода строки прерывания 10h...все плохо.Вполне конкретная подпрограмма, которая делает вполне конкретные вещи. А то, что ты не знаком со спецификой программирования в DOS, это действительно плохо.
Если исключающее «или» над нижней частью 16-разрядного регистра поменять на декремент всего этого регистра Очевидно, что вы программированием на языке ассемблера на жизнь не зарабатываете.Уй-юй-юй, как мы заговорили, когда нихрена понять не смогли!
Вот если расскажете, как без использования дополнительной памяти обменять содержимое двух регистровxchg. Почему ты считаешь эту команду таким страшным тайным колдунством
И не продолжайте клоунаду, прошу вас, я не только ассемблерный код не понимаю, я еще и не знаю, как его выполнение реализовано аппаратно/fixed
Вполне конкретная подпрограмма, которая делает вполне конкретные вещи. А то, что ты не знаком со спецификой программирования в DOS, это действительно плохо.Аплодирую. Ваша клоунада удачна на все 100.
xchg. Почему ты считаешь эту команду таким страшным тайным колдунствомА без xchg
Было очень глупо. Больше так не надо. Набор вырванных из контекста ассемблерных мнемоник, включая архаичную команду вывода строки прерывания 10h...все плохо.[quote
Пиздеееец...я долго смеялся, спасибо что мне с бодуна подняли настроение. Я то, дурак, думал, что за годы демомейкинга на x86 немного научился кодить на асме. Но мудрые пингвины как обычно считают иначе.
push 0a000h ; в стек запоминаем начало сегмента видеопамяти
pop es ; и заносим его в регистр ES
mov ah,13h ; в аx заносим 0013h , видеорежим 320x200x8
int 10h ; и этот режим включаем
cld ; трюк, обнуляем флаг DF, а заодно и регистры
dec cx ; выставляем CX (из за cld он у нас 0) в 65535, экономим 2 байта.
xor al, al ; AL (цвет пикселя) выставляем в 0
rep stosb ; заполняем экран цветом из AL
ret ; выходим
Можете даже не отвечать.
P.S. Истины ради, замечу, что там еще xor di,di не помешает, а то есть шанс, что экран начнет заполняться не с 0.
push 0a000h ; в стек запоминаем начало сегмента видеопамятиЭто который был обычно по адресу 0xb8000 Не, оно, конечно, в режиме 13h он по адресу 0xa0000, но всё равно мимо.
mov ah,13h ; в аx заносим 0013h , видеорежим 320x200x8 int 10h ; и этот режим включаемФункция 13h сервиса int 10h BIOS выполняет вывод строки. facepalm.com
Я то, дурак, думал, что за годы демомейкинга на x86 немного научился кодить на асме.Да-да, демомейкер, который «устанавливает видеорежим» функцией вывода строки. Продолжайте в том же духе. За подобную реализацию очистки экрана (AL=0 – черный цвет) два с минусом. Демомейкер. Гы-гы.
Насчет AL согласен. Сто лет не писал на асме, ошибся регистром.А вот если ошибаетесь, нечего тут возвышаться. Я умею на асме не только интеловском, и не только для x86. И не в теории, а работающие программы писать. Так что давайте не будем тут меряться.
Парой постов ранее вы вообще этот код называли, как там оно было, "набором мнемоник"Это я погорячился. Потому что вы ошиблись регистром и превратили реальный код в бессмысленное копирование al в память. Очевидно, я не обязан угадывать в ваших ошибках код установки видеорежима и копирования содержимого al в видеобуфер.
То есть ни в зуб ногой не понимали что он вообще делает.Ну да, бином Ньютона, мы это уже проходили. Да, я ничего не понимаю в коде, где допущены фатальные ошибки вроде неверного номера функции и указания неверного адреса видеобуфера. Если вы хотели похвастаться опытом программирования на языке ассемблера, то хотя бы проверили бы работоспособность своего кода. Он у вас тупо зависнет в лучшем случае.
Ну что, господа специалисты, знакомые «со спецификой программирования в DOS», как без xchg и задействования дополнительных регистров и памяти обменять содержимое двух регистров Демомейкинг, пилять...Вы говорите так, будто это что-то плохое. Вопрос изначально был задан не мне, посему я его проглядел. 3-мя xor-ами можно, да. Только зачем Ищите частности, пытаясь на этом подловить Ведь в ответ могут так-же спросить, например про быструю софтовую реализацию отрисовки полигонов, например. И придется гуглить.
Насчет "возвышения" пожалуй соглашусь, вчера я был пьян, и написал тут оффтопик.Вот и прекрасно. Моя критика тоже была жестче, чем оно того стоит.
Насчет "неверного адреса видеобуфера", и еще кучи вещей что вы выше написали - я промолчу, мне действительно неприятно спорить с человеком, который "делает вид" что разбирается в теме.То есть, я ошибаюсь, и a000h = a0000h
Это конечно круто, прикопаться к регистру, когда там в коде еще дофига нефатальных, но ошибок.Я код разбираю в стиле компилятора. Пофиг мне на другие ошибки, если фатальная ошибка уже найдена. И насчет «нефатально» необнуленного di тоже забавно. И куда вы собрались делать ret, тайна сия велика есть. Не, я вижу, что когда-то вы действительно писали на этом языке, когда долго не практикуешь, точность теряется, номера функций забываются, и адреса тем более. Но не думайте, что вокруг все такие невежественные. Я в совокупности два курса ВУЗа ассемблерами разными занимался. И в PSP помнил все важные позиции, и созданием COM-файла минимально возможной длины развлекался. Демомейкингом вот как-то не случилось на асме, с OpenGL умею вот кое-что, а это как-то не застал.
Вопрос изначально был задан не мне, посему я его проглядел.Вопрос был изначально задан не вам, а местному троллю, который, в отличие от вас, ответа на него не
Можно написать a000h, можно 0a000h, одно и то-же.a0000
А еще перед ret надо mov ax, 0003h int 10h, а то так в 13h и останемсяКуда ret-то делаете Получается некая процедура, из которой куда-то возвращаемся. Вот поэтому и «вырванные из контекста». Если бы int 20h или int 21h с нулями в ah, было бы логично. Или вообще опустить завершение/возврат из процедуры.
Но 320*200=64000, а не 65535.А 13h – это 640×480. 4b000h.
Так уж получилось, что 90% линупсойдов умеют только громко кричать.Это кросс-платформенное явление. Большинство виндовсоидов еще и шагу без визардов с кнопкой «далее» ступить не могут. Но да, активные пользователи GNU/Linux часто склонны к агрессивной критике MS-экосистемы и порой заменяют содержание формой, это следует признать. Но MS заслуживает критики. К сожалению, критика плохо действует.
А 13h – это 640×480. 4b000h.13h это 320x200. http://en.wikipedia.org/wiki/Mode_13h , дабы не спорить.
ret - ну мы же с COM-ом работаем, в дос и ret-имсяНу, в принципе, так тоже можно. В общем, если перед переключением видеорежима сохранить где-нибудь al после функции 0fh прерывания 10h, а потом восстановить режим обратно, то для нетрезво написанного кода выглядит вполне достойно, хотя ошибки имели место.
Это кросс-платформенное явление. Большинство виндовсоидов еще и шагу без визардов с кнопкой «далее» ступить не могут.
Это кросс-платформенное явление.я думал от смеху помру! Вот она трезвость мышления! Ос не виновата, что у неё такие пользователи.
1. IDE ненужна в функциональных языках
2. Функциональные языки ненужны
3. IDE не ненужна в не-функциональных языках
4. IDE нужна.
А вот интересно, а ваш любименький текстовой редактор умеет анализировать синтаксические и логическое ошибки до компиляции