· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Почему вылетает программа?

Посл.отвђт Сообщенiе


Дата: Июн 17, 2003 15:17:01

Подскажите в чем ошибка?

.model small ; модель памяти, используемая для EXE
.stack 100h; сегмент стека размером в 256 байтов
.code
start:

mov ax,4f02h ;иницилизация графики
mov bx,0100h ;640*480*256
int 10h

mov di,0

drow:

inc di

;mem [$a000:cx]:=bx


mov ax,0a000h
push ax

mov bx,33
pop es
mov es:[di],bx


mov ax,di ;ax mod 5
xor dx,dx
mov bx,05h
div bx
xchg dx,ax



cmp ax, 0
jne drow

in ax,60h
cmp ax, 1 ; если <ESC> - выход из цикла
je pp
jmp drow
pp:

mov ax,4C00h
int 21h ; функция DOS "завершить программу"


.data
message db 'Hello World!',0Dh,0Ah,'$'
ppp db ' ','0'
end start


Дата: Июн 17, 2003 16:30:37

mov es:[di],bx при di=0ffffh


Дата: Июн 17, 2003 17:38:55

Black_mirror
А почему она там вылетает? Вроде недолжно.


Дата: Июн 18, 2003 04:05:05

Pavia
Меня смущает Ваша попытка поймать Esc, imho читать надо в AL, а не в AX, т.е.
[code]
in al,60h; вместо in ax,60h
[/code]

Что должна сделать Ваша программа?


Дата: Июн 18, 2003 06:43:50

Pavia
А почему она там вылетает? Вроде недолжно.

А вылетает она потому что размер сегмента 64К, а при попытке записать слово по адресу 0ffffh куда следует записывать старший байт? Процессор этого не знает и генерирует исключение.
А зачем записывать bx, а не bl, когда у нас 256 цветов?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039