Cookies op Tweakers

Tweakers maakt gebruik van cookies, onder andere om de website te analyseren, het gebruiksgemak te vergroten en advertenties te tonen. Door gebruik te maken van deze website, of door op 'Ga verder' te klikken, geef je toestemming voor het gebruik van cookies. Wil je meer informatie over cookies en hoe ze worden gebruikt, bekijk dan ons cookiebeleid.

Meer informatie

Door , , 24 reacties
Bron: The Netwide Assembler

Assembler is een van de oudste programmeertalen en wordt tegenwoordig vaak gebruikt voor hoog geoptimaliseerde toepassingen. NASM kan assembly omzetten naar verschillende binaire objectformaten zoals elf, coff, Mach-O, win32 en win64. De programmeurs hebben in de tweede helft van 2007 de ontwikkeling van NASM weer met volle moed opgepakt waardoor ondersteuning voor x86-64 en SSE3, 4.1, 4.2 en 5 niet meer ontbreken. De ontwikkelaars hebben deze week versie 2.01 uitgebracht voorzien van de volgende lijst met aanpassingen:

Version 2.01:
  • Fix the handling of MMX registers with explicit "qword" tags on memory (broken in 2.00 due to 64-bit changes.)
  • Fix the PREFETCH instructions.
  • Fix the documentation.
  • Fix debugging info when using "-f elf" (backwards alias for "-f elf32").
  • Man pages for rdoff tools (from the Debian project.)
  • ELF: handle large numbers of sections.
Version 2.00:
  • Added c99 data-type compliance.
  • Added general x86-64 support.
  • Added win64 (x86-64 COFF) output format.
  • Added __BITS__ standard macro.
  • Renamed the elf output format to elf32 for clarity.
  • Added elf64 and macho (MacOS X) output formats.
  • Added Numeric constants in DQ directive.
  • Added oword, do and reso pseudo operands.
  • Allow underscores in numbers.
  • Added 8-, 16- and 128-bit floating-point formats.
  • Added binary, octal and hexadecimal floating-point.
  • Correct the generation of floating-point constants.
  • Added Floating-point option control.
  • Added Infinity and NaN floating point support.
  • Added ELF Symbol Visibility support.
  • Added Setting OSABI value in ELF header directive.
  • Added Generate Makefile Dependencies option.
  • Added Unlimited Optimization Passes option.
  • Added %IFN and %ELIFN support.
  • Added Logical Negation Operator.
  • Enhanced Stack Relative Preprocessor Directives.
  • Enhanced ELF Debug Formats.
  • Enhanced Send Errors to a File option.
  • Added SSSE3, SSE4.1, SSE4.2, SSE5 support.
  • Added a large number of additional instructions.
  • Significant performance improvements.
Versienummer:2.01
Releasestatus:Final
Besturingssystemen:Windows 9x, Windows NT, Windows 2000, Linux, BSD, Windows XP, DOS, macOS, OS/2, Windows Server 2003, Windows Vista
Website:The Netwide Assembler
Download:http://sourceforge.net/project/showfiles.php?group_id=6208
Licentietype:Voorwaarden (GNU/BSD/etc.)
Moderatie-faq Wijzig weergave

Reacties (24)

Jaren geleden zelf ook nog assembly voor de x86 geprogrammeerd, heb er zelfs een zooi boeken voor gekocht (BIOS-programmeren, Peter Norton's Assembly programming guide - die laatste ben ik trouwens @#$@#$@ kwijt geraakt op school). Ook o.a. Asphyxia-tutorials voor low-level assembly programmeren waren erg leuk en leerzaam. Zijn ze nog steeds trouwens als je even zoekt op Google.

[Reactie gewijzigd door Tjeerd op 24 januari 2008 12:24]

"Asphyxia-tutorials" kan ik niet vinden op google, miss. heb je een linkje voor me?

(ik doe momenteel de Game-Design opleiding op het ROC A12 in ede en leer momenteel C (al noemen die mafketels het daar C++ :X ) en het leek mij wel handig om ASM te leren :) )
Hier zijn ze dan (Asphyxia VGA-tutorials gemaakt door Denthor):

http://www.hornet.scene.o...earch.cgi?search=Asphyxia

Meer het grafische programmeerwerk dus, maar heel erg leuk om te doen.
Ze noemde C jaren geleden ook al C++., zijn ze dat nu nog niet verleerd :P
Op een gegeven moment krijg je wel het ++ gedeelte... kwam bij mij pas aan het eind van jaar 2 begin jaar 3 (TI opleiding)

Heb een beetje meet assembly gespeeld, ook op de HTS, maar ben er niet echt mee doorgegaan. Programmeer toch liever in een OO taal...
De vrijheid is natuurlijk wel het hoogst mogelijke, maar vergeet niet dat je veel werk moet verzetten om relatief weinig voor elkaar te krijgen...
Ik gebruik het ook meer als aanvulling op C(++) wanneer ik echt iets extreem geoptimalizeerds nodig heb... (de meeste compilers zijn hier namelijk al vrij goed in, dus zo vaak komt het ook niet voor). Daarbij is het ook best een vereiste als je een beetje thuisbent in OS development land (sommige dingen moeten nog steeds gebeuren via assembly -> de bootloader bijvoorbeeld).

Gewoon alles tegen elkaar aan linken (dus zowel de object files uit de C(++) en Nasm compiler)... werkt prima!

Puur assembly gebruiken is gewoon niet haalbaar meer tegenwoordig met alle GUI's e.d. Daardoor is linken tegen C++ apps/libs een prima manier om te ontwikkelen.

[Reactie gewijzigd door Laurens-R op 23 januari 2008 16:45]

Puur assembly gebruiken is gewoon niet haalbaar meer tegenwoordig met alle GUI's e.d.

Het zal je verbazen hoeveel er nog in puur assembly wordt gemaakt. Wat dacht je van MenuetOS, een operating system compleet met GUI.
de bootloader bijvoorbeeld
Waarom zou een bootloader niet in C kunnen?
Ik kan mij voorstellen dat de meeste bootloaders erg ruimte-gelimiteerd zijn. Die van een PC bijvoorbeeld heeft een stuk wat echt binnen 512 Bytes moet passen.
De rest kan prima in een hogere programmeertaal gemaakt worden, maar dat eerste stukje lijkt me toch wat lastig om de compiler precies op die grootte te laten beperken.
Hoe veel of hoe weinig je met assembly voor elkaar krijgt, hangt er van af in wat voor domein je aan het werken bent. Als programmeur kun je vaak code beter optimaliseren dan de compiler kan (vooral daar waar MMX/SSE extensies veel verschil kunnen maken)
Steve Gibson op http://www.grc.com/ staat bekend om zijn SpinRite disk utility, software MET gui, die door al dat assembler razendsnel is.

Naar verluidt zijn al zijn andere tools ook in ASM geschreven...

Wat wel zo is: je kan er zoveel mee, als dat je er tijd in steekt. En ontwikkelen in C/C++ zal voor de meesten onder ons ietsje sneller gaan. :)
http://www.chrissawyer.com/faq3.htm is ook wel een leuk voorbeeld. Rollercoaster Tycoon is grotendeels in assembly gemaakt.
Mooi dat dit nog steeds actief uitgebouwd wordt. Kan helaas zelf nog steeds niet echt uit de voeten met assembly, heb het wel altijd al willen leren. Komt er nog wel een keer van, de vrijheid lijkt me echt heerlijk.
01: MOV EAX, 1
02: NOP
03: JMP 01

klaar, en wachten maar! :)
misschien eerst beginnen met "01 print Hello World" oid? of doen ze dat niet meer in 2008?

Laten we meten MenuetOS opnieuw compilen

[Reactie gewijzigd door g4wx3 op 24 januari 2008 01:34]

Daar gaan we. Onderstaand programma zou onder Linux moeten werken.

[data]
hello:
db "Hello world"
hello_end:

[text]
mov eax,sys_write
mov ebx,0
mov ecx,hello
mov edx,hello_end-hello
int $80
En hier in NASM formaat, inclusief het netjes eindigen van het programma:

section .data
hello: db "Hello world",10
hello_end:

section .text
global _start

_start:
mov eax,4
mov ebx,1
mov ecx,hello
mov edx,hello_end-hello
int 80h
mov eax,1
mov ebx,0
int 80h

compileren met:
nasm -f elf64 hello.asm
linken met:
ld -s -o hello hello.o
draaien met:
./hello

[Reactie gewijzigd door bartvb op 24 januari 2008 14:44]

ik krijg helemaal melancholische gevoelens hierbij! nasm gaat echt al een fikse poos mee, mooi dat ze nog steeds bezig zijn :)
In ractie op mensen die denkene dat nu nog programmeren in assembly geen zin zou hebben.. Waarom denk je dat de vroegere 3dfx zo ontzettend snel waren.. Het waren niet alleen de chips maar zeer zeker ook de drivers deze waren namelijk geschreven in assembly.. Het was alleen een beetje duur en tijd rovend... probeer maar eens mensen te vinden die native assembly schrijven/lezen
ffmpeg-devel mailinglist is een goede plek hiervoor :)
probeer maar eens mensen te vinden die native assembly schrijven/lezen
Waarom mensen, als compilers het ook kunnen. Heb je wel eens gezien wat VC++ 2005 voor asm genereert?
En dat doettie helemaal vanzelf natuurlijk...
Nou, bijna, je moet alleen zelf op F7 drukken.
(en de c++ source intypen)

Waar het om gaat is dat als je fatsoenlijk in C++ programmeert (wat tien keer zo efficiŽnt en leesbaar en flexibel en maintainable is als asm code) dat dat ding er dan uitstekende asm van maakt.

Op dit item kan niet meer gereageerd worden.



Apple iOS 10 Google Pixel Apple iPhone 7 Sony PlayStation VR AMD Radeon RX 480 4GB Battlefield 1 Google Android Nougat Watch Dogs 2

© 1998 - 2016 de Persgroep Online Services B.V. Tweakers vormt samen met o.a. Autotrack en Carsom.nl de Persgroep Online Services B.V. Hosting door True