forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Разработка LIB (http://forum.boolean.name/forumdisplay.php?f=58)
-   -   Asm (http://forum.boolean.name/showthread.php?t=1401)

impersonalis 31.08.2006 01:14

Asm
 
Вложений: 3
Курупник А.Б. Изучаем ассемблер
Неплохой в плане общего развития учебник.
Читал местами, пока у меня его не одолжил Magus.
Особенно порадовали примечания:

pax 31.08.2006 11:48

Re: Asm
 
Давно искал книжку по основам ассемблера, как раз то что нужно :super:

impersonalis 03.09.2006 03:09

Re: Asm
 
Вложений: 2
Обложку наконец нашёл

pax 03.09.2006 22:06

Re: Asm
 
для тех кто еще незаметил... вот тут лежат исходники к этой книжке ;)
http://www.piter.com/files_for_book.phtml?isbn=5-94723-757-1&name=%C8%E7%F3%F7%E0%E5%EC%20%C0%F1%F1%E5%EC%E1% EB%E5%F0&author=%C0.%A0%CA%F0%F3%EF%ED%E8%EA&bar=9 78594723757

Артем Валерьевич 09.05.2009 12:58

Ответ: Asm
 
мож кто знает как правильно написать инклуд библиотеки Б3Д СДК.
или кто уже таким страдал на асме или там может Фасме.
Долбаюсь уже 3 недели.
нашел хедеры для паскаля, С++, пюре басика, а вот мне нужен для Фасм.

Артем Валерьевич 21.11.2009 08:18

Ответ: Asm
 
Вложений: 1
Есть, заработало, только теперь ругается на Parent Entity.

Код:


;************************************
;**********-Blitz3D fasm-*********
;************************************
;Ôàéëåã íàïèñàí Âåðåòèíñêèì Àðò¸ìîì *
;5.05.2009 ã.                      *
;Ïðîøó íå áèòü íîãàìè              *
;                                  *
;************************************
                format PE GUI 4.0
                ;format PE CONSOLE 4.0
                        entry start
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              ;èíêëóäû
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
                include 'win32a.inc'
                include 'Blitz3D.inc'
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              ;êîíñòàíòû è ïåðåìåííûå
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
section '.data' data readable writeable
GW dd 640
GH dd 480
bits dd 32
m dd 3
light BBLight 0
camera BBCamera 0
cube BBModel 0
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
section '.code' code readable executable
                        start:
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              ;èíèöèàëèçàöèÿ äâèæêà Áëèö
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 invoke bbBeginBlitz3D
      invoke bbGraphics3D, [GW], [GH], [bits], [m]
      invoke bbCreateLight,0;
      mov [light], eax
      invoke bbCreateCamera,0;
      mov [camera], eax
      invoke bbCreateCube;
      mov [cube], eax
      invoke bbPositionEntity, [camera], 0, 0, -4
      @c_e:
      invoke bbKeyHit, 1;
      or eax, eax;
      jnz @end_c_e;
      invoke bbTurnEntity, [cube], 1, 2, 3
      invoke bbRenderWorld;
      invoke bbFlip;
      jmp @c_e;
      @end_c_e:
invoke bbEndBlitz3D
invoke ExitProcess,0
section '.idata' import data readable writeable
                include 'imp.inc'
section '.rsrc' resource data readable
                include 'res.inc'
 
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
              ;êîíåö ïðîãðàììû
;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


Reizel 14.02.2010 23:01

Ответ: Asm
 
ого на фасме еще есть возможность игры писать...Круто, однако!! :) Надо бы заняться...

IGR 14.02.2010 23:11

Ответ: Asm
 
сдк для того и создали что бы люди писали кто на чем привык и кому на чем угодно !!

Evgen 06.05.2023 13:41

Ответ: Asm
 
Вложений: 1
Что-то я эту тему как-то пропустил. 2009 год... Blitz3D + Ассемблер под Windows вот это франкенштейн...)

Цитата:

Сообщение от Артем Валерьевич (Сообщение 125803)
Есть, заработало, только теперь ругается на Parent Entity.

Если методы типа invoke bbCreateLight , invoke bbCreateCamera и подобные
в ассемблерном коде не содержат параметров то это по какой-то причине
приводит к возникновению ошибки "Parent entity does not exist"

Исправляется просто добавлением ,0 в конце
Хотя в документации четко написано что параметр parent опициональный.
Возможно это как-то связанно с самим механизмом invoke,
может какая-то неразбериха в стеке возникает, не знаю.

Код:

invoke bbCreateCube, 0
Вообще, то что касается необязательных параметров для функций Blitz3D в FASM с этим проблема.


Так же согласно документации в функцию TurnEntity entity,pitch#,yaw#,roll#,[,global]
мы передаем float значения (такие параметры помечены символом # на конце):

Код:

invoke bbTurnEntity, [cube], 1, 2, 3
Поэтому в числа нужно добавить "разделитель":

Код:

invoke bbPositionEntity, [cube], 0.0, 0.0, 5.0
Или можно просто добавить и f на конце (как в Си и Java)

Код:

invoke bbPositionEntity, [cube], 0f, 0f, 5f
Тоже самое касается других команд вроде:

Код:

invoke bbTurnEntity, [cube], 1f, 2f, 3f
В общем я немного подправил и дополнил код и получилось вот это:



Исходный код:

Код:

;******************************************************
;*                  Blitz3D on FASM                  *
;******************************************************

format PE GUI 4.0
entry start

include 'win32a.inc'
include 'Blitz3D.inc'

; ------------ константы и переменные -----------------
section '.data' data readable writeable

camera BBCamera 0
light BBLight 0

cone BBModel 0
cube BBModel 0
sphere BBModel 0

; ------------------------- код ------------------------
section '.code' code readable executable

start:
      invoke bbBeginBlitz3D
      invoke bbGraphics3D, 640, 480, 16, 3
      invoke bbCreateCamera, 0    ; paerent 0
      mov [camera], eax
      invoke bbCreateLight, 1, 0          ; 1 - direct light, parent null
      mov [light], eax

      invoke bbCreateCone, 32, BBTrue, 0  ; 32 segments, solid, parent null
      mov [cone], eax
      invoke bbPositionEntity, [cone], -3f, 0f, 5f
      invoke bbEntityColor, [cone], 255f, 32f, 32f

      invoke bbCreateCube, 0              ; parent null
      mov [cube], eax
      invoke bbPositionEntity, [cube], 0f, 0f, 6.5f
      invoke bbEntityColor, [cube], 70f, 155f, 30f

      invoke bbCreateSphere, 7, 0        ; detail level - 7, parent null
      mov [sphere], eax
      invoke bbPositionEntity, [sphere], 3f, 0f, 5f
      invoke bbEntityColor, [sphere], 0f, 128f, 255f

main_loop:
      invoke bbKeyHit, KEY_ESCAPE ; Wait Esc
      or eax, eax
      jnz exit_from_main_loop

      invoke bbTurnEntity, [cube], 0.5f, 2f, 1f
      invoke bbTurnEntity, [cone], 0f, 1f, 0.5f
      invoke bbTurnEntity, [sphere], 2f, 1f, 0.5f

      invoke bbRenderWorld      ; Render world to buffer
      invoke bbFlip            ; Flip buffers
      jmp main_loop;
exit_from_main_loop:
      invoke bbEndBlitz3D
      invoke ExitProcess,0

section '.idata' import data readable writeable
                include 'imp.inc'

section '.rsrc' resource data readable
                include 'res.inc'


Evgen 06.05.2023 13:48

Ответ: Asm
 
Вложений: 1
Также простой пример по Graphics2D (простая смена цвета фона):
Код:

;******************************************************
;*                  Blitz3D on FASM                  *
;******************************************************

format PE GUI 4.0
entry start

include 'win32a.inc'
include 'Blitz3D.inc'

; ------------ константы и переменные -----------------
section '.data' data readable writeable

camera BBCamera 0
light BBLight 0
cone BBModel 0
font BBFont 0

r dd 0
g dd 0
b dd 0

font_name db 'System',0
text db "Simple Text! Простой текст",0

; ------------------------- код ------------------------
section '.code' code readable executable

start:
      invoke bbBeginBlitz3D
      invoke bbGraphics, 640, 480, 32, 3

      invoke bbLoadFont, font_name, 32, BBTrue, BBFalse, BBTrue
      mov [font],eax
      invoke bbSetFont, [font]

main_2dloop:
      invoke bbKeyHit, KEY_ESCAPE
      or eax, eax
      jnz exit_from_main_loop          ; If Esc pressed then exit from app

      invoke bbClsColor, [r], [g], [b]  ; Set color and clear screen
      invoke bbCls
      inc [r]
      add [g],7
      add [b],3

      invoke bbLine, 20, 20, 20, 460
      invoke bbColor, 0, 128, 255
      invoke bbRect, 40, 40, 50, 50, BBTrue
      invoke bbColor, 255, 255, 255
      invoke bbText, 320, 220, text, BBTrue, BBFalse

      invoke bbFlip                    ; Show buffer

      jmp main_2dloop;

exit_from_main_loop:
      invoke bbEndBlitz3D
      invoke ExitProcess,0

section '.idata' import data readable writeable
                include 'imp.inc'

section '.rsrc' resource data readable
                include 'res.inc'



Если что возиться с командной строкой в 2023 году необязательно можно использовать утилиту-редактор FASMW которая идет в комплекте с Flat Assembler что-то вроде мини IDE.





_

Evgen 08.05.2023 23:42

Ответ: Asm
 
Обнаружил, что при выполнении происходит утечка стека. Причиной оказалось то, что для функций из B3D.dll библиотеки следует использовать cinvoke вместо invoke , иначе стек потихоньку заканчивается, что приводит к вылету приложения по прошествии недолгого времени.

Если функция вместо целого числа, возвращает значение с плавающей запятой типа float (пример такой функции bbEntityYaw). То нужно обязательно выгружать это значение из стека FPU иначе будут возникать непредсказуемые баги в процессе выполнения программы.


Часовой пояс GMT +4, время: 00:38.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot