OpenVMS Source Code Demos

helloworld

	.TITLE  helloworld
	.IDENT  /V1.1/
;-------------------------------------------------------------------------
; title : helloworld.mar
; author: Steve Hoffman
; notes : This is a VAX Macro32 Hello, World program. (also works as-is on
;	  OpenVMS on Alpha (provided you have located and installed the
;	  public domain license) and OpenVMS on Itanium
;-------------------------------------------------------------------------
;   Copyright (c) 2009 - 2014 HoffmanLabs LLC
;
;   Permission is hereby granted, free of charge, to any person
;   obtaining a copy of this software and associated documentation
;   files (the "Software"), to deal in the Software without
;   restriction, including without limitation the rights to use,
;   copy, modify, merge, publish, distribute, sublicense, and/or sell
;   copies of the Software, and to permit persons to whom the
;   Software is furnished to do so, subject to the following
;   conditions:
;
;   The above copyright notice and this permission notice shall be
;   included in all copies or substantial portions of the Software.
;
;   Except as contained in this notice, the name(s) of the above
;   copyright holders shall not be used in advertising or otherwise
;   to promote the sale, use or other dealings in this Software
;   without prior written authorization.
;
;   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
;   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
;   OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
;   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
;   HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
;   WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
;   FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
;   OTHER DEALINGS IN THE SOFTWARE.
;
; build:	$ macro helloworld.mar
;		$ link helloworld.obj
; run:		$ run helloworld.exe
; output:	Hello, World!
;		$
;------------------------------------------------------------------

	.PSECT RDATA,NOWRT,SHR,NOPIC,NOEXE,RD,QUAD
	; this program section (psect) contains data that is
	; non-writeable, shareable, position independent,
	; non-executable, readable, and quadword aligned.
	; In other words, a whole lot of detail around a
	; string descriptor pointing to a string constant.
	;
HI:     .ASCID /Hello, World!/

	.PSECT CODE,NOWRT,SHR,PIC,EXE,RD,QUAD
	; this program section contains the executable code.
	;
START:: .CALL_ENTRY PRESERVE=<>,MAX_ARGS=0,HOME_ARGS=TRUE
	; the start of the main program code.

	; push the address of the descriptor onto the stack,
	; and call the RTL routine to display string output
	; with (as it expects) #1 one argument.  Branch to
	; label 10$ on any error from lib$put_output.
	;
	PUSHAQ  HI
	CALLS   #1,G^LIB$PUT_OUTPUT
	BLBC    R0,10$

	; set up a normal exit status.
	;
	MOVL    #SS$_NORMAL,R0
10$:    RET

	; The directive that makes this module a top-level
	; (or in C terminology "main") program, and declares
	; the name of the main entry point for the program.
	;
	.END    START

Back to Home
Neil Rieck
Waterloo, Ontario, Canada.