微算機lab5

tags: microcontroller lab

題目
連結可能失效!!!

main.c

#include <xc.h> extern unsigned int devide(unsigned int a, unsigned int b); void main(void){ volatile unsigned int res = devide(255, 2); volatile unsigned char quotient = (unsigned char) (res>>8); volatile unsigned char remainder = (unsigned char) (res); while(1); return; }

devide.asm

#include "xc.inc" GLOBAL _devide PSECT mytext, local, class=CODE, reloc=2 init: subff macro va,vb movff vb, WREG subwf va, W endm _devide: movlw 0xFF movwf 0x09, F movff 0x01, LATA movff 0x03, LATB moved: incf 0x0A rlcf LATB bnc moved rrcf LATB start: subff LATA, LATB btfss WREG,7 rcall addcarry rlcf LATC rcall clearcarry rrcf LATB decf 0x0A bz finish goto start addcarry: movwf LATA rcall setcarry return setcarry: movlw 0xFF movwf 0x09 rlcf 0x09 return clearcarry: movlw 0x00 movwf 0x09 rlcf 0x09 return finish: movff LATC, 0x02 movff LATA, 0x01 movff LATC, 0x03 movff LATA, 0x04 return