Running Assembly Code for Mac OS X

Tayvion Payton picture Tayvion Payton · Mar 6, 2017 · Viewed 10.6k times · Source

I'm currently in an assembly course and i have to run the code on Mac OS X and I'm lost on how i should run the code on Mac OS X

Here's the code:

; Description: This program adds and subtracts 16‐bit integers.
; Revision Date:
INCLUDE Irvine32.inc
.code
main PROC
mov ax, 650          ; AX = 650h
sub ax, 50h          ; AX = 600h
sub ax, 100h         ; AX = 500h
sub ax, 300h         ; AX = 200h
call DumpRegs        ; display registers
exit
main ENDP
END main

This is the error message that i am receiving

Tayvions-MacBook-Pro:~ tayvionpayton$ cd Documents/Code/
Tayvions-MacBook-Pro:Code tayvionpayton$ nasm -f macho32 -o0 assembly_Tp.asm 
assembly_Tp.asm:4: error: parser: instruction expected
assembly_Tp.asm:5: warning: label alone on a line without a colon might be in error
assembly_Tp.asm:6: error: parser: instruction expected
assembly_Tp.asm:12: warning: label alone on a line without a colon might be in error
assembly_Tp.asm:13: error: symbol `main' redefined
assembly_Tp.asm:13: error: parser: instruction expected
assembly_Tp.asm:14: error: parser: instruction expected
Tayvions-MacBook-Pro:Code tayvionpayton$ 

Answer

Frank C. picture Frank C. · Mar 6, 2017

Assembler Code is not run, it is:

  1. Assembled/Compiled - There are a few choices depending on style and syntax. In that you've used Intel syntax try NASM. There is also gnu assembler which is used when writing source code in what is called AT&T Syntax syntax. See GAS.
  2. Once you compile the source code to an object code format, a linker is invoked to resolve external references and/or attaching static libraries to create an executable file. You do this with gnu linker [LD].3

Here are examples of a two step compile/link using NASM:

First compile the source code to an object file. This example is 32 bit:

nasm -f macho32 -O0 helloworld.asm 

This will produce a helloworld.o (object) file. You then need to finish this by linking:

ld helloworld.o -o helloworld

You can now run with ./helloworld