[net.micro.pc] beginner problems with masm

rusty@sdcc3.UUCP (Rusty Wright) (10/20/84)

i am trying to figure out how to write assembly language programs for
the ibm pc. what i want to do is put each module into a separate file.
for example here are 3 files, the first is the startup that gets called
by dos, the second is the global stack, and the third is the global
data.

what i'm having trouble with is using the ASSUME directive with
segments defined in other files. i either get complaints from the
linker about them being undefined or from the assembler about incorrect
usage. as you can see i've used EXTRN to say that they are elsewhere.
if i try to use PUBLIC on stackseg and dataseg in their respective
files i get complaints from the assembler.

can anybody shed any light on what i'm doing wrong? also any other
helpful comments and suggestions would be appreciated.

please reply directly as i don't read this newsgroup that often.

	{ucbvax,ihnp4,hplabs}!sdcarl!rusty

::::::::::::::
start.asm
::::::::::::::
		title	start - dos runtime startup

		extrn	stackseg:far
		extrn	dataseg:far
		extrn	main:far

startseg	segment	para public 'code'

		assume	ss:stackseg		; already set by dos linker
		assume	cs:startseg

start		proc	far			; entry point from dos
		mov	ax, dataseg 		; set up addressability to
		mov	ds, ax			; the data segment
		assume	ds:dataseg 		; tell assembler what i just did

		call	main			; call user program

		mov	ax, 0			; all ok
		push	ax			; arg for exit
		call	exit			; return to dos

start		endp

startseg	ends

		end	start
::::::::::::::
stack.asm
::::::::::::::
stackseg	segment word stack 'stack'
		dw	256 dup(0)      	; stack area
stackseg	ends

		end
::::::::::::::
data.asm
::::::::::::::
dataseg		segment byte public 'data'
						; insert global data here
dataseg		ends

		end