avr-asの使い方その2

m328def.incの中身をのぞいて正確にレジスタを叩いたら動いた
スタックポインタの初期化のビット演算が合っているか不安だけど

.org 0x0000
.equ DDRB, 0x04
.equ PORTB, 0x05 
.equ RAMEND, 0x08FF
.equ SPL, 0x3D
.equ SPH, 0x3E
rjmp reset
reset:
    ldi R16,RAMEND&0x00ff ;LOW(RAMEND)の代わり
    out SPL, R16
    ldi R16,RAMEND>>8 ; HIGH(RAMEND)の代わり
    out SPH, R16
main:
    sbi DDRB, 5
loop:
	sbi PORTB,5
    rcall delay
	cbi PORTB,5
	rcall delay
	rjmp loop
delay:
    ldi R17,16*4
delay1s:	
    ldi R18,250
delay250ms:
	ldi R19,250
delay1ms:
	nop
	dec R19
	brne delay1ms

	dec R18
	brne delay250ms

	dec R17
	brne delay1s
	ret

makefile

ASM = avr-as
INCLUDE = 
DEVICE = atmega328p
OBJ = main.o
SRC = main.s

all:
    $(ASM) -mmcu=$(DEVICE) -o $(OBJ) $(SRC)
    avr-ld $(OBJ) -o main.elf
    avr-size --format=avr --mcu=atmega328p main.elf
    avr-objcopy -j .text -j .data -O ihex main.elf main.hex
flash:
    avrdude -c arduino -p atmega328p -P /dev/tty.usb* -U flash:w:main.hex:i