This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
laboratoare:laborator-11 [2016/01/08 19:12] razvan.deaconescu [[2p] 5. Extindere calcul maxim în assembly cu apel din C] |
laboratoare:laborator-11 [2016/01/09 13:39] (current) razvan.deaconescu [[2p] Bonus: Calcul maxim în C cu apel din assembly pe 64 de biți] |
||
---|---|---|---|
Line 213: | Line 213: | ||
Actualizați programul de la exercițiile 4 și 5 în așa fel încât să îl rulați folosind un sistem pe 64 de biți. Pentru aceasta, va trebui să asamblați programul în limbaj de asamblare pentru un executabil pe 64 de biți și să folosiți consola Visual Studio pe 64 de biți. | Actualizați programul de la exercițiile 4 și 5 în așa fel încât să îl rulați folosind un sistem pe 64 de biți. Pentru aceasta, va trebui să asamblați programul în limbaj de asamblare pentru un executabil pe 64 de biți și să folosiți consola Visual Studio pe 64 de biți. | ||
+ | |||
<note tip> | <note tip> | ||
[[https://msdn.microsoft.com/en-us/library/windows/hardware/ff561499%28v=vs.85%29.aspx|Calling convention in Windows x64 binaries]]. | [[https://msdn.microsoft.com/en-us/library/windows/hardware/ff561499%28v=vs.85%29.aspx|Calling convention in Windows x64 binaries]]. | ||
Pe arhitectura x64 parametri nu se mai trimit stivă, ci se pun registre. Primii 3 parametri se pun în: RCX, RDX, R8. Aceasta nu este o convenţie adoptată uniform. Această conveţie este este doar pe Windows, pe Linux având alte registre care sunt folosite pentru a transmite parametri unei funcţii. | Pe arhitectura x64 parametri nu se mai trimit stivă, ci se pun registre. Primii 3 parametri se pun în: RCX, RDX, R8. Aceasta nu este o convenţie adoptată uniform. Această conveţie este este doar pe Windows, pe Linux având alte registre care sunt folosite pentru a transmite parametri unei funcţii. | ||
+ | </note> | ||
+ | |||
+ | <note tip> | ||
+ | Trebuie să aveți în vedere următorii pași: | ||
+ | * Să folosiți pentru dezvoltare consola ''VS2015 x64 Native Tools Command Prompt''. | ||
+ | * Să folosiți opțiunea ''-f win64'' la ''nasm''. | ||
+ | * Să folosiți [[https://msdn.microsoft.com/en-us/library/windows/hardware/ff561499%28v=vs.85%29.aspx|convenția de apel Windows x64]]. | ||
+ | * Să înlocuiți numele ''_get_max'' cu ''get_max'' (fără undescore-ul de la început) în fișierul ''max.asm''. | ||
+ | |||
</note> | </note> | ||
==== [2p] Bonus: Calcul maxim în C cu apel din assembly pe 64 de biți ==== | ==== [2p] Bonus: Calcul maxim în C cu apel din assembly pe 64 de biți ==== | ||
Actualizați programul de la exercițiile 6 și 7 în așa fel încât să îl rulați folosind un sistem pe 64 de biți. Pentru aceasta, va trebui să asamblați programul în limbaj de asamblare pentru un executabil pe 64 de biți și să folosiți consola Visual Studio pe 64 de biți. | Actualizați programul de la exercițiile 6 și 7 în așa fel încât să îl rulați folosind un sistem pe 64 de biți. Pentru aceasta, va trebui să asamblați programul în limbaj de asamblare pentru un executabil pe 64 de biți și să folosiți consola Visual Studio pe 64 de biți. | ||
+ | |||
+ | <note tip> | ||
+ | Să folosiți binarul ''gcc'' din calea cu MinGW64, adică ''%%C:\"Program Files (x86)"\SASM\MinGW64\bin\gcc%%''. | ||
+ | </note> | ||
+ | |||
+ | <note> | ||
+ | E suficient să obțineți executabilul ''main.exe''. Programul nu va funcționa din cauza unor probleme neelucidate de linking. Vom depana problema în următoarea perioadă :-) | ||
+ | </note> | ||
+ | |||
+ | ===== Soluții ===== | ||
+ | |||
+ | [[http://elf.cs.pub.ro/asm/res/laboratoare/lab-11-sol.zip|Soluții de referință pentru exercițiile de laborator]] | ||
+ |