Size: a a a

2020 May 23

NI

Nikita Ivanov in pro.asm
ffi смотрел. вещь неплохая, согласен, мб заюзаю
источник

NI

Nikita Ivanov in pro.asm
ну или как ты сказал сгенерить можно просто
источник

NI

Nikita Ivanov in pro.asm
но!
источник

NI

Nikita Ivanov in pro.asm
пушить те же инты просто
источник

NI

Nikita Ivanov in pro.asm
а вот как сложные типы пихаются я понятия не имею
источник

s

s54816 in pro.asm
Nikita Ivanov
а вот как сложные типы пихаются я понятия не имею
Тоже описано в ABI. Мелкие типы расширяются до интов, структуры по необходимости выравниваются до размера, кратного инту и копируются, плавающая точка может передаваться через FPU/SIMD-регистры. В общем, всё зависит от конкретной платформы.
источник

NI

Nikita Ivanov in pro.asm
так
источник

NI

Nikita Ivanov in pro.asm
а что насчёт структур? больших
источник

s

s54816 in pro.asm
Nikita Ivanov
а вот как сложные типы пихаются я понятия не имею
https://www.agner.org/optimize/calling_conventions.pdf лучше начать с этого.
источник

NI

Nikita Ivanov in pro.asm
платформа х86
источник

s

s54816 in pro.asm
Nikita Ivanov
а что насчёт структур? больших
Если не по ссылке, то тупо копируются в стек.
источник

NI

Nikita Ivanov in pro.asm
лол норм
источник

О

Оксана in pro.asm
Привет) Подскажите, пожалуйста, почему на выходе я получаю "Ошибка сегментирования"? Но результат выводится

global main
extern printf
extern scanf

section .data
formatIn db "%f %f %f",0
formatOut db "numbers is %f",10,0

section .bss

x resq 1
b resq 1
a resq 1
r_s resq 1

section .text

main:
 push x
 push b
 push a
 push formatIn
 call scanf
 add esp,28

 fld dword[a]
 fld dword[a]
 fld dword[b]
 fsub
 fdiv
 fld dword[a]
 fld dword[b]
 fadd
 fld dword[b]
 fld dword[x]
 fadd
 fdiv
 fsin
 fmul
 
 fld dword[b]
 fld dword[a]
 fld dword[b]
 fsub
 fld dword[b]
 fld dword[x]
 fadd
 fmul
 fdiv
 fsub

 fstp dword[r_s]
 fld dword [r_s]
 sub esp,8
   fstp qword [esp]
   push formatOut
   call printf
   add esp,12
   ret
источник

ЕК

Евгений Красников (J... in pro.asm
Оксана
Привет) Подскажите, пожалуйста, почему на выходе я получаю "Ошибка сегментирования"? Но результат выводится

global main
extern printf
extern scanf

section .data
formatIn db "%f %f %f",0
formatOut db "numbers is %f",10,0

section .bss

x resq 1
b resq 1
a resq 1
r_s resq 1

section .text

main:
 push x
 push b
 push a
 push formatIn
 call scanf
 add esp,28

 fld dword[a]
 fld dword[a]
 fld dword[b]
 fsub
 fdiv
 fld dword[a]
 fld dword[b]
 fadd
 fld dword[b]
 fld dword[x]
 fadd
 fdiv
 fsin
 fmul
 
 fld dword[b]
 fld dword[a]
 fld dword[b]
 fsub
 fld dword[b]
 fld dword[x]
 fadd
 fmul
 fdiv
 fsub

 fstp dword[r_s]
 fld dword [r_s]
 sub esp,8
   fstp qword [esp]
   push formatOut
   call printf
   add esp,12
   ret
Почему add esp,28, когда в стек засунуно 16 байт (4*4)?
источник

ЕК

Евгений Красников (J... in pro.asm
А дальше будет переполнение стека fpu, т.к. fadd, fdiv и пр без суффикса p.
источник

О

Оксана in pro.asm
А вот такую запись можно использовать? то есть выражение a/(a-b)

fld dword[a]
 fld dword[a]
 fld dword[b]
 fsub
 fdiv
источник

О

Оксана in pro.asm
Евгений Красников (Jin X)
Почему add esp,28, когда в стек засунуно 16 байт (4*4)?
спасибо, помогло
источник

ЕК

Евгений Красников (J... in pro.asm
И ещё. Резервируется qword, а работа идёт с dword.
Вообще, можно писать fadd qword[x] и т.д.
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮... in pro.asm
Оксана
А вот такую запись можно использовать? то есть выражение a/(a-b)

fld dword[a]
 fld dword[a]
 fld dword[b]
 fsub
 fdiv
можно, но у тя запись неправльная. первое же действие делает b-a
источник

О

Оксана in pro.asm
Aiwan ╭∩╮ (òÓ,) ╭∩╮
можно, но у тя запись неправльная. первое же действие делает b-a
я уже запуталась как он считает
источник