Начав изучать ассемблер по книге Калашникова "Ассемблер это просто" перепечатал вот эту программку (MASM 6.11): Код (Text): CSEG segment assume cs: CSEG, es:CSEG, ss:CSEG org 100h Begin: call Wait_key cmp al,27 je Quit_prog cmp al,0 je Begin call Out_char jmp Begin Quit_prog: mov al,32 call Out_char int 20h Wait_key proc mov ah,10h int 16h ret Wait_key endp Out_char proc push cx push ax push es push ax mov ax,0B800h mov es,ax mov di,0 mov cx,2000 pop ax mov ah,31 Next_sym: mov es:[di],ax inc di inc di loop Next_sym pop es pop ax pop cx ret Out_char endp CSEG ends end Begin Программа считывает введенный с клавиатуры символ и если это не клавиша Esc, то экран закрашивается синим цветом и заполняется введенными символами. При запуске программа не обрабатывает ничего кроме нажатия клавиши Esc и по ее нажатию завершает работу. Если после этого программу прогнать через отладчик (afdpro), а затем запустить программу из командной строки, то программа работает. Чем это можно объяснить?
4y4z > добавляется int 10,F для запроса текущего видеорежима? Если в буквальном смысле, то да, а вообще не для этого. Цель этой добавки оповестить win'ду, что программа не будет работать "молча" и не будет просто заниматься вводом/выводом с/на консоли(ль), а что ей (программе) нужно "более dos'явое" окно. Подробностей я не знаю, просто однажды столкнулся с такой ситуацией, методом тыка определил, что достаточно вызвать что-нибудь из int 10h, а самое безобидное - это 0Fh. До сих пор (xpsp3) это срабатывает. Выполнять этот код не обязательно на каждой итерации цикла. Достаточно одного раза вначале работы программы, т.е. правильнее сделать так Код (Text): ... Begin0: mov ah,0Fh int 10h Begin: call Wait_key ... end Begin0