• Grom_PE 6 months ago

    flat assembler g (fasmg) does this. It has a powerful macro language, in which, among other architectures and formats, it implements x86 and ELF/PE/macho and is able to assemble itself.

    I like to use it for scripting for turning binary formats to text and vice-versa.

  • IshKebab 6 months ago

    This is very cool. On the topic of assembly, does anyone know of a language that is higher level than assembly, but retains the property that the output doesn't depend on the compiler or its flags?

    I want it for low level CPU benchmarks and tests. Using C or assembly for those both suck.

    I don't really know exactly how this would look (is the register allocator part of the spec?) but has anyone tried something like this?

    • giancarlostoro 6 months ago

      There was a post on HN where someone implemented a new language compiler purely from Assembly, and shows you from nothing to the very end where it looked mostly like a LISP assembly language. It was really neat. Sadly I dont have the buzzwords for Google to find it anymore, used to be able to find the powerpoint slides for it.

      I forgot about HLA (High Level Assembly) though I have not used it personally, there were also a few others like C-- as well:

      https://en.wikipedia.org/wiki/High_Level_Assembly

    • asgeir 6 months ago

      Have you tried looking into something like NASM's macro functionality?

      • actionfromafar 6 months ago

        That sounds like a tall order. If you want it for CPU benchmarks, you presumably want to be able to use all real CPU machine instructions. Or a simpler language instruction set but with an optimizer, but it's hard to write an optimizer and then you could never change the optimizer.

        • pjmlp 6 months ago

          Naturally, it is time for some Forth. :)

          • Levitating 6 months ago

            > but retains the property that the output doesn't depend on the compiler or its flags?

            That's not an inherent property of assemblers, and not the case in practice either.

            • IshKebab 6 months ago

              Yes I know there are some minor caveats with pseudo-instructions and relocations but in general it is basically true. You can't wildly change the output without changing the source like you can with C.

          • unquietwiki 6 months ago

            The demo website at https://hlorenzi.github.io/customasm/web/ makes this even more accessible. I can actually follow along as to how this works.

            • westurner 6 months ago

              Is there an ISA for WASM that's faster than RISC-V 64, which is currently 3x faster than x86_64 on x86_64 FWICS? https://github.com/ktock/container2wasm#emscripten-on-browse... demo: https://ktock.github.io/container2wasm-demo/

              • nekitamo 6 months ago

                This is great! I did a project just like this one for my Master's thesis at University of Glasgow, although this project looks to be much more mature and advanced (plus it has users!):

                https://github.com/markoglasgow/assembler_generator

                • zyedidia 6 months ago

                  This is very cool! I'm always on the lookout for extensible assemblers. I especially want one that can handle a normalized subset of GNU assembly so that it can be used on the output of LLVM or GCC (using existing assembly languages, but assembling them in non-standard ways or with extensions).

                  • teo_zero 6 months ago

                    Interesting. If only it supported little-endian architectures!

                    • jas39 6 months ago

                      My complements on this. Assembler is the ultimate understanding and control.