File: align.asm

package info (click to toggle)
pasmo 0.5.3-4
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 892 kB
  • ctags: 1,805
  • sloc: cpp: 8,508; asm: 3,020; sh: 790; makefile: 627
file content (67 lines) | stat: -rw-r--r-- 1,351 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
;	align.asm
;	(C) 2004 Julian Albo
;	This code may be freely used.

;--------------------------------------------------------------------
; Sample of macro that can be used to align the current position to
; a multiple of some number, like the align and aligndata directives
; of some oher assemblers.
;--------------------------------------------------------------------

align	macro n

	local newpos, oldpos
oldpos	equ $
newpos	equ (oldpos + n - 1) / n * n

	if newpos < oldpos
	.error Align out of memory
	endif

; The second method is faster, the first can be used to align code
; in 8086 generation mode (code of NOP is not 00).
; If align of data and code is needed can be better to define another
; macro called aligndata.

	if defined ALIGN_WITH_NOP

	rept newpos - oldpos
	nop
	endm

	else

	org newpos

	endif

	endm	; align

;--------------------------------------------------------------------
;			Test program.
;--------------------------------------------------------------------

	org 100h	; To view the result with a cp/m debugger.

	ld a, a
	align 8
	ld a, b
	ld a, c
	ld a, d
	align 64
	align 16	; Do nothing, already aligned.
	ld a, e

	if defined TESTERROR

	org 0E000h
	ld a, h
	align 16384	; Must generate an error.
	ld a, l

	endif

	end

;--------------------------------------------------------------------
; End of align.asm