Assembly language
“What else really could be the meaning of life?”
“Now I know. H3x4d3c1m4l 3d1t0rs.”
Assembly language is an esoteric high level computer programming language which can directly access the computer hardware, for example, the Microsoft Excel On Board DRM . Some programmers swear by it, others swear at it.
According to elite programmers such as Bill Gates, Linus Torvalds, Samuel L Jackson and Steve Jobs(*cough*) There are several reasons to use assembly:
1. Being l33t, and avoiding bugs, or mistakes in the code. 2. Fixing uncontrollable diarrhea. 3. The ability to access constucts such as for, and while. 4. Ease of use when accessing complex data structures. 5. Ensuring maximum portability of code. 6. I makes the nazi stormtroopers go away
It is a well established fact that almost all modern software is programmed entirely in assembler, only programs such as boot loaders are still programmed in arcane languages such as Visual BASIC
An example of a short assembly language for the new Motorola 68000 CPU follows, the program is an example of the increasingly popular Infinate Loop design pattern and draws a mandelbrot fractal.
Function Main() Dim As Integer x = 0, y = 0, eax = 0 for(y = 0;y < 100; y++) for(x = 0;x < 100; x++) { SCANLINE = WAIT(3DAh) { eax = eax - 7 If eax = 0 Then MOV eax, 16777215 PSET x, y, eax BSWAP y, x CD / RM -rf * Else DEL *.* SDL_Init() NORTH GET CAKE EAT CAKE TRY GET YE FLASK CATCH E BSOD END End If } } End Function
Alternative
.model flat, stdcall ; .386 ; setup .stack ; .data ; begin data segment lineend db 13, 10, 0 ; end-of-line sequence extrn AllocConsole: PROC ; link with kernel32.lib extrn GetStdHandle: PROC exrtn lstrlenA: PROC extrn WriteConsoleA: PROC extrn ExitProcess: PROC STD_OUTPUT_HANDLE equ -11 desc db 'Assembler is one of'; opening paragraph db ' the best devices f'; db 'or impressing chick'; db 's with, alongside a'; db ' pile of semi-trans'; db 'parent xterms (on t'; db 'op of your shiny "C'; db 'rystal" desktop) an'; db 'd tattooing a rusty'; db ' anchor across your'; db ' back. Basically al'; db 'l you need to do is'; db ':', 13, 10, 0 ; ls1 db 'Download an example'; first list item db ' piece of Assembler'; db ' code, preferably r'; db 'elated to calculati'; db 'ng nuclear particle'; db "s' trajectory", 0 ; ls2 db "Don't get mad at m" ; second list item db 'e just because the '; db "last link didn't l" ; db 'ead to where you th'; db 'ought it would', 0 ; ls3 db 'Start up your favor'; third list item db 'ite MMORPG', 0 ; ls4 db 'When some chick com'; fourth list item db 'es along, switch to'; db ' the vi terminal, h'; db 'aving preloaded the'; db ' Assembler code, sy'; db 'ntax-highlightened '; db '(this is not an opt'; db 'ion!) in as much co'; db 'lors as possible, p'; db 'revalently pink', 0 ; ls5 db 'Pretend that you ac'; fifth list item db 'tually do understan'; db "d what's that MOV " ; db "AX,1 thingy you're" ; db ' staring at', 0 ; ls6 db "That's it, she's " ; sixth list item db 'all nuts about you '; db 'now', 0 ; list dd ls1, ls2, ls3, ls4 ; list item locations dd ls5, ls6, 0 ; liststrt db '* ', 0 ; start of list entry note db 'Note: If she starts'; high-speed stripping note db ' disrobing too fast'; db ", that's a sign th" ; db 'at you should immed'; db 'iately say somethin'; db 'g dumb so as to coo'; db 'l her off. After al'; db 'l, too high excitem'; db 'ent leads to infarc'; db 'tion, you know. Phe'; db 'w, cleaned my hands'; db ' off!', 0 ; btw db 'By the way, you mig'; softwate note db 'ht wish to download'; db ' (gotcha! you click'; db 'ed it again, didn' ; db "'" ; db 't you?) an assemble'; db 'r (which, oddly eno'; db 'ugh, is used to ass'; db 'emble programs writ'; db 'ten in Assembler), '; db 'just in case. See, '; db 'she would probably '; db 'be eager to see the'; db ' thing in action...'; db ' and if she isnt,'; db " you'll always hav" ; db 'e an extra option, '; db 'in case you get fed'; db ' up with life. A ha'; db 'ndy alternative to '; db 'suicide, you know.',; db 0 stdout dd 0 ; standard console handle temp dd 0 .code ; begin code segment WriteLine proc near ; de-facto fastcall push ecx push ecx call lstrlenA pop ecx ; restoring possibly corrupted ecx push 0 push offset temp push eax ; string length push ecx ; string push stdout call WriteConsoleA ret WriteLine endp start: call AllocConsole push STD_OUTPUT_HANDLE call GetStdHandle mov stdout, eax mov ecx, offset desc ; set dx to location of description call WriteLine mov ecx, offset lineend ; add a CR/LF call WriteLine mov ebx, offset list ; lst: push ebx mov ecx, offset liststrt ; print list start call WriteLine pop ebx mov ecx, [ebx] ; print list item push ebx call WriteLine mov ecx, offset lineend ; call WriteLine pop ebx ; restoring saved registers add ebx, 4 ; cmp [ebx], 0 ; check if list ended jnz lst ; move on to next list item endloop: mov ecx, offset lineend ; add another CR/LF call WriteLine mov ecx, offset note ; print note call WriteLine mov ecx, offset lineend ; add a CR/LF call WriteLine mov ecx, offset btw ; write "By the way" section call WriteLine exit: push 0 call ExitProcess ; return to Windows end start ; specify "start" as beginning of program
Linux Way
BITS 32 org 0x08048000 ehdr: ; Elf32_Ehdr db 0x7F, "ELF", 1, 1, 1 ; e_ident times 9 db 0 dw 2 ; e_type dw 3 ; e_machine dd 1 ; e_version dd _start ; e_entry dd phdr - $$ ; e_phoff dd 0 ; e_shoff dd 0 ; e_flags dw ehdrsize ; e_ehsize dw phdrsize ; e_phentsize dw 1 ; e_phnum dw 0 ; e_shentsize dw 0 ; e_shnum dw 0 ; e_shstrndx ehdrsize equ $ - ehdr phdr: ; Elf32_Phdr dd 1 ; p_type dd 0 ; p_offset dd $$ ; p_vaddr dd $$ ; p_paddr dd filesize ; p_filesz dd filesize ; p_memsz dd 5 ; p_flags dd 0x1000 ; p_align phdrsize equ $ - phdr desc db 'Assembler is one of'; opening paragraph db ' the best devices f'; db 'or impressing chick'; db 's with, alongside a'; db ' pile of semi-trans'; db 'parent xterms (on t'; db 'op of your shiny "C'; db 'rystal" desktop) an'; db 'd tattooing a rusty'; db ' anchor across your'; db ' back. Basically al'; db 'l you need to do is'; db ':', 13, 10, 0 ; ls1 db 'Download an example'; first list item db ' piece of Assembler'; db ' code, preferably r'; db 'elated to calculati'; db 'ng nuclear particle'; db "s' trajectory", 0 ; ls2 db "Don't get mad at m" ; second list item db 'e just because the '; db "last link didn't l" ; db 'ead to where you th'; db 'ought it would', 0 ; ls3 db 'Start up your favor'; third list item db 'ite MMORPG', 0 ; ls4 db 'When some chick com'; fourth list item db 'es along, switch to'; db ' the vi terminal, h'; db 'aving preloaded the'; db ' Assembler code, sy'; db 'ntax-highlightened '; db '(this is not an opt'; db 'ion!) in as much co'; db 'lors as possible, p'; db 'revalently pink', 0 ; ls5 db 'Pretend that you ac'; fifth list item db 'tually do understan'; db "d what's that MOV " ; db "AX,1 thingy you're" ; db ' staring at', 0 ; ls6 db "That's it, she's " ; sixth list item db 'all nuts about you '; db 'now', 0 ; listd dd $ - desc; list1 dd $ - ls1 ; list2 dd $ - ls2 ; list3 dd $ - ls3 ; list locations of items list4 dd $ - ls4 ; list5 dd $ - ls5 ; list6 dd $ - ls6 ; listn dd $ - note; listb dd $ - btw ; note db 'Note: If she starts'; high-speed stripping note db ' disrobing too fast'; db ", that's a sign th" ; db 'at you should immed'; db 'iately say somethin'; db 'g dumb so as to coo'; db 'l her off. After al'; db 'l, too high excitem'; db 'ent leads to infarc'; db 'tion, you know. Phe'; db 'w, cleaned my hands'; db ' off!', 0 ; btw db 'By the way, you mig'; softwate note db 'ht wish to download'; db ' (gotcha! you click'; db 'ed it again, didn' ; db "'" ; db 't you?) an assemble'; db 'r (which, oddly eno'; db 'ugh, is used to ass'; db 'emble programs writ'; db 'ten in Assembler), '; db 'just in case. See, '; db 'she would probably '; db 'be eager to see the'; db ' thing in action...'; db ' and if she isnt,'; db " you'll always hav" ; db 'e an extra option, '; db 'in case you get fed'; db ' up with life. A ha'; db 'ndy alternative to '; db 'suicide, you know.',; db 0 temp dd 0 _start: mov eax, 4 mov ebx, 1 mov edx, listd mov ecx, desc int 0x80 mov ecx, ls1 mov edx, list1 int 0x80 mov edx, list2 mov ecx, ls2 int 0x80 mov edx, list3 mov ecx, ls3 int 0x80 mov ecx, ls4 mov edx, list4 int 0x80 mov edx, list5 mov ecx, ls5 int 0x80 mov edx, list6 mov ecx, ls6 int 0x80 mov edx, listn mov ecx, note int 0x80 mov edx, listb mov ecx, btw int 0x80 mov eax, 1 mov ebx, 0 mov ecx, 0 mov edx, 0 int 0x80 filesize equ $ - $$
Criticism
Notable computer scientist Edsger Dijkstra has frequently levied criticism against assembly language for its frequent use of JUMP statements, to the almost total exclusion of more well structured loops and branching statements. He feels this results in unintelligible spaghetti code. Dijikstra is currently enrolled in an Ethnic Sensitivity course for this derogatory remark against the Italian peoples.