Files
emu51/asm_tabl.txt
2013-12-17 00:25:22 +00:00

552 lines
62 KiB
Plaintext
Executable File
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
+-----------+------------+-------------+-------------+-------------+-------------+-------------------+
| 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