IPB
ЛогинПароль:

> ПРАВИЛА РАЗДЕЛА!!!

1. Заголовок или название темы должно быть информативным
2. Все тексты программ должны помещаться в теги [CODE=asm] [/CODE]
3. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно, такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Ассемблера. Исключение только с согласия модератора.
5. НЕ используйте форум для личного общения! Все, что не относиться к обсуждению темы - на PM!
6. Проверяйте программы перед тем, как выложить их на форум!!

 
 Ответить  Открыть новую тему 
> оптимизация кода
сообщение
Сообщение #1


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Вопрос в следующем, как лучше, и чем(в сравнении):

Занесение в регистр 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;


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


извините, во втором случае второго вопроса имелось ввиду


чтото типа  
function a:byte; 
begin
asm
mov bl,4
move byte ptr a,bl;   !!!!!!!!!!!!!!!!!! не проходит.... а как  
end;
end;


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 775
Пол: Мужской

Репутация: -  0  +


Значение типа 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Lonely_Raven
****

Группа: Пользователи
Сообщений: 640
Пол: Мужской

Репутация: -  1  +


:D
-=-=
везде употребляется
mov ax,0a000h
mov es,ax


Push
иногда когда выбора другого нету


--------------------
Программа делает то что вы ей приказали а не то что бы ВАМ хотелось бы.
МЕРФИ
---------------------
RTFM - Read the fucking manual
---------------------
http://www.livejournal.com/users/lonley_raven/
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Знаток
****

Группа: Пользователи
Сообщений: 408
Пол: Мужской

Репутация: -  3  +


Посмотрел я насчет возврата в функцию, и увидел следующее,
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.

Спасибо всем!


--------------------
- Где я?
- Во тьме.
- В какой тьме?
- Во тьме твоего мозга.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Cheapest Levitra Professional
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Dosis Kamagra
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 15:58
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name