
78
CHAPTER 2 FUNDAMENTALS OF SOFTWARE
; Dividend area
; Divisor area
; Calculation result remainder storage area
; Operation error flag
;
;
; Clears operation error flag
; Clears calculation result storage area to 0
;
; Clears operation result storage area to 0
;
;
;
; Divisor = 0
;
; Sets operation error flag if divisor is 0
;
;
; Operation error
; Starts 32-bit division
; Shifts dividend and remainder 1 bit to left
;
;
;
;
;
;
; Remainder
≥
divisor
;
Remainder = remainder – divisor
;
; Stores 1 to first bit of dividend area
;
;
;
;
;
;
;
;
; Stores operation result
;
;
;
;
;
(4) Program list
$PC(054)
;
PUBLIC S_WARU,HIWARU,WARUM,F_ERR
EXTRN
KOTAE
;
;************************************************
;
RAM definition
;************************************************
DSEG
SADDR
HIWARU:
DS
4
WARUM:
DS
2
AMARI:
DS
2
BSEG
F_ERR
DBIT
;************************************************
;
Division
;************************************************
CSEG
S_WARU:
CLR1
F_ERR
AMARI=#0
AMARI+1=#0
KOTAE=#0
KOTAE+1=#0
KOTAE+2=#0
KOTAE+3=#0
if(WARUM == #0)
if(WARUM+1 == #0)
SET1
F_ERR
endif
endif
if_bit(!F_ERR)
for(B=#0;B < #32;B++) (A)
HIWARU+=HIWARU (A)
HIWARU+1+=HIWARU+1,CY
HIWARU+2+=HIWARU+2,CY
HIWARU+3+=HIWARU+3,CY
AMARI+=AMARI,CY (A)
AMARI+1+=AMARI+1,CY (A)
(A)
(A)
(A)
if(AMARI+1 > WARUM+1) (A)
AMARI–=WARUM (A)
AMARI+1–=WARUM+1,CY (A)
HIWARU |= #1
elseif_bit(Z)
if(AMARI >= WARUM) (A)
AMARI–=WARUM(A)
AMARI+1–=WARUM+1,CY (A)
HIWARU |= #1
endif
endif
next
KOTAE=HIWARU (A)
KOTAE+1=HIWARU+1 (A)
KOTAE+2=HIWARU+2 (A)
KOTAE+3=HIWARU+3 (A)
endif
RET
END