Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.02.2011, 20:22   #1
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию Ассемблер

Почему не работает?

Код:
program Project3;
{$APPTYPE CONSOLE}
const
  speaker =  $61; //Порт управления динамиком
  timer =  $42; //Порт управления таймером
	delay1 =  $500;
	delay2 =  $0D000;
begin
asm
    in   al, speaker
    push ax
    or   al, 00000011b
    out  speaker, al
@L2: mov  al, 60
    out  timer, al
    mov  cx, delay1
@L3: push cx
    mov  cx, delay2
@L3a:loop @L3a
    pop  cx
    loop @L3
    sub  al,1
    jnz  @L2
    pop  ax
    and  al,11111100b
end;
readln
end.
VadEr вне форума Ответить с цитированием
Старый 23.02.2011, 06:42   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
{$APPTYPE CONSOLE}
А Вы что, в Delphi гоняете код?!
Тогда и правильно, что не работает!
Кто ж обычной виндузячей программе даст доступ к портам?!!

Данный пример будет работать только в DOS.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.02.2011, 08:29   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Данный пример будет работать только в DOS

Ошибаетесь ) Пример прекрасно работает в 95/98 винде. Прекрасно в том смысле, что гудит как паровоз, хотя и содержит как минимум 2 ошибки в коде, но гудит!

Я понимаю, что 95/98 это как бы уныло, но это не ДОС )
А под NT (т.е. начиная с NT 4.0 и выше), да, работать не будет (и слава богу, мне пришлось виртуальную машину перегрузить, чтобы вырубить звук ))
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 23.02.2011, 10:59   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Ошибаетесь
ладно. согласен.

Цитата:
Я понимаю, что 95/98 это как бы уныло, но это не ДОС )
А Вы зря Win 3.x не вспомнили...
Там тоже будет работать!

Цитата:
Данный пример будет работать только в DOS.
я имел в виду будет работать не обязательно в чистом MS DOS, но в Win 3.x/ Win 9x - которые, по сути, надстройки над DOS, и, должно работать в эмуляторах (например, DosBox) и всяческих виртуалках.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.02.2011, 11:35   #5
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> которые, по сути, надстройки над DOS

не, ну так не честно ) никто не запрещал мелкомягким в 95 винде зарубить привилегированные инструкции, как это сделано в NT. То, что они этого не сделали, не превращает винду в ДОС. Точно так же, если скомпилить ядро NT так, чтобы привилегированные инструкции не рубились на корню (или запихнуть этот код в драйвер), код будет работать. Что, опять же, не превращает NT в надстройку над ДОС.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 23.02.2011, 18:17   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
никто не запрещал мелкомягким в 95 винде зарубить привилегированные инструкции, как это сделано в NT. То, что они этого не сделали, не превращает винду в ДОС.
Вы, вероятно, не поняли, что я имел в виду.
Дело в том, что Windows 9.x является прямым наследником Win 3.x и не является полноценной ОС. Т.е. грузится загрузчик (читай - загрузчик DOS - а потом, грузится WIN.COM (почитать на википедии про Win.com)

veniside, я что-то потерял нить беседы, объясните мне лучше, а что мы собственно обсуждаем? операционные системы фирмы Microsoft или почему из программы Win32 нет доступа к портам ввода вывода? Или как сделать, чтобы вышеуказанная программа работала?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.02.2011, 20:22   #7
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

Сходу ответить на вопрос "где заканчивается ДОС и начинается виндовс" я сейчас не могу, поэтому временно можно считать вопрос спора (каков бы он ни был) закрытым )
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 24.02.2011, 08:10   #8
VadEr
Форумчанин
 
Аватар для VadEr
 
Регистрация: 24.03.2009
Сообщений: 375
По умолчанию

Все понятно господа, так видимо будет правильнее (думаю, что eax в восстановлении не нуждается)

Код:
asm
        in   al, speaker
        push ax
        or   al, 00000011b
        out  speaker, al
@L1: mov  al, 60
        out  timer, al
        mov  cx, delay1
@L2: push cx
        mov  cx, delay2
@L3: loop @L3
        pop  cx
        loop @L2
        sub  al,1
        jnz  @L1
        and  al,11111100b
        out  timer, al
        pop  ax
        out  speaker, al
end;
Чтобы в XP/W7 работала, совсем возможности нет?

Последний раз редактировалось VadEr; 24.02.2011 в 08:16.
VadEr вне форума Ответить с цитированием
Старый 24.02.2011, 09:21   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Чтобы в XP/W7 работала, совсем возможности нет?
компилируйте DOS компилятором (например, TurboPascal), получите DOS-ское приложение.
тогда, при запуске его винда будет грузить виртуальную DOS машину (NTVDM.exe - NT virtual DOS machine)
в ней должно работать.
правда, не исключаю вероятности, что под Windows Seven возможны проблемы.

Но, в этом случае поставьте программку DosBox - она достаточно простая и качественно эмулирует DOS (идут даже старые игрушки, с графикой и музыкой )
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассемблер SWEET_15 Помощь студентам 3 06.09.2016 08:45
Ассемблер VD1988 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 20.05.2010 22:10
Ассемблер Opiym Фриланс 3 20.05.2010 12:36
ассемблер. Юлияw52 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 21.04.2010 05:39
Ассемблер) oblachko Помощь студентам 6 10.12.2009 08:15