The MASM Forum

64 bit assembler => Assembly languages for non-x86 ISAs => Topic started by: lucho on January 04, 2025, 04:26:02 AM

Title: Microsoft ARM Macro Assembler (armasm64)
Post by: lucho on January 04, 2025, 04:26:02 AM
As you know, Microsoft ported the Windows operating system to ARM64. They've created a new ARM macro assembler which has similar command-line options (https://learn.microsoft.com/cpp/assembler/arm/arm-assembler-command-line-reference) to the ARM (ex-Keil) assembler and uses most of its directives with some differences (https://learn.microsoft.com/cpp/assembler/arm/arm-assembler-directives) but nonetheless it's not the same, as it's reference (https://learn.microsoft.com/cpp/assembler/arm/arm-assembler-reference) states:

QuoteThe armasm assembler that the ARM Developer website describes isn't the same as the Microsoft armasm assembler that's included in Visual Studio and is documented in this section.

If you run just "armasm64", it outputs the following:

Quote
Microsoft (R) ARM Macro Assembler Version 14.39.33521.0 for 64 bits
Copyright (C) Microsoft Corporation.  All rights reserved.

 Usage:      armasm [<options>] sourcefile objectfile
             armasm [<options>] -o objectfile sourcefile
             armasm -h              for help

<options>:            (Upper case shows allowable abbreviation)
  -Errors     errorsfile       redirect stderr diagnostics to errorsfile
  -I          dir[;dir]        add dirs to include search path
  -PreDefine  directive        pre-execute a SET{L,A,S} directive
  -NOWarn                      turn off warning messages
  -ignore <warning-num>        don't report warning-num
  -help                        help (this information)
  -via <file>                  read further arguments from <file>
  -machine <machine>           set the PE machine type field
  -g                           generate debugging info
  -gh:SHA1                     use SHA1 for file checksum in debug info
  -gh:SHA_256                  use SHA256 for file checksum in debug info (default)
  -funcOverride:<func>         emit function overriding support for <func>
  -errorReport:<option>        deprecated. Report internal assembler errors to Microsoft
      none - do not send report
      prompt - prompt to immediately send report
      queue - at next admin logon, prompt to send report (default)
      send - send report automatically

<machine>:  ARM64 | ARM64EC

Title: Re: Microsoft ARM Macro Assembler (armasm64)
Post by: TimoVJL on January 04, 2025, 04:32:19 AM
Some info of Windows ARM OS
Windows on Arm (https://learn.microsoft.com/en-us/windows/arm/overview)
Title: Re: Microsoft ARM Macro Assembler (armasm64)
Post by: lucho on January 06, 2025, 01:43:28 AM
Thanks! I think that of all ARM64-based computers by Acer, Apple, Asus, Dell, HP, Lenovo, Microsoft, Samsung, etc, Apple Silicon Macs are the most popular. Alas, Boot Camp, which allowed Windows installation on the Intel-based Macs, isn't available for Apple Silicon Macs. But Windows can still be installed there – on a virtual machine running at native speed – via the now free VMware Fusion. Here's an article (text + images + video) showing how to do that in 39 (!) steps:

https://9to5mac.com/2024/08/24/how-to-install-windows-11-arm-apple-silicon-mac-free-vmware-fusion-13-pro-video/ (https://9to5mac.com/2024/08/24/how-to-install-windows-11-arm-apple-silicon-mac-free-vmware-fusion-13-pro-video/)
Title: Re: Microsoft ARM Macro Assembler (armasm64)
Post by: Vortex on January 06, 2025, 06:36:38 AM
Hi lucho,

Talking about armasm64, how is the situation of the high level constructs \ HLL of this assembler? As you know, ml64 does not offer a built-in invoke macro.
Title: Re: Microsoft ARM Macro Assembler (armasm64)
Post by: lucho on January 07, 2025, 10:08:17 PM
I don't see anything like INVOKE there either. The closest one IMHO is MACRO (https://developer.arm.com/documentation/dui0802/b/Directives-Reference/MACRO-and-MEND), but this follows from the very name of the assembler (Macro Assembler).
Title: Re: Microsoft ARM Macro Assembler (armasm64)
Post by: lucho on January 20, 2025, 04:22:00 AM
It turns out that ARM regards (https://developer.arm.com/documentation/100067/0611/armclang-Command-line-Options/-masm) the ARMASM assembler (and hence the compatible Microsoft ARM Macro Assembler) as "legacy" (obsolete):

QuoteArm recommends that you migrate all legacy armasm syntax assembly source files into GNU syntax assembly source files. For more information, see Migrating from armasm to the armclang integrated assembler (https://developer.arm.com/docs/100068/0611/migrating-from-armasm-to-the-armclang-integrated-assembler) in the Migration and Compatibility Guide.

Here is a reference (https://developer.arm.com/documentation/100067) for the armclang integrated assembler, which is compatible with the GNU Assembler (https://sourceware.org/binutils/docs/as/). By the way, clang is a part not only of Microsoft Visual Studio but there is also a variant of mingw (https://github.com/mstorsjo/llvm-mingw/releases) based on it (host architecture is given just before the .zip suffix, and for each host architecture, there are compilers for several target architectures, including aarch64).