आईबीएम सिस्टम जेड असेंबलर - 56 बाइट्स।
(स्रोत के 96 बाइट्स। पहले 712 384 202 स्रोत के बाइट्स, 168 बाइट निष्पादन योग्य)।
अभी भी छोटा संस्करण। अब कॉलर के रजिस्टर, शाब्दिक भंडारण में परिवर्तन, एड्रेसिंग मोड में परिवर्तन नहीं करता है।
l CSECT
using l,15
l 5,y
n 5,f
bnz r
xr 4,4
l 5,y
d 4,c
ch 4,i
bne i
n 5,f
bnz r
i dc h'0'
r b *
y dc f'2004'
f dc f'3'
c dc f'100'
end
नया संस्करण। यदि यह एक लीप वर्ष है, और लूप नहीं है तो यह S0C1 के साथ ABEND होगा। उम्मीद है कि परिणाम को इंगित करने की आवश्यकता को पूरा करता है।
l CSECT
ASMDREG
SYSSTATE archlvl=2
IEABRCX DEFINE
save (14,12)
larl r9,s
using s,r9
st 13,w+4
la 13,w
st 13,w+8
la 5,2004
st 5,y
n 5,=f'3'
bnz r
xr r4,r4
l 5,y
d r4,=f'100'
ch r4,=h'0'
bne i
n 5,=f'3'
bnz r
i dc h'0'
r b 0
s dc 0d'0'
y ds f
w ds 18f
ltorg
end
ठीक है, इसलिए कम से कम नहीं (हालांकि यह एक बार हो सकता है जब हम वास्तविक निष्पादित कोड और दुभाषिया आकार को देखें ...)
leapyear CSECT
ASMDREG
SYSSTATE archlvl=2
IEABRCX DEFINE
save (14,12)
larl r9,staticArea
using staticArea,r9
st r13,w_savea+4 .Save callers savearea
la r13,w_savea .Address my savearea
st r13,w_savea+8 . and save it
open (O,OUTPUT) .open file
la r5,1936 .r5 = input year
st r5,years .Save year
cvd r5,double .Convert year to p-decimal
mvc edarea,=xl8'4020202020202120' .Move in edit mask
ed edarea,double+4 .Make packed decimal year printable
mvc outrec(4),edarea+4 .Move year string to output area
bas r10,isitleap .Call leap year routine
close (O) .Close files
b return .Branch to finish
isitleap ds 0h
mvi outrec+5,c'N' .Set default value
n r5,=f'3' .Are last 2 bits 0 (Divisible by 4)?
bnz notleap .No - not leap
xr r4,r4 .Clear R4
l r5,years .Reload r5 with year
d r4,=f'100' .divide r4/r5 pair by 100
ch r4,=h'0' .Remainder 0?
bne isleap .No - leap year
n r5,=f'3' .Quotient divisible by 4?
bnz notleap .No - not leap
isleap ds 0h
mvi outrec+5,c'Y' .Move in leap year indicator
notleap ds 0h
put O,outrec .Print output record
br r10 .Return to caller
* Program termination
return ds 0h
l r13,w_savea+4 .Restore callers savearea
return (14,12),,rc=0 .Restore registers and return
* storage areas
staticarea dc 0d'0'
outrec ds cl10
years ds f
w_savea ds 18f save area
edarea ds cl8 .edit area
double ds d
* Macros and literals
print nogen
O dcb recfm=F,lrecl=6,dsorg=PS,ddname=O,macrf=PM
print gen
*
ltorg literal storage
end
आउटपुट:
एक लीप वर्ष के लिए S0C1 को भेजें, S222 (जब CPU समय समाप्त हो गया है) यदि नहीं।
1936 वाई 1805 एन 1900 एन 2272 वाई 2400 वाई
(जब कई बार चलाते हैं)
(divisible by 4)∧((divisible by 100)→(divisible by 400))
।