Assembler - язык неограниченных возможностей


Вычисления с плавающей запятой - часть 3


g_out: mov ах,0003h ; текстовый режим int 10h ret ; конец программы start endp

; процедура _display ; пока не нажата клавиша, выводит решение на экран, ; делая паузу после каждой из 640 точек ; _display proc near dismore: mov bx,0 ; стереть предыдущую точку: цвет = 0 mov cx,si shr cx,1 ; CX - строка mov dx,240 sub dx,word ptr ix[si] ; DX - столбец call putpixel1b call next_x ; вычислить x(t) для следующего t mov bx,1 ; вывести точку: цвет = 1 mov dx,240 sub dx,word ptr ix[si] ; DX - столбец call putpixel1b inc si inc si ; SI = SI + 2 (массив слов), cmp si,640*2 ; если SI достигло конца массива IX, jl not_endscreen ; пропустить паузу sub si,640*2 ; переставить SI на начало массива IX not_endscreen: mov dx,5000 xor cx,cx mov ah,86h int 15h ; пауза на CX:DX микросекунд mov ah,11h int 16h ; проверить, была ли нажата клавиша, jz dismore ; если нет - продолжить вывод на экран, ret ; иначе - закончить процедуру _display endp

; процедура next_x ; проводит вычисления по формулам: ; y = y + h(m(1-x2)y-x) ; х = х + hy ; ввод: st = y, st(1) = х, st(2) = m, st(3) = h ; вывод: st = y, st(1) = x, st(2) = m, st(3) = h, x * 100 записывается в ix[si] next_x proc near fld1 ; 1, y, x, m, h fld st(2) ; x, 1, y, x, m, h fmul st,st(3) ; x2, 1, y, x, m, h fsub ; (1-x2), y, х, m, h fld st(3) ; m, (1-x2), y, x, m, h fmul ; M, y, x, m, h (M = m(1-x2)) fld st(1) ; y, M, y, x, m, h fmul ; My, y, x, m, h fld st(2) ; x, My, y, x, m, h fsub ; My-x, y, x, m, h fld st(4) ; h, My-x, y, x, m, h fmul ; h(My-x), y, x, m, h fld st(1) ; y, h(My-x), y, x, m, h fadd ; Y, y, x, m, h (Y = y + h(My-x)) fxch ; y, Y, x, m, h fld st(4) ; h, y, Y, x, m, h fmul ; yh, Y, x, m, h faddp st(2),st ; Y, X, m, h (X = x + hy) fld st(1) ; X, Y, X, m, h fild word ptr c_100 ; 100, X, Y, X, m, h fmul ; 100X, Y, X, m, h fistp word ptr ix[si] ; Y, X, m, h ret next_x endp

; процедура вывода точки на экран в режиме, использующем 1 бит на пиксель ; DX = строка, СХ = столбец, ES = A000h, ВХ = цвет (1 - белый, 0 - черный) ; все регистры сохраняются




Начало  Назад  Вперед