459 lines
5.8 KiB
ArmAsm
459 lines
5.8 KiB
ArmAsm
|
.sect .text
|
||
|
.define _main
|
||
|
.define _main2
|
||
|
.define _xxx
|
||
|
! integer arithmetic and logical instructions
|
||
|
|
||
|
_main:
|
||
|
.data2 0x0
|
||
|
adawi r0, r1
|
||
|
addb2 r0,r1
|
||
|
addb3 r0,r2,r4
|
||
|
addw2 r0,r1
|
||
|
addw3 r0,r2,r4
|
||
|
addl2 r0,r1
|
||
|
addl3 r0,r2,r4
|
||
|
adwc r0, r1
|
||
|
ashl r0, r1, r2
|
||
|
ashq r0, r1, r2
|
||
|
bicb2 r0,r1
|
||
|
bicb3 r0,r2,r4
|
||
|
bicw2 r0,r1
|
||
|
bicw3 r0,r2,r4
|
||
|
bicl2 r0,r1
|
||
|
bicl3 r0,r2,r4
|
||
|
bisb2 r0,r1
|
||
|
bisb3 r0,r2,r4
|
||
|
bisw2 r0,r1
|
||
|
bisw3 r0,r2,r4
|
||
|
bisl2 r0,r1
|
||
|
bisl3 r0,r2,r4
|
||
|
bitb r0, r1
|
||
|
bitw r0, r1
|
||
|
bitl r0, r1
|
||
|
clrb r0
|
||
|
clrw r0
|
||
|
clrl r0
|
||
|
clrq r0
|
||
|
clro r0
|
||
|
cmpb r0, r1
|
||
|
cmpw r0, r1
|
||
|
cmpl r0, r1
|
||
|
cvtbw r0, r1
|
||
|
cvtbl r0, r1
|
||
|
cvtwb r0, r1
|
||
|
cvtwl r0, r1
|
||
|
cvtlb r0, r1
|
||
|
cvtlw r0, r1
|
||
|
decb r0
|
||
|
decw r0
|
||
|
decl r0
|
||
|
divb2 r0,r1
|
||
|
divb3 r0,r2,r4
|
||
|
divw2 r0,r1
|
||
|
divw3 r0,r2,r4
|
||
|
divl2 r0,r1
|
||
|
divl3 r0,r2,r4
|
||
|
ediv r0,r1,r2,r3
|
||
|
emul r0,r1,r2,r3
|
||
|
incb r0
|
||
|
incw r0
|
||
|
incl r0
|
||
|
mcomb r0, r1
|
||
|
mcomw r0, r1
|
||
|
mcoml r0, r1
|
||
|
mnegb r0, r1
|
||
|
mnegw r0, r1
|
||
|
mnegl r0, r1
|
||
|
movb r0, r1
|
||
|
movw r0, r1
|
||
|
movl r0, r1
|
||
|
movq r0, r1
|
||
|
movo r0, r1
|
||
|
movzbw r0, r1
|
||
|
movzbl r0, r1
|
||
|
movzwl r0, r1
|
||
|
mulb2 r0,r1
|
||
|
mulb3 r0,r2,r4
|
||
|
mulw2 r0,r1
|
||
|
mulw3 r0,r2,r4
|
||
|
mull2 r0,r1
|
||
|
mull3 r0,r2,r4
|
||
|
pushl r0
|
||
|
pushl $1
|
||
|
rotl r0, r1, r2
|
||
|
sbwc r0, r1
|
||
|
subb2 r0,r1
|
||
|
subb3 r0,r2,r4
|
||
|
subw2 r0,r1
|
||
|
subw3 r0,r2,r4
|
||
|
subl2 r0,r1
|
||
|
subl3 r0,r2,r4
|
||
|
tstb r0
|
||
|
tstw r0
|
||
|
tstl r0
|
||
|
xorb2 r0,r1
|
||
|
xorb3 r0,r2,r4
|
||
|
xorw2 r0,r1
|
||
|
xorw3 r0,r2,r4
|
||
|
xorl2 r0,r1
|
||
|
xorl3 r0,r2,r4
|
||
|
|
||
|
!* Address instructions */
|
||
|
|
||
|
movab (sp),r0
|
||
|
movaw (sp),r0
|
||
|
moval (sp),r0
|
||
|
movaf (sp),r0
|
||
|
movaq (sp),r0
|
||
|
movad (sp),r0
|
||
|
movag (sp),r0
|
||
|
movah (sp),r0
|
||
|
movao (sp),r0
|
||
|
pushab (sp)
|
||
|
pushaw (sp)
|
||
|
pushal (sp)
|
||
|
pushaf (sp)
|
||
|
pushaq (sp)
|
||
|
pushad (sp)
|
||
|
pushag (sp)
|
||
|
pushah (sp)
|
||
|
pushao (sp)
|
||
|
|
||
|
!* Variable length bit-field instructions */
|
||
|
|
||
|
cmpv r0,r1,r2,r3
|
||
|
cmpzv r0,r1,r2,r3
|
||
|
extv r0,r1,r2,r3
|
||
|
extzv r0,r1,r2,r3
|
||
|
ffc r0,r1,r2,r3
|
||
|
ffs r0,r1,r2,r3
|
||
|
insv r0,r1,r2,r3
|
||
|
|
||
|
!* Control instructions */
|
||
|
|
||
|
acbb r0,r1,r2,_main
|
||
|
acbw r0,r1,r2,_main
|
||
|
acbl r0,r1,r2,_main
|
||
|
acbf r0,r1,r2,_main
|
||
|
acbd r0,r1,r2,_main
|
||
|
acbg r0,r1,r2,_main
|
||
|
acbh r0,r1,r2,_main
|
||
|
aobleq r0, r1, 1f
|
||
|
1:
|
||
|
aoblss r0, r1, 1f
|
||
|
1:
|
||
|
bgtr 1f
|
||
|
1:
|
||
|
bleq 1f
|
||
|
1:
|
||
|
bneq 1f
|
||
|
1:
|
||
|
bnequ 1f
|
||
|
1:
|
||
|
beql 1f
|
||
|
1:
|
||
|
beqlu 1f
|
||
|
1:
|
||
|
bgeq 1f
|
||
|
1:
|
||
|
blss 1f
|
||
|
1:
|
||
|
bgtru 1f
|
||
|
1:
|
||
|
blequ 1f
|
||
|
1:
|
||
|
bvc 1f
|
||
|
1:
|
||
|
bvs 1f
|
||
|
1:
|
||
|
bgequ 1f
|
||
|
1:
|
||
|
bcc 1f
|
||
|
1:
|
||
|
blssu 1f
|
||
|
1:
|
||
|
bcs 1f
|
||
|
1:
|
||
|
bbs r0, r1, 1f
|
||
|
1:
|
||
|
bbc r0, r1, 1f
|
||
|
1:
|
||
|
bbss r0, r1, 1f
|
||
|
1:
|
||
|
bbcs r0, r1, 1f
|
||
|
1:
|
||
|
bbsc r0, r1, 1f
|
||
|
1:
|
||
|
bbcc r0, r1, 1f
|
||
|
1:
|
||
|
bbssi r0, r1, 1f
|
||
|
1:
|
||
|
bbcci r0, r1, 1f
|
||
|
1:
|
||
|
blbs r0,1f
|
||
|
blbc r0,1f
|
||
|
1:
|
||
|
jgtr _main
|
||
|
jleq _main
|
||
|
jneq _main
|
||
|
jnequ _main
|
||
|
jeql _main
|
||
|
jeqlu _main
|
||
|
jgeq _main
|
||
|
jlss _main
|
||
|
jgtru _main
|
||
|
jlequ _main
|
||
|
jvc _main
|
||
|
jvs _main
|
||
|
jgequ _main
|
||
|
jcc _main
|
||
|
jlssu _main
|
||
|
jcs _main
|
||
|
jlbs r0, _main
|
||
|
jlbc r0, _main
|
||
|
jbs r0, r1, _main
|
||
|
jbc r0, r1, _main
|
||
|
jbss r0, r1, _main
|
||
|
jbcs r0, r1, _main
|
||
|
jbsc r0, r1, _main
|
||
|
jbcc r0, r1, _main
|
||
|
jbssi r0, r1, _main
|
||
|
jbcci r0, r1, _main
|
||
|
br _main
|
||
|
br _main2
|
||
|
brb 1f
|
||
|
1:
|
||
|
brw 1f
|
||
|
1:
|
||
|
jbr _main
|
||
|
jbr _main2
|
||
|
bsb 1f
|
||
|
1:
|
||
|
caseb r0, r1, r2
|
||
|
casew r0, r1, r2
|
||
|
casel r0, r1, r2
|
||
|
jmp _main
|
||
|
jsb _main
|
||
|
rsb
|
||
|
sobgeq r0, 1f
|
||
|
sobgtr r0, 1f
|
||
|
1:
|
||
|
|
||
|
!* Procedure call instructions */
|
||
|
|
||
|
callg (sp),_main
|
||
|
calls $2, _main
|
||
|
ret
|
||
|
|
||
|
!* Miscellaneous instructions */
|
||
|
|
||
|
bicpsw r0
|
||
|
bispsw r0
|
||
|
bpt
|
||
|
halt
|
||
|
index r0,r1,r2,r3,r4,r5
|
||
|
movpsl r0
|
||
|
nop
|
||
|
popr r0
|
||
|
pushr r0
|
||
|
xfc
|
||
|
|
||
|
!* Queue instructions */
|
||
|
|
||
|
insqhi (sp), _main
|
||
|
insqti (sp), _main
|
||
|
insque (sp), _main
|
||
|
remqhi (sp), _main
|
||
|
remqti (sp), _main
|
||
|
remque (sp), _main
|
||
|
|
||
|
!* Floating point instructions */
|
||
|
|
||
|
addf2 r0,r1
|
||
|
addf3 r0,r2,r4
|
||
|
addd2 r0,r1
|
||
|
addd3 r0,r2,r4
|
||
|
addg2 r0,r1
|
||
|
addg3 r0,r2,r4
|
||
|
addh2 r0,r1
|
||
|
addh3 r0,r2,r4
|
||
|
clrf r0
|
||
|
clrd r0
|
||
|
clrg r0
|
||
|
clrh r0
|
||
|
cmpf r0,r2
|
||
|
cmpd r0,r2
|
||
|
cmpg r0,r2
|
||
|
cmph r0,r2
|
||
|
cvtbf r0,r2
|
||
|
cvtbd r0,r2
|
||
|
cvtbg r0,r2
|
||
|
cvtbh r0,r2
|
||
|
cvtwf r0,r2
|
||
|
cvtwd r0,r2
|
||
|
cvtwg r0,r2
|
||
|
cvtwh r0,r2
|
||
|
cvtlf r0,r2
|
||
|
cvtld r0,r2
|
||
|
cvtlg r0,r2
|
||
|
cvtlh r0,r2
|
||
|
cvtfb r0,r2
|
||
|
cvtdb r0,r2
|
||
|
cvtgb r0,r2
|
||
|
cvthb r0,r2
|
||
|
cvtfw r0,r2
|
||
|
cvtdw r0,r2
|
||
|
cvtgw r0,r2
|
||
|
cvthw r0,r2
|
||
|
cvtfl r0,r2
|
||
|
cvtdl r0,r2
|
||
|
cvtgl r0,r2
|
||
|
cvthl r0,r2
|
||
|
cvtrfl r0,r2
|
||
|
cvtrdl r0,r2
|
||
|
cvtrgl r0,r2
|
||
|
cvtrhl r0,r2
|
||
|
cvtfd r0,r2
|
||
|
cvtfg r0,r2
|
||
|
cvtfh r0,r2
|
||
|
cvtdf r0,r2
|
||
|
cvtdh r0,r2
|
||
|
cvtgf r0,r2
|
||
|
cvtgh r0,r2
|
||
|
cvthf r0,r2
|
||
|
cvthd r0,r2
|
||
|
cvthg r0,r2
|
||
|
divf2 r0,r1
|
||
|
divf3 r0,r2,r4
|
||
|
divd2 r0,r1
|
||
|
divd3 r0,r2,r4
|
||
|
divg2 r0,r1
|
||
|
divg3 r0,r2,r4
|
||
|
divh2 r0,r1
|
||
|
divh3 r0,r2,r4
|
||
|
emodf (r0),(r1),(r2),(r3),(r4)
|
||
|
emodd (r0),(r1),(r2),(r3),(r4)
|
||
|
emodg (r0),(r1),(r2),(r3),(r4)
|
||
|
emodh (r0),(r1),(r2),(r3),(r4)
|
||
|
mnegf r0,r2
|
||
|
mnegd r0,r2
|
||
|
mnegg r0,r2
|
||
|
mnegh r0,r2
|
||
|
movf r0,r2
|
||
|
movd r0,r2
|
||
|
movg r0,r2
|
||
|
movh r0,r2
|
||
|
mulf2 r0,r1
|
||
|
mulf3 r0,r2,r4
|
||
|
muld2 r0,r1
|
||
|
muld3 r0,r2,r4
|
||
|
mulg2 r0,r1
|
||
|
mulg3 r0,r2,r4
|
||
|
mulh2 r0,r1
|
||
|
mulh3 r0,r2,r4
|
||
|
polyf r0,r2,(sp)
|
||
|
polyd r0,r2,(sp)
|
||
|
polyg r0,r2,(sp)
|
||
|
polyh r0,r2,(sp)
|
||
|
subf2 r0,r1
|
||
|
subf3 r0,r2,r4
|
||
|
subd2 r0,r1
|
||
|
subd3 r0,r2,r4
|
||
|
subg2 r0,r1
|
||
|
subg3 r0,r2,r4
|
||
|
subh2 r0,r1
|
||
|
subh3 r0,r2,r4
|
||
|
tstf r0
|
||
|
tstd r0
|
||
|
tstg r0
|
||
|
tsth r0
|
||
|
|
||
|
!* Character string instructions */
|
||
|
|
||
|
cmpc3 r0,(sp),(r1)
|
||
|
cmpc5 (r0),(r1),(r2),(r3),(r4)
|
||
|
locc (r0),(r1),(r2)
|
||
|
matchc (r0),(r1),(r2),(r3)
|
||
|
movc3 r0,(sp),(r1)
|
||
|
movc5 (r0),(r1),(r2),(r3),(r4)
|
||
|
movtc (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
movtuc (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
scanc (r0),(r1),(r2),(r3)
|
||
|
skpc r0,(sp),(r1)
|
||
|
spanc (r0),(r1),(r2),(r3)
|
||
|
|
||
|
!* Cyclic redundancy check instructions */
|
||
|
|
||
|
crc (r0),(r1),(r2),(r3)
|
||
|
|
||
|
!* Decimal string instructions */
|
||
|
|
||
|
addp4 (r0),(r1),(r2),(r3)
|
||
|
addp6 (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
ashp (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
cmpp3 r0,(sp),(r1)
|
||
|
cmpp4 (r0),(r1),(r2),(r3)
|
||
|
cvtlp (r0),(r1),(r2)
|
||
|
cvtpl (r0),(r1),(r2)
|
||
|
cvtps (r0),(r1),(r2),(r3)
|
||
|
cvtpt (r0),(r1),(r2),(r3),(r4)
|
||
|
cvtsp (r0),(r1),(r2),(r3)
|
||
|
cvttp (r0),(r1),(r2),(r3),(r4)
|
||
|
divp (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
movp (r0),(r1),(r2)
|
||
|
mulp (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
subp4 (r0),(r1),(r2),(r3)
|
||
|
subp6 (r0),(r1),(r2),(r3),(r4),(r4)
|
||
|
|
||
|
!* Edit instruction */
|
||
|
|
||
|
editpc (r0),(r1),(r2),(r3)
|
||
|
|
||
|
!* Other VAX-11 instructions */
|
||
|
|
||
|
bugw _main
|
||
|
bugl _main
|
||
|
|
||
|
prober (r0),(r1),(r2)
|
||
|
probew (r0),(r1),(r2)
|
||
|
|
||
|
rei
|
||
|
chmk r0
|
||
|
chme r0
|
||
|
chms r0
|
||
|
chmu r0
|
||
|
|
||
|
ldpctx
|
||
|
svpctx
|
||
|
mtpr r0,r1
|
||
|
mfpr r0,r1
|
||
|
|
||
|
! test some addressing modes
|
||
|
_main2:
|
||
|
.data2 0x0
|
||
|
pushal _xxx
|
||
|
pushal _main
|
||
|
pushal _main2
|
||
|
pushal *_xxx
|
||
|
pushal *_main
|
||
|
pushal *_main2
|
||
|
movl $_xxx,-(sp)
|
||
|
movl $_main2,-(sp)
|
||
|
movl *$_main2,-(sp)
|
||
|
movl (sp)+,r9
|
||
|
movl *(sp)+,r9
|
||
|
movl (r0),r9
|
||
|
movl 12(r0),r9
|
||
|
movl *12(r0),r9
|
||
|
movl _xxx(r0),r9
|
||
|
movl *_xxx(r0),r9
|
||
|
movl *_xxx(r0)[r1],r9
|
||
|
movb *_xxx(r0)[r1],r9
|
||
|
movw *_xxx(r0)[r1],r9
|
||
|
|
||
|
|
||
|
.sect .rom
|
||
|
_xxx:
|
||
|
.data2 0
|