![]() |
Цитата:
Добавлено через 15 минут Проверил в Delphi. Да, 20. Видимо оптимизация цикла так работает (на ноль проверять выгоднее) в случае когда переменная цикла внутри не используется. |
saovu,
Цитата:
Цитата:
Может, поделитесь подобными вопросиками?:) |
Цитата:
Цитата:
:) А серьезно - нет у меня таких вопросов в готовом виде. Для преподавания мне они точно не нужны - видели б вы тех студентов, с которыми я работаю. Дай Б-г там к 5-му курсу двое-трое из группы такие вопросы осилят. Смешно сказать: на этой специальности готовят какбыпрограммистов (Специальность в дипломе "Математик. Системный программист"), а из всех преподов кафедры, программистов с профильным ВО и боевым опытом - только я (да и я уволюсь сейчас нахрен). Так вот студентов на 1-ом курсе учать, что в языке C "#include <xxx.h>" означает ПОДКЛЮЧЕНИЕ БИБЛИОТЕК. Я конечно пытаюсь переучивать (я на 2-ом курсе) - понимает (да и вообще пытается и хочет понять) один из десяти. Так что "вопросики" я могу приводить только из своего же студенческого прошлого или трудовой деятельности. А это вспоминать надо. Но если уж очень хотите, вот сходу пара вопросов. По тем ассемблерным листингам, что я привел. 1. Код из первого листинга Old_2Fh_Vector: Entry: jmp near ptr Begin ; эта команда занимает три байта fourthbyte db 0 Old_17h_Vector dd 0 Пояснить шо значат эти танцы с двумя метками Old_2Fh_Vector и Entry (метка, кстати, могла бы быть и одна, две - для ясности) 2. Код из второго листинга MACRO Jmp_Next seg ; очистка очереди команд db 0EAh ; jmp dw $+4 ; адрес следующей команды dw seg ; сегмент или селектор ENDM Что вообще означает код в этом макросе, и для чего-почему он используется строго СРАЗУ ЖЕ после включения защищенного режима процессора. |
Цитата:
mov ecx,20 a0: add eax,ebx add ebx,eax loop a0 Комнада loop уменьшает ecx на 1 и если результат больше 0, то переход на метку а0. А компиляция "в лоб" дала бы более длинный код: mov ecx,1 a0: add eax,ebx add ebx,eax inc ecx cmp ecx,20 jbe a0 Цитата:
mov ax,4C00h int 21h Короче стандартное завершение DOS-программы (код возврата = 0). Цитата:
смещение) обработчика прерывания, по совместительству выполняющая роль исполняемого кода (jump на метку begin). При установке новых обработчиков переменная разумеется модифицируется, и уже не годится для исполнения :) Цитата:
16-битное смещение зависит от положения точки применения макроса в исходном коде, 16-битный сегментный адрес берется из того, что передается как параметр, который тоже подставляется на этапе компиляции. Подобный прием используется везде, где требуется сбросить конвейер процессора, чтобы избежать конфликтов. |
Цитата:
|
Вложений: 1
А вообще с макросами я тоже раньше любил поизголяться. Было время, когда
писал свой макросовый "add-on" для Turbo Assembler, чтобы можно было в про- граммах использовать SSE-инструкции процессора Pentium III, который тогда только-только вышел, 97-й кажись год был, и очень хотелось SSE попробовать. |
Вообще-то решений тут я и не ждал (gav просил вопросики).
Но раз пошла такая пьянка. Цитата:
Кстати, это вполне официальный способ рекомендуемый Интелом для очистки конвейера команд. Я так понимаю, что особую команду для этого заводить не стали (для экономии, ага; тем более она бы использовалась крайне редко) - поскольку уже есть побочное действие другой команды, дающее нужный результат. На последнюю часть вопроса Цитата:
Цитата:
На самом деле смысл этого кода в экономии 4 байт. Переменная будет объявлена и затрет программный код, который уже точно не будет нужен к моменту использования переменной. |
saovu, да, хорошие вопросики. особенно про конвейер команд, возьму на вооружение, вот нечто подобное и нужно :)
А насчет устного счета, то это скорее против непонятно откуда взявшейся проблемы. Определенный процент студентов каждый год, почему то считает, что в паре mov ax,4c00h int 21h Именно первая команда завершает работу досовской программы. При том, что команда mov - самая популярная в различных примерах. Этот пример достаточно эффективно отрезвляет. |
Цитата:
|
Между делом хотелось бы узнать: для чего нужны вот такие профессиональные видеокарты и почему они так дорого стоят?
|
Цитата:
Цитата:
Цитата:
Цитата:
|
saovu, а обычная видеокарта? Ведь она то же может работать в
Цитата:
Цитата:
А практическое применение? |
Графика это такое дело, что "чем больше, тем лучше" и разумный предел наступит только когда будет достигнута реалистичность (тавтология) реального мира.
gav, да в ответе на вопросик про две метки, я оговорился: смысл кода в экономии 3 байт ! (а не четырёх) Поскольку PavelAR не появляется, то сам же отвечу на последнюю часть вопроса про конвейер. Код очистки конвейера используется строго СРАЗУ ЖЕ после включения защищенного режима процессора потому что в конвейер выбраны команды с адресацией (для тех команд где в качестве операндов - адреса) по правилам реального режима, а переключение в защищенный режим меняет, в том числе, все правила адресации. |
Цитата:
(если страничная адресация еще включена). JMP в вышеуказанной форме помимо сброса конвейра заставляет еще в CS новый селектор загрузить, насколько помню. Цитата:
ворд-эксель, а уж потом специально ради всего этого придумали процессоры x86 ;) |
Вложений: 1
В этом семестре мне студенты заявили, что задание одной из лабораторок "Написать программу нахождения обратной матрицы ..." совершенно невыполнимо.
Принес (шоб им стыдно стало) показать выполненную мной (в 1995 году и тоже на 2-ом курсе) аналогичную работу, причем еще и с весьма навороченным UI в текстовом режиме (чего в данном случае от них точно не требовалось). Студенты притихли. Работу, правда, всё равно не выполнили. Вот, прилагаю свое творение. |
Текущее время: 09:03. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
© 2001—2025, «Аспирантура. Портал аспирантов»