123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 |
- +-----------+------------+-------------+-------------+-------------+-------------+-------------------+
- | Component | Technology | Amnt of ROM | Type of ROM | Amnt of RAM | No. of SFRs | Serial I/O Type |
- |-----------|------------|-------------|-------------|-------------|-------------|-------------------|
- | 8031 | HMOS | 0 | -- | 128 bytes | 21 | Start/Stop Async |
- | 8051 | HMOS | 4Kbytes | Masked | 128 bytes | 21 | Start/Stop Async |
- | 8751 | HMOS | 4Kbytes | EPROM | 128 bytes | 21 | Start/Stop Async |
- | 8053 | HMOS | 8Kbytes | Masked | 128 bytes | 21 | Start/Stop Async |
- | 9761 | HMOS | 8Kbytes | EPROM | 128 bytes | 21 | Start/Stop Async |
- | 8751 | HMOS | 8Kbytes | EPROM | 128 bytes | 21 | Start/Stop Async |
- | | | | | | | |
- | 80C31 | CMOS | 0 | -- | 128 bytes | 21 | Start/Stop Async |
- | 80C51 | CMOS | 4Kbytes | Masked | 128 bytes | 21 | Start/Stop Async |
- | 87C51 | CMOS | 4Kbytes | EPROM | 128 bytes | 21 | Start/Stop Async |
- | | | | | | | |
- | 8032 | HMOS | 0 | -- | 256 bytes | 26 | Start/Stop Async |
- | 8052 | HMOS | 8Kbytes | Masked | 256 bytes | 26 | Start/Stop Async |
- | 8752 | HMOS | 8Kbytes | EPROM | 256 bytes | 26 | Start/Stop Async |
- | | | | | | | |
- | 80C32 | CMOS | 0 | -- | 256 bytes | 26 | Start/Stop Async |
- | 80C52 | CMOS | 8Kbytes | Masked | 256 bytes | 26 | Start/Stop Async |
- | 87C52 | CMOS | 8Kbytes | EPROM | 256 bytes | 26 | Start/Stop Async |
- | | | | | | | |
- | 8044 | HMOS | 4Kbytes | Masked | 192 bytes | 34 | HDLC/SDLC |
- | 8344 | HMOS | 0 | -- | 192 bytes | 34 | HDLC/SDLC |
- | 8744 | HMOS | 4Kbytes | EPROM | 192 bytes | 34 | HDLC/SDLC |
- | | | | | | | |
- | 80535 | HMOS | 0 | -- | 256 bytes | 41 | Start/Stop Async |
- | 80515 | HMOS | 8Kbytes | Masked | 256 bytes | 41 | Start/Stop Async |
- | | | | | | | |
- | 80C535 | CHMOS | 0 | -- | 256 bytes | 41 | Start/Stop Async |
- | 80C515 | CHMOS | 8Kbytes | Masked | 256 bytes | 41 | Start/Stop Async |
- | | | | | | | |
- | 80532 | HMOS | 0 | -- | 128 bytes | 28 | Start/Stop Async |
- | 80512 | HMOS | 4Kbytes | Masked | 128 bytes | 28 | Start/Stop Async |
- | | | | | | | |
- | 80C152 | CHMOS | 0 | -- | 256 bytes | 56 | CSMA/CD |
- | 83C152 | CHMOS | 8Kbytes | Masked | 256 bytes | 56 | CSMA/CD |
- | | | | | | | |
- | 80C154 | CMOS | 0 | -- | 256 bytes | 27 | Start/Stop Async |
- | 83C154 | CMOS | 16Kbytes | Masked | 256 bytes | 27 | Start/Stop Async |
- | 85C154 | CMOS | 16Kbytes | EPROM | 256 bytes | 27 | Start/Stop Async |
- | | | | | | | |
- +-----------+------------+-------------+-------------+-------------+-------------+-------------------+
- +-----------+------------+-------------+-------------+-------------+-------------+-------------------+
- | Component | Technology | Amnt of ROM | Type of ROM | Amnt of RAM | No. of SFRs | Serial I/O Type |
- |-----------|------------|-------------|-------------|-------------|-------------|-------------------|
- | 80C51FA | CHMOS | 0 | -- | 256 bytes | 47 | Start/Stop Async |
- | 83C51FA | CHMOS | 8Kbytes | Masked | 256 bytes | 47 | Start/Stop Async |
- | 87C51FA | CHMOS | 8Kbytes | EPROM | 256 bytes | 47 | Start/Stop Async |
- | | | | | | | |
- | 83C51FB | CHMOS | 16Kbytes | Masked | 256 bytes | 47 | Start/Stop Async |
- | 87C51FB | CHMOS | 16Kbytes | EPROM | 256 bytes | 47 | Start/Stop Async |
- | | | | | | | |
- | 83C51FB | CHMOS | 32Kbytes | Masked | 256 bytes | 47 | Start/Stop Async |
- | 87C51FB | CHMOS | 32Kbytes | EPROM | 256 bytes | 47 | Start/Stop Async |
- | | | | | | | |
- | 80C537 | CHMOS | 0 | -- | 256 bytes | 41 | Start/Stop Async |
- | 80C517 | CHMOS | 8Kbytes | Masked | 256 bytes | 82 | Start/Stop Async |
- | | | | | | | |
- | 80C451 | CMOS | 0 | -- | 128 bytes | 24 | Parallel I/F |
- | 83C451 | CMOS | 4Kbytes | Masked | 128 bytes | 24 | Parallel I/F |
- | 87C451 | CMOS | 4Kbytes | EPROM | 128 bytes | 24 | Parallel I/F |
- | | | | | | | |
- | 80C452 | CHMOS | 0 | -- | 256 bytes | 55 | U.P.I. |
- | 83C452 | CHMOS | 8Kbytes | -- | 256 bytes | 55 | U.P.I. |
- | 87C452 | CHMOS | 8Kbytes | -- | 256 bytes | 55 | U.P.I. |
- | | | | | | | |
- | 80C552 | CMOS | 0 | -- | 256 bytes | 54 | Start/Stop Async |
- | 83C552 | CMOS | 8Kbytes | Masked | 256 bytes | 54 | Start/Stop Async |
- | 87C552 | CMOS | 8Kbytes | EPROM | 256 bytes | 54 | Start/Stop Async |
- | | | | | | | |
- | 80C652 | CMOS | 0 | -- | 256 bytes | 24 | Start/Stop Async |
- | 83C652 | CMOS | 8Kbytes | Masked | 256 bytes | 24 | Start/Stop Async |
- | 87C652 | CMOS | 8Kbytes | EPROM | 256 bytes | 24 | Start/Stop Async |
- | 83C654 | CMOS | 16Kbytes | Masked | 256 bytes | 24 | Start/Stop Async |
- | 87C654 | CMOS | 16Kbytes | EPROM | 256 bytes | 24 | Start/Stop Async |
- | | | | | | | |
- | 83C752 | CMOS | 2Kbytes | Masked | 64 bytes | 25 | I2C |
- | 87C752 | CMOS | 2Kbytes | EPROM | 64 bytes | 25 | I2C |
- | | | | | | | |
- | 83C751 | CMOS | 2Kbytes | Masked | 64 bytes | 20 | I2C |
- | 87C751 | CMOS | 2Kbytes | EPROM | 64 bytes | 20 | I2C |
- | | | | | | | |
- | 80C521 | CMOS | 0 | -- | 256 bytes | 26 | Start/Stop Async |
- | 80C321 | CMOS | 8Kbytes | Masked | 256 bytes | 26 | Start/Stop Async |
- | 87C521 | CMOS | 8Kbytes | EPROM | 256 bytes | 26 | Start/Stop Async |
- | 80C541 | CMOS | 16Kbytes | Masked | 256 bytes | 26 | Start/Stop Async |
- | 87C541 | CMOS | 16Kbytes | EPROM | 256 bytes | 26 | Start/Stop Async |
- | | | | | | | |
- | 80C851 | CMOS | 0 | -- | 128 bytes | 21 | Start/Stop Async |
- | 83C851 | CMOS | 4Kbytes | Masked | 128 bytes | 21 | Start/Stop Async |
- | | | | | | | |
- +-----------+------------+-------------+-------------+-------------+-------------+-------------------+
- $DATE(date) Places date in page header $EJECT Places a form feed in listing
- $INCLUDE(file) Inserts file in source program $LIST Allows listing to be output
- $NOLIST Stops outputting the listing $MOD51 Uses 8051 predefined symbols
- $MOD52 Uses 8052 predefined symbols $MOD44 Uses 8044 predefined symbols
- $NOMOD No predefined symbols used $OBJECT(file) Places object output in file
- $NOOBJECT No object file is generated $PAGING Break output listing into pages
- $NOPAGING Print listing w/o page breaks $PAGELENGTH(n) No. of lines on a listing page
- $PAGEWIDTH(n) No. of columns on a listing page $PRINT(file) Places listing output in file
- $NOPRINT Listing will not be output $SYMBOLS Append symbol table to listing
- $NOSYMBOLS Symbol table will not be output $TITLE(string) Places string in page header
- EQU Define symbol DATA Define internal memory symbol
- IDATA Define indirectly addressed internal XDATA Define external memory symbol
- memory symbol BIT Define internal bit memory symbol
- CODE Define program memory symbol DS Reserve bytes of data memory
- DBIT Reserve bits of bit memory DB Store byte values in program memory
- DW Store word values in program memory ORG Set segment location counter
- END End of assembly language source file CSEG Select program memory space
- DSEG Select internal memory data space XSEG Select external memory data space
- ISEG Select indirectly addressed internal BSEG Select bit addressable memory space
- memory space USING Select register bank
- IF Begin conditional assembly block ELSE Alternative conditional assembly block
- ENDIF End conditional assembly block
- ACALL Absolute call ADD Add ADDC Add with carry
- AJMP Absolute jump ANL Logical and CJNE Compare & jump if not equal
- CLR Clear CPL Complement DA Decimal adjust
- DEC Decrement DIV Divide DJNZ Decrement & jump if not zero
- INC Increment JB Jump if bit set JBC Jump & clear bit if bit set
- JC Jump if carry set JMP Jump JNB Jump if bit not set
- JNC Jump if carry not set JNZ Jump if accum. not zero JZ Jump if accumulator zero
- LCALL Long call LJMP Long jump MOV Move
- MOVC Move code MOVX Move external MUL Multiply
- NOP No operation ORL Inclusive or POP Pop stack
- PUSH Push stack RET Return RETI Return from interrupt
- RL Rotate left RLC Rotate left thru carry RR Rotate right
- RRC Rotate right thru carry SETB Set bit SJMP Short jump
- SUBB Subtract with borrow SWAP Swap nibbles XCH Exchange bytes
- XCHD Exchange digits XRL Exclusive or CALL Generic call
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ACALL | | | | | | | | |
- | 2K in Page (11 bits) | PC + 2 -> STACK | Prog Direct | | ACALL Paddr | see | 2 | 2 | - - - |
- | Absolute Call | SP + 2 -> SP | | | | note | | | |
- | | Paddr<10:0> -> PC<10:0> | | | | 1 | | | |
- | | PC<15:11> -> PC<15:11> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ADD | | | | | | | | |
- | Add Operand to | A + SOper -> A | Accumulator | Immediate | ADD A,#data | 24 | 2 | 1 | * * * |
- | Accumulator | | " | Direct | ADD A,Daddr | 25 | 2 | 1 | |
- | | | " | Indirect | ADD A,@Ri | 26,27 | 1 | 1 | |
- | | | " | Register | ADD A,Rn | 28-2F | 1 | 1 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ADDC | | | | | | | | |
- | Add Operand with | A + SOper + C -> A | Accumulator | Immediate | ADDC A,#data | 34 | 2 | 1 | * * * |
- | Carry to Accumulator | | " | Direct | ADDC A,Daddr | 35 | 2 | 1 | |
- | | | " | Indirect | ADDC A,@Ri | 36,37 | 1 | 1 | |
- | | | " | Register | ADDC A,Rn | 38-3F | 1 | 1 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | AJMP | | | | | see | | | |
- | 2K in Page (11 bits) | Paddr<10:0> -> PC<10:0> | Prog Direct | | AJMP Paddr | note | 2 | 2 | - - - |
- | Absolute Jump | PC<15:11> -> PC<15:11> | | | | 2 | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ANL | | | | | | | | |
- | Logical AND of Source | SOper ^ DOper -> DOper | Direct | Accumulator | ANL Daddr,A | 52 | 2 | 1 | - - - |
- | Operand with | | " | Immediate | ANL Daddr,#data | 53 | 3 | 2 | |
- | Destination Operand | | Accumulator | Immediate | ANL A,#data | 54 | 2 | 1 | |
- | | | " | Direct | ANL A,Daddr | 55 | 2 | 1 | |
- | | | " | Indirect | ANL A,@Ri | 56,57 | 1 | 1 | |
- | | | " | Register | ANL A,Rn | 58-5F | 1 | 1 | |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Logical AND of Source | SOper ^ CF -> CF | Carry Flag | Bit Direct | ANL C,Baddr | 82 | 2 | 2 | * - - |
- | Operand with | | | | | | | | |
- | Carry Flag (Continued)| | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ANL (Continued) | | | | | | | | |
- | Logical AND of Source | ~SOper ^ CF -> CF | Carry Flag | Bit Direct | ANL C,/Baddr | B0 | 2 | 2 | * - - |
- | Operand Complemented | | | | | | | | |
- | with Carry Flag | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | CJNE | | | | | | | | |
- | Compare Operands and | Jump Relative to PC if | Accumulator | Immediate | CJNE A,#data,Roff | B4 | 3 | 2 | * - - |
- | Jump Relative if not | DOper <> SOper | " | Direct | CJNE A,Daddr,Roff | B5 | 3 | 2 | see |
- | Equal | | Indirect | Immediate | CJNE @Ri,#data,Roff | B6,B7 | 3 | 2 | note |
- | | | Register | " | CJNE Rn,#data,Roff | B8-BF | 3 | 2 | 3 |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | CLR | | | | | | | | |
- | Clear Accumulator | 0 -> A | Accumulator | | CLR A | E4 | 1 | 1 | - - - |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Clear Carry Flag | 0 -> CF | Carry Flag | | CLR C | C3 | 1 | 1 | 0 - - |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Clear Bit Operand | 0 -> DOper | Bit Direct | | CLR Baddr | C2 | 2 | 1 | - - - |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | CPL | | | | | | | | |
- | Complement Accumulator| ~A -> A | Accumulator | | CPL A | F4 | 1 | 1 | - - - |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Complement Carry Flag | ~CF -> CF | Carry Flag | | CPL C | B3 | 1 | 1 | * - - |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Complement Bit Operand| ~DOper -> DOper | Bit Direct | | CPL Baddr | B2 | 2 | 1 | - - - |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | DA | | | | | | | | |
- | Decimal Adjust | If (A<3:0> > 9) v AC | Accumulator | | DA A | D4 | 1 | 1 | * - - |
- | Accumulator for | then A<3:0>+6 -> A<3:0>| | | | | | | see |
- | Addition | If (A<7:4> > 9) v CF | | | | | | | note |
- | | then A<7:4>+6 -> A<7:4>| | | | | | | 4 |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | DEC | | | | | | | | |
- | Decrement Operand | DOper - 1 -> DOper | Accumulator | | DEC A | 14 | 1 | 1 | - - - |
- | | | Direct | | DEC Daddr | 15 | 2 | 1 | |
- | | | Indirect | | DEC @Ri | 16,17 | 1 | 1 | |
- | | | Register | | DEC Rn | 18-1F | 1 | 1 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | DIV | | | | | | | | |
- | Divide Accumulator by | A / B -> A | AB | | DIV AB | 84 | 1 | 4 | 0 - * |
- | B Register | Remainder -> B | | | | | | | see |
- | | | | | | | | | note 5|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | DJNZ | | | | | | | | |
- | Decrement Operand and | DOper - 1 -> DOper | Direct | | DJNZ Daddr,Roff | D5 | 3 | 2 | - - - |
- | Jump Relative if Not | If DOper <> 0 then Jump | Register | | DJNZ Rn,Roff | D8-DF | 2 | 2 | |
- | Zero | Relative to PC | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | INC | | | | | | | | |
- | Increment Operand | DOper + 1 -> DOper | Accumulator | | INC A | 04 | 1 | 1 | - - - |
- | | | Direct | | INC Daddr | 05 | 2 | 1 | |
- | | | Indirect | | INC @Ri | 06,07 | 1 | 1 | |
- | | | Register | | INC Rn | 08-0F | 1 | 1 | |
- | | | Data Pointer| | INC DPTR | A3 | 1 | 2 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JB | | | | | | | | |
- | Jump Relative if Bit | If DOper = 1 then Jump | Bit Direct | | JB Baddr,Roff | 20 | 3 | 2 | - - - |
- | Operand is Set | Relative to PC | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JBC | | | | | | | | |
- | Jump Relative if Bit | If DOper = 1 then | Bit Direct | | JBC Baddr,Roff | 10 | 3 | 2 | * * * |
- | Operand is Set and | 0 -> DOper and Jump | | | | | | | see |
- | Clear Bit Operand | Relative to PC | | | | | | | note 6|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JC | | | | | | | | |
- | Jump Relative if | If CF = 1 then Jump | Carry Flag | | JC Roff | 40 | 2 | 2 | - - - |
- | Carry Flag is Set | Relative to PC | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JMP | | | | | | | | |
- | Jump Indirect | DPTR<15:0> + A<7:0> | Prog Indir | | JMP @A+DPTR | 73 | 1 | 2 | - - - |
- | | -> PC<15:0> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JNB | | | | | | | | |
- | Jump Relative if Bit | If DOper = 0 then Jump | Bit Direct | | JNB Baddr,Roff | 30 | 3 | 2 | - - - |
- | Operand is Clear | Relative to PC | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JNC | | | | | | | | |
- | Jump Relative if | If CF = 0 then Jump | Carry Flag | | JNC Roff | 50 | 2 | 2 | - - - |
- | Carry Flag is Clear | Relative to PC | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JNZ | | | | | | | | |
- | Jump Relative if the | If A<7:0> <> 0 then | Accumulator | | JNZ Roff | 70 | 2 | 2 | - - - |
- | Accumulator is Not | Jump Relative to PC | | | | | | | |
- | Zero | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | JZ | | | | | | | | |
- | Jump Relative if the | If A<7:0> = 0 then | Accumulator | | JZ Roff | 60 | 2 | 2 | - - - |
- | Accumulator is Zero | Jump Relative to PC | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | LCALL | | | | | | | | |
- | Long (16 bits) Call | PC + 3 -> STACK | Prog Direct | | LCALL Paddr | 12 | 3 | 2 | - - - |
- | | SP + 2 -> SP | | | | | | | |
- | | Paddr<15:0> -> PC<15:0> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | LJMP | | | | | | | | |
- | Long (16 bits) | Paddr<15:0> -> PC<15:0> | Prog Direct | | LJMP Paddr | 02 | 3 | 2 | - - - |
- | Absolute Jump | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | MOV | | | | | | | | |
- | Move Source Operand | SOper -> DOper | Accumulator | Immediate | MOV A,#data | 74 | 2 | 1 | - - - |
- | to Destination | | " | Direct | MOV A,Daddr | E5 | 2 | 1 | |
- | Operand | | " | Indirect | MOV A,@Ri | E6,E7 | 1 | 1 | |
- | | | " | Register | MOV A,Rn | E8-EF | 1 | 1 | |
- | | | Direct | Accumulator | MOV Daddr,A | F5 | 2 | 1 | |
- | | | " | Immediate | MOV Daddr,#data | 75 | 3 | 2 | |
- | | | " | Direct | MOV Daddr,Daddr | 85 | 3 | 2 | |
- | | | " | Indirect | MOV Daddr,@Ri | 86,87 | 2 | 2 | |
- | | | " | Register | MOV Daddr,Rn | 88-8F | 2 | 2 | |
- | | | Indirect | Accumulator | MOV @Ri,A | F6,F7 | 1 | 1 | |
- | | SOper -> DOper | " | Immediate | MOV @Ri,#data | 76,77 | 2 | 1 | |
- | | | " | Direct | MOV @Ri,Daddr | A6,A7 | 2 | 2 | |
- | | | Register | Accumulator | MOV Rn,A | F8-FF | 1 | 1 | |
- | | | " | Immediate | MOV Rn,#data | 78-7F | 2 | 1 | |
- | | | " | Direct | MOV Rn,Daddr | A8-AF | 2 | 2 | |
- | | | Data Pointer| Immediate | MOV DPTR,#data16 | 90 | 3 | 2 | |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Move Carry Flag to Bit| CF -> DOper | Bit Direct | Carry Flag | MOV Baddr,C | 92 | 2 | 2 | - - - |
- | Destination Operand | | | | | | | | |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Move Bit Destination | DOper -> CF | Carry Flag | Bit Direct | MOV C,Baddr | A2 | 2 | 1 | * - - |
- | Operand to Carry Flag | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | MOVC | | | | | | | | |
- | Move byte from | PM(DPTR<15:0> + A<7:0>) | Accumulator | Prog Ind | MOVC A,@A+DPTR | 93 | 1 | 2 | - - - |
- | Program Memory to | -> A<7:0> | | | | | | | |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | PM(PC<15:0> + A<7:0>) | Accumulator | Prog Ind | MOVC A,@A+PC | 83 | 1 | 2 | - - - |
- | | -> A<7:0> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | MOVX | | | | | | | | |
- | Move byte from | SOper -> A | Accumulator | Indirect | MOVX A,@Ri | E2,E3 | 1 | 2 | - - - |
- | External Data Memory | | " | " | MOVX A,@DPTR | E0 | 1 | 2 | |
- | to the Accumulator | | | | | | | | |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Move byte in the | A -> DOper | Indirect | Accumulator | MOVX @Ri,A | F2,F3 | 1 | 2 | - - - |
- | Accumulator to | | " | " | MOVX @DPTR,A | F0 | 1 | 2 | |
- | External Data Memory | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | MUL | | | | | | | | |
- | Multiply Accumulator | A X B -> B,A | AB | | MUL AB | A4 | 1 | 4 | 0 - * |
- | by B Register | (see note 7) | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | NOP | | | | | | | | |
- | No Operation | | | | NOP | 00 | 1 | 1 | - - - |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ORL | | | | | | | | |
- | Logical Inclusive OR | SOper v DOper -> DOper | Direct | Accumulator | ORL Daddr,A | 42 | 2 | 1 | - - - |
- | of Source Operand | | " | Immediate | ORL Daddr,#data | 43 | 3 | 2 | |
- | with Destination | | Accumulator | Immediate | ORL A,#data | 44 | 2 | 1 | |
- | Operand | | " | Direct | ORL A,Daddr | 45 | 2 | 1 | |
- | | | " | Indirect | ORL A,@Ri | 46,47 | 1 | 1 | |
- | | | " | Register | ORL A,Rn | 48-4F | 1 | 1 | |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | Logical Inclusive OR | SOper v CF -> CF | Carry Flag | Bit Direct | ORL C,Baddr | 72 | 2 | 2 | * - - |
- | of Source Operand | | | | | | | | |
- | with Carry Flag | | | | | | | | |
- | (continued) | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | ORL(continued) | | | | | | | | |
- | Logical Inclusive OR | ~SOper v CF -> CF | Carry Flag | Bit Direct | ORL C,/Baddr | A0 | 2 | 2 | * - - |
- | of Source Operand | | | | | | | | |
- | Complemented with | | | | | | | | |
- | Carry Flag | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | POP | | | | | | | | |
- | Pop Stack and Place | STACK -> DOper | Direct | Stack | POP Daddr | D0 | 2 | 2 | - - - |
- | in Destination Operand| SP - 1 -> SP | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | PUSH | | | | | | | | |
- | Push Source Operand | SP + 1 -> SP | Stack | Direct | PUSH Daddr | C0 | 2 | 2 | - - - |
- | onto Stack | SOper -> STACK | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | RET | | | | | | | | |
- | Return from | STACK -> PC<15:8> | | | RET | 22 | 1 | 2 | - - - |
- | Subroutine | SP - 1 -> SP | | | | | | | |
- | | STACK -> PC<7:0> | | | | | | | |
- | | SP - 1 -> SP | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | RETI | | | | | | | | |
- | Return from | STACK -> PC<15:8> | | | RETI | 32 | 1 | 2 | - - - |
- | Interrupt Routine | SP - 1 -> SP | | | | | | | |
- | | STACK -> PC<7:0> | | | | | | | |
- | | SP - 1 -> SP | | | | | | | |
- | | 0 -> Intrupt Active Flag| | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | RL | | | | | | | | |
- | Rotate Accumulator | A<6:0> -> A<7:1> | Accumulator | | RL A | 23 | 1 | 1 | - - - |
- | Left One Bit | A<7> -> A<0> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | RLC | | | | | | | | |
- | Rotate Accumulator | A<6:0> -> A<7:1> | Accumulator | | RLC A | 33 | 1 | 1 | * - - |
- | Left One Bit Thru | CF -> A<0> | | | | | | | |
- | the Carry Flag | A<7> -> CF | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | RR | | | | | | | | |
- | Rotate Accumulator | A<7:1> -> A<6:0> | Accumulator | | RR A | 03 | 1 | 1 | - - - |
- | Right One Bit | A<0> -> A<7> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | RRC | | | | | | | | |
- | Rotate Accumulator | A<7:1> -> A<6:0> | Accumulator | | RRC A | 13 | 1 | 1 | * - - |
- | Right One Bit Thru | CF -> A<7> | | | | | | | |
- | the Carry Flag | A<0> -> CF | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | SETB | | | | | | | | |
- | Set Bit Operand | 1 -> CF | Carry Flag | | SETB C | D3 | 1 | 1 | 1 - - |
- | |-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | 1 -> DOper | Bit Direct | | SETB Baddr | D2 | 2 | 1 | - - - |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | SJMP | | | | | | | | |
- | Short (8 bits) | Jump Relative to PC | | | SJMP Roff | 80 | 2 | 2 | - - - |
- | Relative Jump | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | SUBB | | | | | | | | |
- | Subtract Operand with | A - SOper - CF -> A | Accumulator | Immediate | SUBB A,#data | 94 | 2 | 1 | * * * |
- | Borrow from the | | " | Direct | SUBB A,Daddr | 95 | 2 | 1 | |
- | Accumulator | | " | Indirect | SUBB A,@Ri | 96,97 | 1 | 1 | |
- | | | " | Register | SUBB A,Rn | 98-9F | 1 | 1 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | SWAP | | | | | | | | |
- | Swap Nibbles within | A<7:4> -> A<3:0> | Accumulator | | SWAP A | C4 | 1 | 1 | - - - |
- | the Accumulator | A<3:0> -> A<7:4> | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | | | DEST | SOURCE | ASSEMBLY |HEX |B |C | PSW |
- | MNEMONIC | OPERATION | ADDR | ADDR | LANGUAGE |OP- |Y |Y |C A O |
- | | | MODE | MODE | FORM |CODE |T |C |F C V |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | XCH | | | | | | | | |
- | Exchange bytes of the | SOper<7:0> -> A<7:0> | Accumulator | Direct | XCH A,Daddr | C5 | 2 | 1 | - - - |
- | Accumulator and the | A<7:0> -> SOper<7:0> | " | Indirect | XCH A,@Ri | C6,C7 | 1 | 1 | |
- | Source Operand | | " | Register | XCH A,Rn | C8-CF | 1 | 1 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | XCHD | | | | | | | | |
- | Exchange the Least | SOper<3:0> -> A<3:0> | Accumulator | Indirect | XCHD A,@Ri | D6,D7 | 1 | 1 | - - - |
- | Significant Nibble of | A<3:0> -> SOper<3:0> | | | | | | | |
- | the Accumulator and | | | | | | | | |
- | the Source Operand | | | | | | | | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- | XRL | | | | | | | | |
- | Logical Exclusive OR | SOper v DOper -> DOper | Direct | Accumulator | XRL Daddr,A | 62 | 2 | 1 | - - - |
- | of Source Operand | | " | Immediate | XRL Daddr,#data | 63 | 3 | 2 | |
- | with Destination | | Accumulator | Immediate | XRL A,#data | 64 | 2 | 1 | |
- | Operand | | " | Direct | XRL A,Daddr | 65 | 2 | 1 | |
- | | | " | Indirect | XRL A,@Ri | 66,67 | 1 | 1 | |
- | | | " | Register | XRL A,Rn | 68-6F | 1 | 1 | |
- |------------------------|-------------------------|-------------|-------------|------------------------|-------|---|---|-------|
- BMULB BYTE SIGNED MULTIPLY JUL-30-84 PAGE 1
-
-
- 1 ;
- 2 ; 8-bit by 8-bit signed multiply--byte signed multiply
- 3 ;
- 4 ; This routine takes the signed byte in multiplicand and
- 5 ; multiplies it by the signed byte in multiplier and places
- 6 ; the signed 16-bit product in product_high and product_low.
- 7 ;
- 8 ; This routine assumes 2s complement representation of signed
- 9 ; numbers. The maximum numbers possible is then -128 and +127.
- 10 ; Multiplying the possible maximum numbers together easily fits
- 11 ; in a 16-bit product, so no overflow test is done on the answer.
- 12 ;
- 13 ; Registers altered by routine: A, B, PSW.
- 14 ;
- 15 ;
- 16 ; Primary controls
- 17 $MOD51
- 18 $TITLE(BYTE SIGNED MULTIPLY)
- 19 $DATE(JUL-30-84)
- 20 $PAGEWIDTH(132)
- 21 $OBJECT(B:BMULB.OBJ)
- 22 ;
- 23 ;
- 24 ; Variable declarations
- 25 ;
- 00F0 26 sign_flag BIT 0F0H ;sign of product
- 0030 27 multiplier DATA 030H ;8-bit multiplier
- 0031 28 multiplicand DATA 031H ;8-bit multiplicand
- 0032 29 product_high DATA 032H ;high byte of 16-bit answer
- 0033 30 product_low DATA 033H ;low byte of answer
- 31 ;
- 32 ;
- 33 ;
- 0100 34 ORG 100H ;arbitrary start
- 35 ;
- 0100 36 byte_signed_multiply:
- 0100 C2F0 37 CLR sign_flag ;reset sign
- 0102 E530 38 MOV A,multiplier ;put multiplier in accumulator
- 0104 30E704 39 JNB ACC.7,positive ;test sign bit of multiplier
- 0107 F4 40 CPL A ;negative--complement and
- BMULB BYTE SIGNED MULTIPLY JUL-30-84 PAGE 2
-
- 0108 04 41 INC A ;add 1 to convert to positive
- 0109 D2F0 42 SETB sign_flag ;and set sign flag
- 43 ;
- 010B 8531F0 44 positive: MOV B,multiplicand ;put multiplicand in B register
- 010E 30F707 45 JNB B.7,multiply ;test sign bit of multiplicand
- 0111 63F0FF 46 XRL B,#0FFh ;negative--complement and
- 0114 05F0 47 INC B ;add 1 to convert to positive
- 0116 B2F0 48 CPL sign_flag ;complement sign flag
- 49 ;
- 0118 A4 50 multiply: MUL AB ;do unsigned multiplication
- 51 ;
- 0119 30F00A 52 sign_test: JNB sign_flag,byte_signed_exit ;if positive,done
- 011C 63F0FF 53 XRL B,#0FFh ;else have to complement both
- 011F F4 54 CPL A ;bytes of the product and inc
- 0120 2401 55 ADD A,#1 ;need add here because inc doesn't set
- 0122 5002 56 JNC byte_signed_exit ;the carry flag
- 0124 05F0 57 INC B ;if add overflowed A, inc the high byte
- 58 ;
- 0126 59 byte_signed_exit:
- 0126 85F032 60 MOV product_high,B ;save the answer
- 0129 F533 61 MOV product_low,A
- 62 ;
- 012B 22 63 RET ;and return
- 64 END
-
- ASSEMBLY COMPLETE, 0 ERRORS FOUND
- BMULB BYTE SIGNED MULTIPLY JUL-30-84 PAGE 3
-
- ACC D ADDR 00E0H PREDEFINED
- B D ADDR 00F0H PREDEFINED
- BYTE_SIGNED_EXIT C ADDR 0126H
- BYTE_SIGNED_MULTIPLY C ADDR 0100H NOT USED
- MULTIPLICAND D ADDR 0031H
- MULTIPLIER D ADDR 0030H
- MULTIPLY C ADDR 0118H
- POSITIVE C ADDR 010BH
- PRODUCT_HIGH D ADDR 0032H
- PRODUCT_LOW D ADDR 0033H
- SIGN_FLAG B ADDR 00F0H
- SIGN_TEST C ADDR 0119H NOT USED
|