[HN Gopher] The Art of Assembly Language Programming (1996)
       ___________________________________________________________________
        
       The Art of Assembly Language Programming (1996)
        
       Author : userbinator
       Score  : 86 points
       Date   : 2022-03-06 08:14 UTC (14 hours ago)
        
 (HTM) web link (www.phatcode.net)
 (TXT) w3m dump (www.phatcode.net)
        
       | bch wrote:
       | Related(?) I'm looking for recommendations for a good
       | intro/reference to the intel arch wrt operations and registers,
       | esp wrt Unix conventions (if unix differs from (eg) Windows wrt
       | creating a process or pushing/popping stack...)
        
       | canMarsHaveLife wrote:
       | Can Assembly be considered a programming language? Isn't is just
       | a language for... assembling?
        
         | shadowofneptune wrote:
         | This is true only for the most simple assemblers. In practice,
         | each assembler comes with its own distinct set of features.
         | 
         | Microsoft Macro Assembler for example offers:
         | 
         | * Records/structs, bitfields
         | 
         | * Typed labels/pointers. Intel in particular introduced this
         | feature.
         | 
         | * Procedure blocks which allow locally scoped labels within
         | them
         | 
         | * The automatic allocation of local variables onto the stack.
         | 
         | * if/then blocks, for loop blocks
         | 
         | * Memory model directives
         | 
         | * Macros, equates, etc.
         | 
         | Other assemblers like NASM omit some of these features, as
         | introducing versions of these features which are completely
         | compatible with the MASM ones would be difficult. For example,
         | NASM allows MASM-like procedure blocks, but they are not block-
         | scoped. They're just a notation for the programmer.
        
         | ghaff wrote:
         | Sure. It's less abstracted than anything except for machine
         | code but that doesn't make it not a language.
        
         | pavlov wrote:
         | Most assemblers have macros and other directives that give you
         | some level of higher-order control than just writing machine
         | code.
        
         | jazzyjackson wrote:
         | One might say it is the only programming language, everything
         | else is just macro expansion, converting pseudo-english
         | mnemonics into machine instruction.
         | 
         | Snark aside, yes, people program entire operating systems and
         | programs and games in assembly. Famously, Rollercoaster Tycoon
         | was written entirely in assembly.
        
         | mdp2021 wrote:
         | Yes, certainly Assembly is a programming language. If you could
         | not express your program in it, all of our discipline would
         | fall (if a script defined a process and what it translates to
         | did not...). "Things work" because /other/ languages translate
         | into it: that is the chief language, named ("symbolic") reading
         | of machine code. It has conditionals and loops, it has logic
         | and arithmetic operators, it has "exactly" what the processor
         | has: it is the most precise definition of the program, how can
         | it not be a programming language?
         | 
         | You are probably thinking of the assembling process of pieces
         | of machine code - through the assembler. But the assembler also
         | translates symbolics into machine code, in the goal to join the
         | different pieces of code and data - so it's more than just
         | concatenating. To define the memory addresses to be encoded for
         | jumps, for example, you must have defined them - so, in the
         | assembler (e.g. concatenating subroutines) you imply the
         | assembly (i.e. naming pieces of machine code, symbolically
         | treated).
        
       | shadowofneptune wrote:
       | A very useful book for MS-DOS programming. MASM is also an
       | excellent assembler, even in early versions. The proc/endp blocks
       | for instance make reading a subroutine much easier. Does anyone
       | know of a similar book for AMD64 assembly language programming?
        
         | ranger207 wrote:
         | The author (Randall Hyde) just released an x64 assembly book in
         | October: https://nostarch.com/art-64-bit-assembly
        
           | shadowofneptune wrote:
           | Thanks, this looks great!
        
       | ghaff wrote:
       | Another interesting book--at least for historical context--is
       | Michael Abrash's Zen of Assembly Language Programming. A lot of
       | the optimizations are a good read if you're into that sort of
       | thing but there's not a lot of practical interest for today.
       | (Abrash in fact never wrote the Volume 2 he was planning to.)
        
         | pan69 wrote:
         | Which is also hosted on Phatcode:
         | 
         | http://www.phatcode.net/res/224/files/html/index.html
        
       | djmips wrote:
       | People interested in this might also enjoy 'Inner Loops' (1997),
       | an excellent book that covers optimizing x86 at that time but is
       | instructive in general and the concepts are still applicable
       | today.
       | 
       | https://www.amazon.com/Inner-Loops-Sourcebook-Software-Devel...
        
       | krallja wrote:
       | Why does it call the processors the 886, 8286, 8386?
        
         | galangalalgol wrote:
         | That is a good question, maybe they had only heard it spoken,
         | so they thought it was 83 86 instead of 8086,80386 etc.
        
           | shadowofneptune wrote:
           | No, the book introduces these serial numbers as idealized
           | versions of the processors. It allows the reader, who is
           | treated as a beginner to processors, to develop a mental
           | model of them without any complications. The edge cases,
           | pitfalls, and issues of the true processors are revealed over
           | the course of the book.
           | 
           | Not sure about the merits of calling the ideal processors by
           | special names.
        
           | agumonkey wrote:
           | In France, 80386 was often read 80-3-86 (same for 80-2-86).
           | And eigty SPC three === eighty three.
        
             | makapuf wrote:
             | Never heard of it that way in france with my friends, for
             | me it was always 80-86, 80-88 or just 386 or 286 (or 80-286
             | if you wanted to sound technical).
        
               | agumonkey wrote:
               | well well well .. I think I really heard it that way. Not
               | that it means a lot anyway.
        
         | djur wrote:
         | They're simplified hypothetical variants of the x86 processors,
         | according to one chapter.
        
           | krallja wrote:
           | Ah, I see it in Section 3.3: http://www.phatcode.net/res/223/
           | files/html/Chapter_3/CH03-3....
        
       | pan69 wrote:
       | This version of the book is good! Great for beginners and experts
       | alike. However, in later versions of this book (one of which I
       | have on my bookshelf), the author uses High Level Assembler (HLA)
       | which is according to the back cover of the book; "a
       | revolutionary tool...". It is basically a proprietary compiler
       | that uses a syntax that is "interesting" but not portable to the
       | rest of the world of x86 assembler.
       | 
       | So, if you buy the book (like I did), please be aware of this.
        
         | userbinator wrote:
         | I agree. HLA syntax can best be described as "if someone who
         | knows only C decided to make an Asm syntax". I remember much
         | flamewars on newsgroups about it.
         | 
         | GNU GAS syntax is roughly as repugnant, but became popular only
         | because of GNU/Linux. Deviating from the official docs has
         | caused much divisiveness and confusion.
        
           | pjmlp wrote:
           | TI used to have an Assembly for a DSP that was like C written
           | in SSA form.
           | 
           | No idea how it was called.
           | 
           | Fully agree with GAS syntax being a pain.
        
       | vbezhenar wrote:
       | I'm reading RP2040 Assembly Language Programming book right now.
       | It's very interesting introduction to the assembly language. And
       | using assembly for microcontrollers seems very fitting to me, at
       | least for hobbyist level.
        
       | phendrenad2 wrote:
       | What's a good modern book for modern assembly languges?
        
       | imiric wrote:
       | Would this still be relevant/approachable for a beginner coming
       | from higher level languages, or is there a more modern resource
       | for learning assembly that would be better suited?
       | 
       | I guess most of it is still relevant, but I'd rather not deal
       | with DOS to follow along, and would prefer working on Linux.
       | 
       | Also, the x86 instruction set seems daunting to pick up for a
       | beginner. Would it be better learning on a 4/8-bit or toy machine
       | first?
        
         | Gene_Parmesan wrote:
         | I found the book "Programming From the Ground Up" to be a
         | pretty good intro to programming in x86, and importantly, more
         | recent than this text. I had to do just a tiny bit of research
         | to find out how to get my shell to emulate 32 bit mode, since
         | it's x86 and not x86-64, but it is in fact Linux based. I
         | imagine it'd be an order of magnitude easier than trying to
         | figure out a DOS setup.
         | 
         | The full x86 ISA is daunting, I'm sure, but for a beginner
         | looking to get a sense of what asm is, you don't engage with
         | the entirety of the ISA. The PFTGU text is great specifically
         | because it assumes an audience of beginners who want to learn
         | the basics of how asm operates to enable core programming
         | concepts. It's not aiming to be exhaustive like the linked
         | text.
         | 
         | Edit: And also importantly, it's also (legitimately) available
         | for free online.
        
           | Shosty123 wrote:
           | There's a new version of that book. Same author:
           | 
           | https://link.springer.com/book/10.1007/978-1-4842-7437-8
        
         | pedrolins wrote:
         | I'm not an assembly programmer, but I've learned assembly as
         | part of introductory CS courses (computer architecture classes)
         | and the approachable alternative you're looking for is the
         | assembly language of a RISC architecture such as ARM, MIPS, or
         | RISC-V. I'd recommend learning the latter because of how
         | approachable it is.
        
         | userbinator wrote:
         | If you want to start small, Z80 might be a good point, but it
         | seems opposed to your not wanting to start with DOS; a small VM
         | will be very useful, and with Asm you'll soon discover that
         | even 64k is plenty to play with.
        
         | xupybd wrote:
         | The 8051 microcontroller is pretty easy to learn. I'd recommend
         | that as a starter on assembly. But if you want to end up
         | playing with x86 why not start there.
        
       ___________________________________________________________________
       (page generated 2022-03-06 23:00 UTC)