Помощь - Поиск - Пользователи - Календарь
Полная версия: оптимизация кода
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ассемблер
Dark
Вопрос в следующем, как лучше, и чем(в сравнении):

Занесение в регистр es адреса буфера видеопамяти:

; 1
push 0a000h
 pop es
 xor di, di

; 2
mov ax, 0a000h
 mov es, ax
 xor di, di

; 3
const vadr: pointer = ptr($a000,0);
; ...
les di, vadr


и как мне в асме присвоить значение функции, т.е.

вместо

function a: byte;
begin
a:=4;
end;


чтото типа

function a:byte;
begin
asm
a:=4;   !!!!!!!!!!!!!!!!!! не проходит.... а как ???
end;
end;
Dark
извините, во втором случае второго вопроса имелось ввиду


чтото типа  
function a:byte; 
begin
asm
mov bl,4
move byte ptr a,bl;   !!!!!!!!!!!!!!!!!! не проходит.... а как  
end;
end;
GLuk
Значение типа Byte - Word, возвращается в AL - AX соответственно. Все это очень легко можно посмотреть в TD. Остальные посмотри сам... ;)

А по поводу эффективности кода - в зависимости от проца (лично я всегда употребляю mov ax,0A000h)

А размер меньше у push ...

Смотри расклад тиков на 286-386-486 процы (на 8086 push 0A000h не покатит)
Цитата
++++++++++++++++++++++++++
+ Command + Size + 286-386-486  +
++++++++++++++++++++++++++
PUSH 0A000h (3 байта):  3-2-1
POP ES (1):  5-7-3                    
----------------------------------------
MOV AX,0A000h (3): 2-2-1
MOV ES,AX (2): 2-2-3
Shadow
:D
-=-=
везде употребляется
mov ax,0a000h
mov es,ax


Push
иногда когда выбора другого нету
Dark
Посмотрел я насчет возврата в функцию, и увидел следующее,
1. При вызове в функцию резервируются в стеке 4+размер значения функции байта.
2. Тогда, в BX находится адрес возврата в стеке
3. а в SP - адрес, куда кладется то самое, искомое значение
т.е.

function a:word;
begin
asm
mov bx,sp
move word ptr ss:[bx],5 {напрямую в ss:sp возвращать нельзя...}
end;
end;


4. если ничего не возвращать, то вернется значение CS.

Спасибо всем!
how long does propecia take to w
Cheapest Levitra Professional
where can i buy stromectol in th
Dosis Kamagra
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.