Поддержка asm инструкций Pentium3 и выше.

Раздел посвящен программированию с использованием Power Basic.
Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Поддержка asm инструкций Pentium3 и выше.

Сообщение Mikle » 12.07.2007 (Чт) 15:54

У меня PB, версия, кажется, 7. Я его использую исключительно как компилятор для asm DLL, недавно обнаружил, что инструкции выше MMX не поддерживаются, подскажите, поддерживаются ли они в более новых версиях и, если да, то в каких (ну и где скачать :) ).

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Поддержка asm инструкций Pentium3 и выше.

Сообщение tyomitch » 12.07.2007 (Чт) 16:07

Mikle писал(а):У меня PB, версия, кажется, 7. Я его использую исключительно как компилятор для asm DLL

А не проще использовать для этого masm32? :roll:
Изображение

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 12.07.2007 (Чт) 16:25

tyomitch
Тут есть удобство в отладке, я сначала тестирую процедуры из самого PB, без DLL, тут мне MsgBox в помощь, и многое другое.
Хотя masm32 я не пробовал, может в нем тоже удобно?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 12.07.2007 (Чт) 17:08

Не знаю. Всё, что я писал на асме, я собирал в masm32 и отлаживал в VS6. Неудобств не замечал.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 12.07.2007 (Чт) 17:57

Mikle
Использовал бы C++. Там и инлайн асм нормальный(со всеми инструкциями) и бесплатен он (качаешь VC8 Express и Platform SDK, как подключать здесь) и отладчик удобный+можно если что и внешний подключить, т. к. нормальная pdb генерится. При желании к нему подключается собственно масм(http://www.masm32.com/website/vcmasm.htm)
Изображение

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 15.07.2007 (Вс) 16:33

У меня PB, версия, кажется, 7. Я его использую исключительно как компилятор для asm DLL, недавно обнаружил, что инструкции выше MMX не поддерживаются, подскажите, поддерживаются ли они в более новых версиях и, если да, то в каких (ну и где скачать ).


У меня версия 8.03, инструкции выше Pentium III компилятор не знает.
Но любую новую инструкцию, можно записать через !db и макросы.
Если надо всего несколько инструкций, то проблем быть не должно.
В инклюде определяешь новые команды:

Код: Выделить всё
MACRO CMOVC_EBX_EAX
! DB &H0F,&H42,&HD8
END MACRO

' Tested Ok.
MACRO CMOVC_BX_AX
! DB &H66,&H0F,&H42,&HD8
END MACRO

' Tested Ok.
MACRO CMOVC_ECX_EAX
! DB &H0F,&H42,&HC8
END MACRO

' Tested Ok.
MACRO CMOVC_CX_AX
! DB &H66,&H0F,&H42,&HC8
END MACRO

' Test Ok.
MACRO CMOVC_EDX_EAX
! DB &H0F,&H42,&HD0
END MACRO

' Test Ok.
MACRO CMOVC_DX_AX
! DB &H66,&H0F,&H42,&HD0
END MACRO

' EAX, ZF=1 (same as CMOVZ)
MACRO CMOVE_EBX_EAX
! DB &H0F,&H44,&HD8
END MACRO

MACRO CMOVE_BX_AX
! DB &H66,&H0F,&H44,&HD8
END MACRO

MACRO CMOVE_ECX_EAX
! DB &H0F,&H44,&HC8
END MACRO

MACRO CMOVE_CX_AX
! DB &H66,&H0F,&H44,&HC8
END MACRO

' Test Ok.
MACRO CMOVE_EDX_EAX
! DB &H0F,&H44,&HD0
END MACRO

MACRO CMOVE_DX_AX
! DB &H66,&H0F,&H44,&HD0
END MACRO

' EAX, ZF=0 (same as CMOVNZ)
MACRO CMOVNE_EBX_EAX
! DB &H0F,&H45,&HD8
END MACRO


А потом вызываешь макрос из твоего кода:

Код: Выделить всё
COMPILE EXE
'#INCLUDE "Win32API.INC"
#INCLUDE "Macros.inc"
'
'
FUNCTION PBMAIN() AS LONG
LOCAL A&,B&
    A&=0
  ! MOV EDX,&HFFFFFFFF
  ! MOV EAX,99
   CMOVE_EDX_EAX  <=== Макрос!
  ! MOV A&,EDX
MSGBOX "A&="+STR$(a&)
END FUNCTION



Тут есть удобство в отладке, я сначала тестирую процедуры из самого PB, без DLL, тут мне MsgBox в помощь, и многое другое.
Хотя masm32 я не пробовал, может в нем тоже удобно?


Правильно, лучше юзать PB, намного удобнее и можно смешивать АСМ с бейсик-кодом. Кстати Хатчиссон, говорил, что в PB инлайн-ассемблер очень хорош.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 15.07.2007 (Вс) 17:52

jangle
Спасибо за пример.
У меня версия 8.03, инструкции выше Pentium III компилятор не знает

А не выше, а просто P3?
И еще, в PB7 есть еще недостаток - выше 1000 строк не компилятся...
Как с этим в PB8?

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 15.07.2007 (Вс) 18:11

А не выше, а просто P3?
И еще, в PB7 есть еще недостаток - выше 1000 строк не компилятся...
Как с этим в PB8?


По мойму да, в любом случае инструкции можно вызывать через макросы. Про 1000 строк ерунда какая-то, все должно компилироватся.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 15.07.2007 (Вс) 18:32

jangle
Ну не тысяча, а 1077, или около того. Добавляю любую строку, например "asm xor eax, eax", в любое место, и выдает ошибку, причем где-то в другом месте. Удаляю из текста любую ранее написанную ф-цию - опять работает.

jangle
Википедик
Википедик
Аватара пользователя
 
Сообщения: 3013
Зарегистрирован: 03.06.2005 (Пт) 12:02
Откуда: Нидерланды

Сообщение jangle » 15.07.2007 (Вс) 18:42

Mikle писал(а):jangle
Ну не тысяча, а 1077, или около того. Добавляю любую строку, например "asm xor eax, eax", в любое место, и выдает ошибку, причем где-то в другом месте. Удаляю из текста любую ранее написанную ф-цию - опять работает.


Выложи код в форум, попробую его скомпилировать. У меня без проблем, компилировались PB ASM исходники более 10000 строк длинной.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 16.07.2007 (Пн) 9:08

jangle
С этой траблой я разобрался, был хитрый случай - при удалении любой строки расстояние между "lab0:" и "loop lab0" становилось меньше 128 :lol:
А я привык, что всякие "je", "jna" автоматом преобразуются при необходимости в "jmp". А "loop" так не может. :(


Вернуться в Power Basic

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

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

    TopList