Здраствуйте. Компилятор: TASM 5 ОС: Хп Хом идишн, СервисПак 2 Немного неправильнно тему обозвал... Всё компилируется, но ничево непроисходит... Тобишь никакой рожице в левом углу я ненаблюдаю. В чём собственно может быть причина? Код: Код (Text): CSEG segment org 100h _beg: mov ax, 0B800h mov es,ax mov di, 0 mov ah, 31 mov al, 1 mov es:[di], ax mov ah, 10h int 21h int 16h int 20h CSEG ends end _beg Зарание спасибо.
А видео режим у вас там какой? Ну а далее... забавно. Первый раз вижу что-то подобное. int 21h Код (Text): Inp.: AH = 10h DS:DX -> File Control Block (see #01345) Return: AL = status 00h successful FFh failed Notes: a successful close forces all disk buffers used by the file to be written and the directory entry to be updated not supported by MS Windows 3.0 DOSX.EXE DOS extender Copied from Ralf Brown's Interrupt List Честно говоря вообще не представляю зачем этот вызов. int 16h Что-то делаем с КЛАВОЙ? Но вопрос что? int 20h Завершаем СОМ программу.
Где его смотреть? В оригинальном коде 21-ого прерывания небыло. Это уже я пытался оживить программу методом тыка. 16-е (функция 10h) прерывание кажись как недаёт программе закрыться сразу, а ждёт нажатия кнопки на клаве. Вот, привёл оригинальный код и прокоментировал насколько меня хватило.... Код (Text): CSEG segment ; начало сегмента org 100h ; выставляем сдвиг чевототам _beg: ; начинаем программу mov ax, 0B800h ; записываем значение 0B800h в ax mov es,ax ; записываем значение ax в es mov di, 0 ; записываем 0 в di mov ah, 31 ; записываем в ah значение 31 (ярко белый символ на синем фоне) mov al, 1 ; записываем в al значение 1 (значёк рожицы по ASCII) mov es:[di], ax ; записываем по адрессу 0B800:0000h значение ax (это у нас рожица) mov ah, 10h ; запишим в ah номер функции 10h int 16h ; вызываем 16-е прерывание (Приостанавливаем программу, до нажатии кнопки) int 20h ; выходим из программы CSEG ends ; конец сегмента end _beg ; конец программы add Режим экрана: 1024 на 768 True Color (32 бита), 75Гц.
немного уменьшил прогу, пробуй: Код (Text): mov ax,3 int 10h push 0B800h pop es xor di, di mov ax,01f01h mov es:[di], ax mov ah, 10h int 16h ret
Спасибо, работает. Щас буду разбираться.... А почемуже "мой" код неработает? Просто я изучаю по книжке и "отходить" от программы которую задал автор неочень хочется... Грубо говоря я ещё непроходил: push, pop и прочее....
Karasb Дело не в push , pop , а вот прочее оч важно : Код (Text): mov ax,3 int 10h Приводит экран в нормальный вид. А если точнее это функция стандартного видеосервиса ROM-BIOS. ah = 0 установить видео режим. Очистить экран, установить поля BIOS, al = режим в нашем случае 3 (текст 80x25 16 цветов)