-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathalign.asm
More file actions
67 lines (48 loc) · 1.32 KB
/
align.asm
File metadata and controls
67 lines (48 loc) · 1.32 KB
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