repeat blockout(random(320-17),random(200-13),17,13); delay(700); until keypressed;
asm mov ah,0 int 16h end;
end.
GLuk
18.05.2003 13:44
директиву Assembler опять не поставил... Сам просчет смещения остался стандартным, не думаю, что ты бы смог сам догадаться, что 64*y+256*y = 320*y, а там где SHL CX,2 лучше (special for someone: лучше для 8086) два раза SHL CX,1. Сам цикл вывода реализован хорошо, но это единственное, что радует...
Dark
19.05.2003 3:23
На тему директивы: я тебе уже писал, что не знаю, что она делает!!!! И почему ты уверен, что я недопираю до сдвигов...??? ??? :'(
Shadow
19.05.2003 8:03
:D -=-= моно сказать что SHL ето деление на степени двойки и наоборот SHR уиножен -=-=- и ето почти самая быстрая команда ASM вроде -=-=
___ALex___
19.05.2003 12:51
наоборот только shl - умножение на степени двойки shr - целочисленное деление на степени двойки
Shadow
19.05.2003 18:06
;D -=-=-=-=- Бр-р-р-р-р- точно
GLuk
19.05.2003 19:40
Цитата
На тему директивы: я тебе уже писал, что не знаю, что она делает!!!! И почему ты уверен, что я недопираю до сдвигов...??? ??? :'(
Ты ничего не подумай, я не имел в виду, что ты не понимаешь, что этот код делает. Я говорю, что сам просчет смещения, реализован не тобой... т.к. этот код я видел уже лет 6 назад и до сих пор он особо не изменялся (в плане перспективы). Или может ты его весь сам придумал ???
GLuk
20.05.2003 0:32
А по поводу директивы Assembler, дык меньше кода генерится, не знаю что за процедуру вставляет компилер перед непосредственно кодом процедуры (как- нибудь посмотрю) + не освобождается место для локальных переменных (нет enter/leave)
Dark
20.05.2003 5:03
Ok, я без обид, ;D а использование shl действительно моно встретить во многих демках и интрах, а мне дал мой наставник...
GLuk
20.05.2003 19:53
Глянул, что делает компилер без директивы Assembler; осуществляется проверка стека... По-поводу SHL я имел ввиду, что эта команда в виде SHL AX,1 (сдвиг всего одного бита), работает много быстрее, чем SHL AX,CL (к примеру если CX=2, то лучше написать SHL AX,1; SHL AX,1). На всякий случай эта тема была актуальна применительно к 8086/80186.
Dark
21.05.2003 5:41
Цитата
Хорошая вещь. :) только к процедуре дай комментарий по подробней. :(
Хорошая вещь. только к процедуре дай комментарий по подробней.
A000 - адрес видеобуфера,
Я просто организую цикл на ассемблере, выводящий точки(записывающий байты) из буфера color(адрес помещен в ds:si) в видеобуфер.
Cмещение первой выводимой точки вычисляется так: di=x+y*320.(без коментариев)
cx содержит кол-во строк, dx - столбцов...
вывод строки - rep movsb.
movsb перемещает байт из ds:[si] в es:[di]
Команда movsb сама прибавляет к di и si по 1.
Затем 2 команды - add di,320 sub di,mx
Корректируют текущий адрес, для получения адреса начала следующей строки рисунка
Вопросы? ;D
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.