ນີ້ແມ່ນຄໍາສັ່ງ as31 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator
ໂຄງການ:
NAME
as31 - ຕົວປະກອບ Intel 8031/8051
ສະຫຼຸບສັງລວມ
as31 [-h] [-l] [-s] [-v] [-Aarg] [-Ffmt] [-Ofile] infile.asm
ລາຍລະອຽດ
ປີ31 ປະກອບ infile.asm ເຂົ້າໄປໃນຫນຶ່ງໃນຫຼາຍຮູບແບບຜົນຜະລິດທີ່ແຕກຕ່າງກັນ. ຜົນຜະລິດຈະເປັນ
ໃນໄຟລ໌ທີ່ເອີ້ນວ່າ infile.obj. ຕ້ອງການການຂະຫຍາຍ .asm.
OPTIONS
ຕົວເລືອກຈະຕ້ອງປາກົດກ່ອນຊື່ໄຟລ໌ທີ່ປ້ອນເຂົ້າ. ທັງສອງທາງເລືອກແມ່ນທາງເລືອກ. ຂໍ້ຄວາມຂອງ
ແຕ່ລະທຸງຈະຕ້ອງປາກົດຢູ່ໃນການໂຕ້ຖຽງດຽວກັນກັບທຸງ. ຕົວຢ່າງ, "-Fod" ແມ່ນຖືກຕ້ອງ
ການໂຕ້ຖຽງ, ແຕ່ "-F od" ບໍ່ແມ່ນ.
-h ນີ້ເຮັດໃຫ້ຜູ້ປະກອບພິມຂໍ້ຄວາມ verbose ອະທິບາຍທາງເລືອກຂອງມັນ.
ຂໍ້ຄວາມຖືກຂຽນເປັນຄວາມຜິດພາດມາດຕະຖານ.
-l ຕົວເລືອກນີ້ບອກຜູ້ປະກອບສ້າງໄຟລ໌ລາຍຊື່. ບັນຊີລາຍຊື່ຈະເປັນ
ໃສ່ໃນໄຟລ໌ infile.lst. ບ່ອນທີ່ 'infile' ແມ່ນໄຟລ໌ທີ່ກໍາລັງປະກອບ.
ຕົວເລືອກນີ້ອາດຈະປາກົດຢູ່ບ່ອນໃດກໍໄດ້ກ່ອນ infile.asm. ທາງເລືອກຕ້ອງເກີດຂຶ້ນໂດດດ່ຽວ
ຢູ່ໃນເສັ້ນຄໍາສັ່ງ.
ໄຟລ໌ລາຍຊື່ຈະສະແດງລະຫັດທີ່ຕົວປະກອບສ້າງເປັນ hex, ແລະສູງເຖິງ 60 ຕົວອັກສອນ
ຖືກຮັກສາໄວ້ຈາກໄຟລ໌ແຫຼ່ງ.
-s ອັນນີ້ເຮັດໃຫ້ຕົວປະກອບຂຽນຜົນອອກມາເປັນຜົນຜະລິດມາດຕະຖານ.
-v ອັນນີ້ເຮັດໃຫ້ຕົວປະກອບພິມຕົວເລກເວີຊັນໄປຫາຜົນຜະລິດມາດຕະຖານ.
- ອາກ ທາງເລືອກນີ້ລະບຸສະຕຣິງຮູບແບບສະເພາະທີ່ຖືກສົ່ງໄປໃນຮູບແບບ
ເຄື່ອງປັ່ນໄຟ. ທັງສອງຮູບແບບ "tdr" ແລະຮູບແບບການບັນທຶກໃຊ້ທາງເລືອກນີ້.
- ຮູບແບບ
ຕົວເລືອກນີ້ກໍານົດຮູບແບບຜົນຜະລິດທີ່ຈະຖືກນໍາໃຊ້.
ໃນປັດຈຸບັນທາງເລືອກດຽວທີ່ມີຢູ່ສໍາລັບການນີ້ແມ່ນ:
hex ຮູບແບບນີ້ແມ່ນຮູບແບບ Intel HEX ທີ່ຄາດວ່າຈະມາຈາກ EPROM ຈໍານວນຫນຶ່ງ
ນັກຂຽນໂປລແກລມ ແລະ PAULMON debugger. ສໍາລັບການນໍາໃຊ້ກັບໂຄງການບາງ, ໄດ້
ສ່ວນຂະຫຍາຍຂອງໄຟລ໌ຜົນໄດ້ຮັບອາດຈະຕ້ອງຖືກປ່ຽນເປັນ .HEX ເພື່ອໃຫ້ຮັບຮູ້ໂດຍ
ໂປລແກລມ. ບໍ່ມີທາງເລືອກ -A ຖືກນໍາໃຊ້. ຮູບແບບນີ້ຄວນຈະເປັນຄ່າເລີ່ມຕົ້ນຖ້າ
ບໍ່ມີທາງເລືອກ -F ຖືກນໍາໃຊ້.
tdr ຮູບແບບນີ້ສ້າງໄຟລ໌ asci ຂອງຕົວເລກ hex ໃນຮູບແບບດັ່ງກ່າວ, ດັ່ງນັ້ນ
ວ່າພວກເຂົາສາມາດອ່ານໄດ້ໂດຍ debugger ຂອງ tdr. ການໂຕ້ຖຽງສາມາດຖືກກໍານົດ (ເບິ່ງ
-A ທາງເລືອກ) ທີ່ຈະຜ່ານສະຕຣິງສະເພາະຮູບແບບທີ່ຈະສ້າງຮູບແບບ.
ໃນກໍລະນີນີ້, ສະຕຣິງອາກິວເມັນເປັນຕົວແທນເປັນການຊົດເຊີຍເພື່ອເພີ່ມໃສ່
ເຄົາເຕີສະຖານທີ່. ການຊົດເຊີຍນີ້ຖືກລະບຸໄວ້ໃນອັດຕານິຍົມ ແລະຄ່າເລີ່ມຕົ້ນເປັນ
64*1024 (0x10000). ເພື່ອກໍານົດແລະຊົດເຊີຍ 100, ທ່ານຈະຕ້ອງ "-Ftdr
-A100" ເມື່ອເອີ້ນເຄື່ອງປະກອບ.
byte ຮູບແບບນີ້ແມ່ນພຽງແຕ່ທີ່ຢູ່ແລະ byte ໃນແຕ່ລະເສັ້ນ, ໃນ ascii. ບໍ່ -A
ທາງເລືອກແມ່ນຖືກນໍາໃຊ້.
od ຮູບແບບນີ້ແມ່ນຄ້າຍຄືກັນກັບຜົນຜະລິດຈາກ od(1). ຮູບແບບປະກອບດ້ວຍ
ທີ່ຢູ່ ຕິດຕາມດ້ວຍສິບຫົກໄບຕ໌ເລກຖານສິບຫົກ, ຕິດຕາມດ້ວຍຄ່າທຽບເທົ່າ
ASCII. ບໍ່ມີທາງເລືອກ -A ຖືກນໍາໃຊ້.
srec2, srec3, srec4
ເຄື່ອງກໍາເນີດ srecord ມີຄວາມສາມາດຜະລິດຜົນຜະລິດດ້ວຍຫນຶ່ງຂອງ 2, 3,
ຫຼື 4 ທີ່ຢູ່ byte. ທາງເລືອກ -A ສາມາດຖືກນໍາໃຊ້ເພື່ອກໍານົດທີ່ຢູ່ພື້ນຖານ
ຊົດເຊີຍ, ຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ນີ້ແມ່ນ 0x0000 (ບໍ່ຄືກັບ tdr).
ຫມາຍເຫດ: ຕົວປະກອບນີ້ອະນຸຍາດໃຫ້ສໍາລັບຮູບແບບຜົນຜະລິດທີ່ຈະໄດ້ຮັບການຂະຫຍາຍອອກເພື່ອປະກອບມີຈໍານວນຫຼາຍ
ຮູບແບບຜົນຜະລິດທີ່ແຕກຕ່າງກັນ.
-Ofile ທາງເລືອກນີ້ບອກໃຫ້ຜູ້ປະກອບການຂຽນຜົນໄດ້ຮັບກັບໄຟລ໌.
ASSEMBLER ຄໍາແນະນໍາ
ເຄື່ອງປະກອບນີ້ຍອມຮັບຮູບແບບຄໍາແນະນໍາມາດຕະຖານ 8031/8051. ຂ້າງລຸ່ມນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງ
ຄໍາແນະນໍາແລະຮູບແບບທີ່ຢູ່.
ຄໍາແນະນໍາ BYTES ຮອບວຽນ
-----------------------
ACALL addr11 2 24
ADD A, #data8 2 12
ຕື່ມ A, @Ri 1 12
ຕື່ມ A, Rn 1 12
ຕື່ມ A, ໂດຍກົງ 2 12
ADDC A, #data8 2 12
ADDC A, @Ri 1 12
ADDC A, Rn 1 12
ADDC A, direct 2 12
AJMP addr11 2 24
ANL A, #data8 2 12
ANL A, @Ri 1 12
ANL A, Rn 1 12
ANL A, direct 2 12
ANL C, /bit 2 24
ANL C, !bit 2 24
ANL C, bit 2 24
ANL direct, #data8 3 24
ANL direct, A 2 12
CJNE @Ri, #data8, rel 3 24
CJNE A, #data8, rel 3 24
CJNE A, direct, rel 3 24
CJNE Rn, #data8, rel 3 24
CLR A 1 12
ຄຄ 1 12
CLR bit 2 12
CPL A 1 12
ຄສຄ 1 12
CPL bit 2 12
DA A 1 12
DEC @Ri 1 12
DEC A 1 12
DEC DPTR 1 12
DEC Rn 1 12
DEC direct 2 12
DIV AB 1 48
DJNZ Rn, rel 2 24
DJNZ ໂດຍກົງ, rel 3 24
INC @Ri 1 12
INC A 1 12
INC DPTR 1 24
INC Rn 1 12
INC ໂດຍກົງ 2 12
JB bit, rel 3 24
JBC bit, rel 3 24
JC ພີ່ນ້ອງ 2 24
JMP @A+ DPTR 1 24
JMP @DPTR + A 1 24
JNB bit, rel 3 24
JNC ພີ່ນ້ອງ 2 24
JNZ relative 2 24
JZ relative 2 24
LCALL addr16 3 24
LJMP addr16 3 24
MOV @Ri, #data8 2 12
MOV @Ri, A 1 12
MOV @Ri, direct 2 24
MOV A, #data8 2 12
MOV A, @Ri 1 12
MOV A, Rn 1 12
MOV A, direct 2 12
MOV C, bit 2 12
MOV DPTR, #data16 3 24
MOV Rn, #data8 2 12
MOV Rn, A 1 12
MOV Rn, direct 2 24
MOV bit, C 2 24
MOV direct, #data8 3 24
MOV direct, @Ri 2 24
MOV ໂດຍກົງ, A 2 12
MOV direct, Rn 2 24
MOV direct, direct 3 24
MOVC A, @A+DPTR 1 24
MOVC A, @A+PC 1 24
MOVC A, @DPTR + A 1 24
MOVC A, @PC+A 1 24
MOVX @DPTR, A 1 12
MOVX @Ri, A 1 24
MOVX A, @DPTR 1 24
MOVX A, @Ri 1 24
MUL AB 1 48
ສະບັບເລກທີ 1 12
ORL A, #data8 2 12
ORL A, @Ri 1 12
ORL A, Rn 1 12
ORL A, direct 2 12
ORL C, /bit 2 24
ORL C, !bit 2 24
ORL C, bit 2 24
ORL ໂດຍກົງ, #data8 3 24
ORL ໂດຍກົງ, A 2 12
POP direct 2 24
ຊຸກຍູ້ໂດຍກົງ 2 24
RET 1 24
RETI 1 24
RL A 1 12
RLC A 1 12
RR A 1 12
RRC A 1 12
SETB A 1 12
SETB bit 2 12
SJMP relative 2 24
SUBB A, #data8 2 12
SUBB A, @Ri 1 12
SUBB A, Rn 1 12
SUBB A, direct 2 12
SWAP A 1 12
XCH A, #data8 2 12
XCH A, @Ri 1 12
XCH A, Rn 1 12
XCH A, direct 2 12
XCHD A, #data8 2 12
XCHD A, @Ri 1 12
XCHD A, Rn 1 12
XCHD A, ໂດຍກົງ 2 12
XRL A, #data8 2 12
XRL A, @Ri 1 12
XRL A, Rn 1 12
XRL A, ໂດຍກົງ 2 12
XRL ໂດຍກົງ, #data8 3 12
XRL ໂດຍກົງ, A 2 12
ASSEMBLER ທິດທາງ
As31 ປະກອບມີຄໍາສັ່ງປະກອບດັ່ງຕໍ່ໄປນີ້:
.ORG expr
ເລີ່ມຕົ້ນປະກອບຢູ່ໃນທີ່ຢູ່ທີ່ລະບຸໄວ້ໂດຍ expression expr. ເກີດຄວາມຜິດພາດຂຶ້ນ
ຖ້າຕົວປະກອບເລີ່ມປະກອບໃສ່ພື້ນທີ່ທີ່ຢູ່ທີ່ເຄີຍມີມາກ່ອນ
ປະກອບເຂົ້າໄປໃນ.
ສັນຍາລັກ .EQU, expr
ຕັ້ງສັນຍາລັກເປັນມູນຄ່າຂອງ expr. ຄ່າຂອງ expr ຈະຕ້ອງຮູ້ຈັກໃນໄລຍະທໍາອິດ
ຜ່ານ, ເມື່ອເສັ້ນທີ່ມີ .EQU ຖືກພົບ.
.BYTE expr, expr, ...
ປະກອບ bytes ທີ່ລະບຸໂດຍການສະແດງອອກເຂົ້າໄປໃນຫນ່ວຍຄວາມຈໍາ. ສະຕຣິງອາດຈະຄືກັນ
ລະບຸໄວ້ໃນຄໍາສັ່ງນີ້.
.WORD expr, expr, ...
ປະກອບຄໍາທີ່ລະບຸໄວ້ໂດຍການສະແດງອອກເຂົ້າໄປໃນຄວາມຊົງຈໍາ. ການສັ່ງຊື້ byte
ໃຊ້, ແມ່ນໃຊ້ໂດຍ 8031.
.ທຸງສັນຍາລັກ1, ສັນຍາລັກ.[0-7]
ກໍານົດສັນຍາລັກ1 ເປັນທີ່ຢູ່ບິດທີ່ລະບຸໄວ້ໂດຍສັນຍາລັກ.[0-7] ສະແດງອອກ. ຢູ່ໃສ
[0-7] ຫມາຍເຖິງຕົວອັກສອນລະຫວ່າງ 0 ແລະ 7. ທີ່ຢູ່ bit ທີ່ໄດ້ຮັບຜົນຖືກໝາຍໃສ່
ເບິ່ງວ່າມັນເປັນທີ່ຢູ່ບິດທີ່ຖືກຕ້ອງ.
.END ຄຳສັ່ງນີ້ຖືກລະເລີຍ.
.SKIP expr
ເພີ່ມມູນຄ່າຂອງ expr ໃສ່ຕົວນັບສະຖານທີ່. ໃຊ້ເພື່ອສະຫງວນຕັນຂອງ
ຂໍ້ມູນເບື້ອງຕົ້ນ. Expr ຄວນຈະຢູ່ໃນ bytes.
LEXICAL ສົນທິສັນຍາ
- ຕົວອັກສອນທັງໝົດທີ່ຢູ່ຕາມເຄິ່ງຈໍ້າສອງເມັດຈະຖືກລະເລີຍຈົນກວ່າຈະພົບແຖວໃໝ່.
- ຕົວເລກທັງໝົດເລີ່ມຕົ້ນເປັນເລກທົດສະນິຍົມ, ເວັ້ນເສຍແຕ່ວ່າຕົວເລກເລີ່ມຕົ້ນດ້ວຍອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້:
0x ຫຼື 0X
ອັນນີ້ສະແດງເຖິງເລກຖານສິບຫົກ. ie. 0x00ff
0b ຫຼື 0B
ນີ້ຊີ້ໃຫ້ເຫັນຕົວເລກຖານສອງ. (1's ແລະ 0's). ie. 0b1100110010
0 ອັນນີ້ສະແດງເຖິງຕົວເລກແປດ. ie. 0377
- ຕົວເລກທັງໝົດເລີ່ມຕົ້ນເປັນທົດສະນິຍົມ, ເວັ້ນເສຍແຕ່ວ່າຕົວເລກຈະລົງທ້າຍດ້ວຍອັນໃດອັນໜຶ່ງຕໍ່ໄປນີ້
ຕົວອັກສອນ:
b ຫຼື B ນີ້ຊີ້ໃຫ້ເຫັນຕົວເລກຖານສອງ. ເວັ້ນເສຍແຕ່ວ່າ 0x ຖືກນໍາໃຊ້ຂ້າງເທິງ. ie. 1010101b
h ຫຼື H ນີ້ສະແດງຕົວເລກ hex ສະເໝີ, ແນວໃດກໍ່ຕາມ ຖ້າຕົວອັກສອນທຳອິດແມ່ນ
ບໍ່ແມ່ນຕົວເລກ, ຈາກນັ້ນຕ້ອງລະບຸ 0x ຫຼື 0. ນີ້ຫຼີກເວັ້ນການສັບສົນ
ຜູ້ປະກອບເຂົ້າໃນການຄິດເລກ hex ເປັນສັນຍາລັກ. ຕົວຢ່າງ: 0ffh,
0xffh, 0XffH, 20h, 0x20 ແລະ 020h ແມ່ນຫມາຍເຖິງການລະບຸຕົວເລກເລກສິບຫົກທີ່ຖືກຕ້ອງ. ແຕ່
ຕໍ່ໄປນີ້ບໍ່ແມ່ນ: ffh, 0ff.
d ຫຼື D ນີ້ບັງຄັບໃຫ້ຕົວເລກເປັນທົດສະນິຍົມ. ເວັ້ນເສຍແຕ່ວ່າ 0X ຖືກນໍາໃຊ້. ie. 129 ງ
o ຫຼື O ອັນນີ້ເຮັດໃຫ້ຕົວເລກຖືກຕີຄວາມໝາຍເປັນເລກແປດ. ie. 377o
- ຕົວຄົງທີ່ສາມາດຖືກໃສ່ເປັນ 'c' ເຊິ່ງ c ແມ່ນບາງຕົວອັກສອນ. \b, \n, \r,
\t, \' \0 ຍັງຖືກຕ້ອງ. ໂຕອັກສອນຄົງທີ່ສາມາດໃຊ້ໄດ້ທຸກບ່ອນທີ່ເປັນຈຳນວນເຕັມ
ມູນຄ່າສາມາດ.
- ສະຕຣິງຖືກໃສ່ເປັນຊຸດຂອງຕົວອັກສອນທີ່ອ້ອມຮອບດ້ວຍວົງຢືມຄູ່ "". ຊ່ອຍແນ່
ແມ່ນໃຊ້ໄດ້ກັບຄໍາສັ່ງ .BYTE ເທົ່ານັ້ນ. \b, \n, \r, \t, \" ຍັງເປັນການຫລົບຫນີທີ່ຖືກຕ້ອງ.
ຢ່າງໃດກໍ່ຕາມ \0 ບໍ່ແມ່ນ.
- ຄໍາແນະນໍາ, ຄໍາສັ່ງ, ແລະສັນຍາລັກ: R0, R1, R2, R3, R4, R5, R6, R7, A, AB,
ແລະ C ສາມາດຖືກໃສ່ໃນຕົວພິມໃຫຍ່ຫຼືຕ່ໍາໂດຍບໍ່ມີຄວາມສັບສົນ. ເຫຼົ່ານີ້
ຢ່າງໃດກໍຕາມ, ຄໍາສັບຕ່າງໆບໍ່ສາມາດຖືກກໍານົດເປັນສັນຍາລັກຂອງຜູ້ໃຊ້. ສັນຍາລັກຜູ້ໃຊ້ໃດກໍ່ຕາມອາດຈະຖືກນໍາໃຊ້, ແລະ
ກໍລະນີຈະຖືກຮັກສາໄວ້. ດັ່ງນັ້ນສັນຍາລັກຂອງຜູ້ໃຊ້ "foo" ແລະ "Foo" ແມ່ນແຕກຕ່າງກັນ, ແຕ່
"addc" ແມ່ນຄືກັນກັບ "aDdC".
- ສັນຍາລັກສາມາດເປັນຕົວເລກອັກຄະນິດໃດກໍຕາມບວກກັບຄະແນນ underscore ('_').
- ການສະແດງອອກແມ່ນໄດ້ຮັບການຍອມຮັບໃນສະຖານທີ່ສ່ວນໃຫຍ່ທີ່ຕ້ອງການຄ່າຫຼືສັນຍາລັກ. ອັນ
expression ປະກອບດ້ວຍຕົວປະຕິບັດການຕໍ່ໄປນີ້. ໂຕດຳເນີນການທັງໝົດປະເມີນເປັນຈຳນວນເຕັມ
ວັດຖຸ (ຕົວປະຕິບັດການທີ່ສູງກວ່າທີ່ລະບຸໄວ້ກ່ອນ):
- Unary ລົບ
& bit-wise AND.
| Bit-Wise OR.
* ການຄູນຈຳນວນເຕັມ.
/ ການຫານຈໍານວນເຕັມ
% ໂມດູລັສຈຳນວນເຕັມ
+ ຈຳນວນເຕັມ.
- ເລກລົບ.
- ນອກເຫນືອໄປຈາກຕົວປະຕິບັດການເຫຼົ່ານີ້, ສັນຍາລັກພິເສດ '*' ອາດຈະຖືກນໍາໃຊ້ເພື່ອເປັນຕົວແທນຂອງ
ຕົວນັບສະຖານທີ່ປະຈຸບັນ.
ຕົວຢ່າງ
ຂ້າງລຸ່ມນີ້ແມ່ນໂຄງການປະກອບຕົວຢ່າງ.
.org 0
ເລີ່ມຕົ້ນ: mov P3, #0xff ; ໃຊ້ fns ສຳຮອງໃນ P3
; leds ໃນ P1 ແມ່ນ inverted.
setb F0 ; ປີນຂຶ້ນ
mov A, #0x01 ; ນ້ອຍເບື້ອງຕົ້ນ
ຂຽນ: cpl A ; ຂຽນມັນ
mov P1, A
cpl A
ການໂທຊັກຊ້າ
jb F0, ຂຶ້ນ ; ປີນທາງໃດ?
climbdn: rr A ; ລົງ - ປ່ຽນຂວາ
jnb ACC.0, ຂຽນ ; ກັບຄືນໄປບ່ອນສໍາລັບການເພີ່ມເຕີມ
setb F0
ajmp ຂຽນ
ຂຶ້ນ: rl A ; ຂຶ້ນ - ເລື່ອນຊ້າຍ
jnb ACC.7, ຂຽນ ; ກັບຄືນໄປບ່ອນສໍາລັບການເພີ່ມເຕີມ
clr F0
ajmp ຂຽນ
.ຈົບ ; ຄຳສັ່ງນີ້ຖືກລະເລີຍ.
AUTHORS
Ken Stauffer (ມະຫາວິທະຍາໄລ Calgary)[email protected]>
Martin Langer[email protected]>
AS31(1)
ໃຊ້ as31 ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net