![]() |
|
![]() |
#11 |
Киберпанк
Регистрация: 24.04.2009
Сообщений: 10,958
|
![]()
PavelAR, увы, но не запускается вообще
![]() |
![]() |
![]() |
Реклама | |
|
![]() |
#12 |
Gold Member
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,830
|
![]()
В XP вроде должна нормально запускаться.
Ладно, завтра скину что-нить другое по 3D. |
![]() |
![]() |
![]() |
#13 |
Silver Member
Регистрация: 03.09.2004
Сообщений: 895
|
![]()
Может, тут фишками какими делиться или интересными вопросами для студентов?
![]() ![]() Ощущаю дефицит в коротокоформлируемых, но требующих некоторое понимание, вопросах. Типа. 1. Создаем в Паскале короткий (но лучше длинный, если время есть) цикл: for i:=1 to 20 do begin a:=a+b; b:=a+b; end; При выполнении по шагам с удивлением обнаруживаем, что на первом проходе переменная i равна не 1, как мы написали в коде, а, наоборот, 20. Почему? 2. Что делает следующий ассемблерный код: mov ch,5 mov ah, 51h xor al,al sub ah,ch int 21h |
![]() |
![]() |
![]() |
#14 | |
Gold Member
Регистрация: 07.09.2005
Сообщений: 1,326
|
![]()
Я думаю, дело не в операционной системе, а в неполной поддержке VESA VBE современными видеокартами.
Добавлено через 4 минуты Цитата:
Переменные i,a,b как объявлены ? |
|
![]() |
![]() |
![]() |
#15 | ||
Silver Member
Регистрация: 03.09.2004
Сообщений: 895
|
![]()
saovu,
Цитата:
a,b - не важно какие, например, тоже integer Цитата:
|
||
![]() |
![]() |
![]() |
#16 |
Gold Member
Регистрация: 07.09.2005
Сообщений: 1,326
|
![]() |
![]() |
![]() |
![]() |
#17 | ||
Silver Member
Регистрация: 03.09.2004
Сообщений: 895
|
![]()
saovu,
Цитата:
![]() Цитата:
![]() Может, поделитесь подобными вопросиками? ![]() |
||
![]() |
![]() |
![]() |
#18 |
Gold Member
Регистрация: 07.09.2005
Сообщений: 1,326
|
![]()
Ну разве может это сделать
? ![]() А серьезно - нет у меня таких вопросов в готовом виде. Для преподавания мне они точно не нужны - видели б вы тех студентов, с которыми я работаю. Дай Б-г там к 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 Что вообще означает код в этом макросе, и для чего-почему он используется строго СРАЗУ ЖЕ после включения защищенного режима процессора. |
![]() |
![]() |
![]() |
#19 | ||
Gold Member
Регистрация: 25.06.2005
Адрес: F000:FFF0
Сообщений: 1,830
|
![]()
Да, короче всего код для "нисходящего" цикла.
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-битный сегментный адрес берется из того, что передается как параметр, который тоже подставляется на этапе компиляции. Подобный прием используется везде, где требуется сбросить конвейер процессора, чтобы избежать конфликтов. Последний раз редактировалось Paul Kellerman; 17.06.2011 в 12:17. |
||
![]() |
![]() |
![]() |
#20 |
Gold Member
Регистрация: 07.09.2005
Сообщений: 1,326
|
![]() |
![]() |
![]() |