Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс июл 23, 2017 11:38 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 137 сообщений ]  На страницу Пред. 15 6 7 8 9 10 След.
Автор Сообщение
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вс окт 26, 2014 12:10 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Если у тебя всегда 4х4 матрицы будут, перепиши на SSE, в разы выигрыш будет, если не на порядок.


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вс окт 26, 2014 1:21 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
Вот на SSE:
Спойлер: Показать
Код:
use32
    org 0x0
    db  'MENUET01'
    dd  0x01,start,i_end,e_end,e_end,0,0

include '../../../macros.inc'
include '../../../debug.inc'


start:
   movaps   xmm0, xword[vector]
   movaps   xmm1, xmm0
   movaps   xmm2, xmm0
   movaps   xmm3, xmm0

   movaps   xmm4, xword[matrix +  0]
   movaps   xmm5, xword[matrix + 16]
   movaps   xmm6, xword[matrix + 32]
   movaps   xmm7, xword[matrix + 48]

   dpps   xmm0, xmm4, 0xf1
   dpps   xmm1, xmm5, 0xf1
   dpps   xmm2, xmm6, 0xf1
   dpps   xmm3, xmm7, 0xf1

   cvtss2si eax, xmm0
   cvtss2si ebx, xmm1
   cvtss2si ecx, xmm2
   cvtss2si edx, xmm3

   dpd eax
   dpd ebx
   dpd ecx
   dpd edx

quit:
   mcall   -1


align 16
matrix dd   0.0, 0.0, 0.0, 1.0,\
      0.0, 0.0, 1.0, 0.0,\
      0.0, 1.0, 0.0, 0.0,\
      1.0, 0.0, 0.0, 0.0

vector dd   2.0, 3.0, 4.0, 5.0

i_end:
rb 0x100               ;stack
e_end:

На выходе будет 5 4 3 2.


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Пн окт 27, 2014 1:14 am 
Не в сети
Аватара пользователя

Зарегистрирован: Пн окт 27, 2008 10:10 pm
Сообщения: 740
Да матрицы всегда будут 4х4, потому что они планируются для 3d графики. Тут пока что с FPU разобраться не могу, хотя некоторые программы с ним писал. А вот про SSE я только некоторые статьи давно читал, но пока что не работал. Пока что стоит задача что-бы оно хоть как-то заработало, а далее думаю можно будет и на SSE переходить если до него дойдет дело.


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт окт 28, 2014 6:28 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1060
Коректен ли код:
Код:
mcall 68, 12, 32
mov [devbuf], eax


В конечном итоге в devbuf должен хранится указатель на выделенную ф68.12 память

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт окт 28, 2014 6:46 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Смотря где и что располагается по метке devbuf.
А вообще если такой маленький буфер будет выделяться, то есть смысл его статически выделить и не дергать лишний раз ф.68.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт окт 28, 2014 6:51 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1060
Mario_r4 писал(а):
Смотря где и что располагается по метке devbuf.

В теория переменная пустая, объявлялась так : devbuf dd ?
Mario_r4 писал(а):
А вообще если такой маленький буфер будет выделяться, то есть смысл его статически выделить и не дергать лишний раз ф.68.

Пожадуй так и сделаю.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт окт 28, 2014 6:54 pm 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
punk_joker писал(а):
Mario_r4 писал(а):
Смотря где и что располагается по метке devbuf.

В теория переменная пустая, объявлялась так : devbuf dd ?

Тогда нормально.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вс ноя 02, 2014 2:52 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1060
И снова прошу помочь разобраться
Код:
    mov ecx, 4
    xor edi, edi
    .lp:
    cmp byte[path+ecx], 0
    jz .end_lp
    movzx eax, byte[path+ecx]
    sub eax, 30h
    mov ebx, 10
    mul ebx
    add edi, eax
    inc ecx
    jmp .lp
    .end_lp:

В path параметры командой строки передаваемые приложению. Начиная с 4го символа идет нужное число, это код в теории преобразует его из стоки в численное представление. Но на практике код не работает должным образом.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вс ноя 02, 2014 2:48 pm 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
1. 456 = (4*10 + 5)*10 + 6, not 4*10 + 5*10 + 6*10
2. fourth symbol is [path + 3], not [path + 4]
3. you can use 'imul edi, 10' to save extra register
4. it doesn't matter here, but may be useful to know that 'add eax, eax\ lea eax, [eax*5]' is faster than (i)mul


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вс ноя 02, 2014 10:40 pm 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1060
dunkaist писал(а):
1. 456 = (4*10 + 5)*10 + 6, not 4*10 + 5*10 + 6*10
2. fourth symbol is [path + 3], not [path + 4]
3. you can use 'imul edi, 10' to save extra register
4. it doesn't matter here, but may be useful to know that 'add eax, eax\ lea eax, [eax*5]' is faster than (i)mul

Thanks

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт ноя 04, 2014 1:32 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1060
Код:
    mcall 68, 12, 32
    mov [devbuf], eax
    mov dword[f70rd+f70.funct], 1
    mov byte[f70rd+f70.rezerv], 0
    mov dword[f70rd+f70.param3], 0
    mov dword[f70rd+f70.param4], edx
    mov dword[f70rd+f70.name], dir
    mcall 70, f70rd


Данные

Код:
struct f70
        funct    dd  ?
        param1  dd  ?
        param2  dd  ?
        param3  dd  ?
        param4  dd  ?
        rezerv  db  ?
        name    dd  ?
ends

f70rd       rb 25
devbuf     dd ?
dir          db '/', 0


В eax как и положено 0, тоесть функция успешно выполняется. А вот в ebx не то что хотелось бы видеть, там тоже ноль. Пытался переписать на асм код C-- из tmpdisk который в свою очередь работает
Код:
devbuf= mem_Alloc(32);
ReadDir(0, devbuf, "/");
fcount=ESDWORD[devbuf+8];

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт ноя 04, 2014 2:21 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
А что не так? Ты попросил 0 элементов, функция прочитала 0 элементов.

param1 и param2 ты не инициализировал.


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт ноя 04, 2014 3:22 am 
Не в сети

Зарегистрирован: Вт апр 12, 2011 11:19 pm
Сообщения: 1060
Нда, мой промах. Слегка не так понял все. Тогда такой вопрос.
Код:
mcall 68, 12, 32
mov [devbuf], eax

тут я выделяю память, и в devbuf сохраняю адрес выделенной памяти
Код:
    mov dword[f70rd+f70.funct], 1
    mov byte[f70rd+f70.rezerv], 0
    mov dword[f70rd+f70.param1], 0
    mov dword[f70rd+f70.param2], 0
    mov dword[f70rd+f70.param3], 0
    mov dword[f70rd+f70.param4], devbuf
    mov dword[f70rd+f70.name], dir
    mcall 70, f70rd

тут вызываю ф70.1, и она записывает в памяти по адресу из devbuf выходные данные
Код:
mov edx, dword[devbuf+8]

а тут теоретически я помещаю в edx двойное слово из данных, еоторые мне вернула ф70.1, размещенное со смещением +8 байт от начала

Все верно? Просто я неуверен в правильности выделения памяти и дальнейшей работой с ней.

_________________
я лишь учусь


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт ноя 04, 2014 4:22 am 
Не в сети
Mentor
Аватара пользователя

Зарегистрирован: Пн окт 19, 2009 10:58 am
Сообщения: 329
punk_joker писал(а):
Все верно?
Нет, не всё.

1. Когда ты пишешь devbuf dd ?, то ты резервируешь двойное слово, а само devbuf будет равно смещению этого слова от начала бинарника. Соответственно, devbuf -- указатель на двойное слово.

2. Когда ты сохраняешь указатель на выделенный буфер, ты записываешь этот указатель в двойное слово, лежащее по адресу devbuf. То есть devbuf -- указатель на двойное слово, [devbuf] -- само это слово, которое есть указатель на буфер. Devbuf -- указатель на указатель на буфер.

3. Запись mov dword[f70rd+f70.param4], devbuf помещает в поле структуры не адрес буфера, а адрес, по которому лежит адрес буфера. По смыслу стоит писать mov dword[f70rd+f70.param4], [devbuf], но mov не умеет писать из памяти в память, поэтому приходится использовать промежуточный регистр или стек. Например, mov eax, [devbuf]\ mov dword[], eax. Или push [devbuf]\ pop [].

4. Аналогично в записи dword[devbuf+8] восьмёрка прибавляется не к адресу буфера (это было бы [devbuf]+8, но такой инструкции тоже нет), а к адресу адреса. Если devbuf указывает на зарезервированное двойное слово, то devbuf+8 будет указывать на 8 байт после него, т.е. куда-то за переменную dir. Что лежит по этому адресу неясно. Тут тоже нужно использовать промежуточный регистр.

Можешь написать мне завтра в джаббер; выходной, время есть.


Вернуться к началу
 Заголовок сообщения: Re: ряд вопросов по FASM
СообщениеДобавлено: Вт ноя 04, 2014 4:58 am 
Не в сети
Kernel Developer

Зарегистрирован: Вс фев 10, 2013 12:37 pm
Сообщения: 2329
Спойлер: Показать
мде... это как надо программиста-ассемблерщика удивить, чтобы он забыв про то что ему удобней отвечать на английском начал писать на русском... :)


З.Ы. punk_joker - имхается мне нужно тебе сесть и разобраться с методами адресации, чую Юрова ты либо не читал, либо просматривал по диагонали.

_________________
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 137 сообщений ]  На страницу Пред. 15 6 7 8 9 10 След.

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB