📄 math.lst
字号:
892: 02AC D0 0C pop 0CH
893: 02AE D0 0B pop 0BH
894: 02B0 D0 0A pop 0AH
895: 02B2 D0 09 pop 09
896: 02B4 D0 08 pop 08
897: 02B6 22 ret
898:
899:
900: ;====================================================================
901: ; subroutine MULDIV
902: ; 16-Bit x 16-Bit to 32-Bit Product Signed Multiply followed by
903: ; 32-Bit / 16-Bit to 32-Bit Quotient & remainder signed Divide
904: ; 2's Complement Format
905: ;
906: ; input: r1, r0 = multiplicand X
907: ; r3, r2 = multiplier Y
908: ; r5, r4 = divisor Z
909: ;
910: ; output: r3, r2, r1, r0 = quotient Q of division Q = (X x Y) / Z
911: ; r7, r6, r5, r4 = remainder
912: ; Carry C is set if Z = 0, i.e. divide by 0 attempted
913: ;
914: ; calls: UMUL16, UDIV32, Cr0r1, Cr2r3, Cr4r5, Mr0r3
915: ;
916: ; alters: acc, flags, Bits 21H & 22H
917: ;====================================================================
918:
919: 02B7 53 D0 E7 MULDIV: anl PSW, #0E7H ; Register Bank 0
920: 02BA EC mov a, r4 ; get divisor high byte
921: 02BB 4D orl a, r5 ; OR with low byte
922: 02BC 70 02 jnz muld_OK ; divisor OK if not 0
923: 02BE D3 setb C ; else, overflow
924: 02BF 22 ret
925:
926: 02C0 12 00 1A muld_OK: lcall Cr0r1 ; 2's comp -> Mag/Sign
927: 02C3 12 00 2E lcall Cr2r3 ; 2's comp -> Mag/Sign
928: 02C6 12 01 4C lcall UMUL16
929: 02C9 20 21 0B jb 21H, divn1 ; test X sign
930: 02CC 12 00 42 divn: lcall Cr4r5 ; 2's comp -> Mag/Sign
931: 02CF 12 02 1F lcall UDIV32
932: 02D2 12 00 9A lcall Mr0r3 ; Mag/Sign -> 2's Comp
933: 02D5 C3 clr C ; divisor is not 0
934: 02D6 22 ret
935:
936: 02D7 10 22 F2 divn1: jbc 22H, divn ; test Y sign
937: 02DA D2 22 setb 22H
938: 02DC 80 EE sjmp divn
939:
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 18
Line I Addr Code Source
940:
941: ;====================================================================
942: ; subroutine MACD16
943: ; 16-Bit x 16-Bit to 32-Bit Product signed Multiply-Accumulate
944: ; with table data and data move.
945: ; y(n) = x(n)*h0 + x(n-1)*h1 + x(n-2)*h2 + ......
946: ; Note: Assumes shared program/data space. i.e. PSEN and RD are OR-ed
947: ; together on the board.
948: ; 2's Complement format
949: ;
950: ; input: B = No. of 16-bit data items in tables (max 63)
951: ; DPTR --> New Input data (e.g. from ADC)
952: ; DPTR+2 --> Base of Data Table (x)
953: ; DPTR+128 --> Base of Multiplier Table (h)
954: ;
955: ; output: r7, r6, r5, r4 = 32-bit accumulated result
956: ;
957: ; calls: MUL16
958: ;
959: ; alters: acc, flags, Bits 21H & 22H
960: ;====================================================================
961:
962: 02DE 53 D0 E7 MACD16: anl PSW, #0E7H
963: 02E1 7C 00 mov r4, #0 ; Clear Accumulator
964: 02E3 7D 00 mov r5, #0
965: 02E5 7E 00 mov r6, #0
966: 02E7 7F 00 mov r7, #0
967:
968: 02E9 E0 movx a, @DPTR
969: 02EA C0 E0 push acc ; Save XNEWL
970: 02EC A3 inc DPTR
971: 02ED E0 movx a, @DPTR
972: 02EE C0 E0 push acc ; Save XNEWH
973: 02F0 A3 inc DPTR
974:
975: 02F1 E0 Macd1: movx a, @DPTR ; Get x(n)L
976: 02F2 F8 mov r0, a
977: 02F3 C0 E0 push acc ; Save x(n)L
978: 02F5 74 80 mov a, #80H
979: 02F7 93 movc a, @a+DPTR ; Get h(n)L
980: 02F8 FA mov r2, a
981: 02F9 A3 inc DPTR
982: 02FA E0 movx a, @DPTR ; Get x(n)H
983: 02FB F9 mov r1, a
984: 02FC C0 E0 push acc ; Save x(n)H
985: 02FE 74 80 mov a, #80H
986: 0300 93 movc a, @a+DPTR ; Get h(n)H
987: 0301 FB mov r3, a
988: 0302 12 01 43 lcall MUL16+3 ; Do Multiply...
989: 0305 EC mov A, r4 ; then Accumulate..
990: 0306 28 add A, r0
991: 0307 FC mov r4, A
992: 0308 ED mov A, r5
993: 0309 39 addc A, r1
994: 030A FD mov r5, A
995: 030B EE mov A, r6
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 19
Line I Addr Code Source
996: 030C 3A addc A, r2
997: 030D FE mov r6, A
998: 030E EF mov A, r7
999: 030F 3B addc A, r3
1000: 0310 FF mov r7, A
1001: 0311 D0 01 pop 01 ; Now move x data
1002: 0313 D0 00 pop 00
1003: 0315 D0 03 pop 03
1004: 0317 D0 02 pop 02
1005: 0319 C0 00 push 00
1006: 031B C0 01 push 01
1007: 031D EB mov a, r3 ; Move up x(n)H
1008: 031E F0 movx @DPTR, a
1009: 031F 74 FF mov a, #0FFH
1010: 0321 25 82 add a, dpl
1011: 0323 F5 82 mov dpl, a
1012: 0325 74 FF mov a, #0FFH
1013: 0327 35 83 addc a, dph
1014: 0329 F5 83 mov dph, a
1015: 032B EA mov a, r2 ; Move up x(n)L
1016: 032C F0 movx @DPTR, a
1017: 032D A3 inc DPTR
1018: 032E A3 inc DPTR
1019: 032F D5 F0 BF djnz b, Macd1 ; Whole table processed?
1020: 0332 15 81 dec SP
1021: 0334 15 81 dec SP
1022: 0336 22 ret
1023:
1024:
1025: ;==================================================================
1026: ; subroutine DELAY
1027: ;
1028: ; input: r0, r1, r2 = delay loop constants, r0 = coarse loop
1029: ;==================================================================
1030:
1031: 0337 C0 82 DELAY: push dpl
1032: 0339 C0 83 push dph
1033: 033B 89 82 mov dpl, r1
1034: 033D 8A 83 mov dph, r2
1035: 033F A9 82 Delay1: mov r1, dpl
1036: 0341 AA 83 Delay2: mov r2, dph
1037: 0343 DA FE djnz r2, $
1038: 0345 D9 FA djnz r1, Delay2
1039: 0347 D8 F6 djnz r0, Delay1
1040: 0349 D0 83 pop dph
1041: 034B D0 82 pop dpl
1042: 034D 22 ret
1043:
1044:
1045: end
1046:
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 20
register banks used: ---
no errors
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 21
L I S T O F S Y M B O L S
=============================
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
??ASEM_51 NUMBER 8051
??VERSION NUMBER 0130
AC BIT D6
ACC DATA E0
ADD16 CODE 00C4 313
ADD32 CODE 00D0 337
B DATA F0
C0A CODE 0021 76
C1A CODE 0035 105
C2A CODE 005D 163
C3A CODE 0049 134
CONV816 CODE 00BA 291
CR0 CODE 0000 23
CR0A CODE 0007 28
CR0R1 CODE 001A 71
CR0R3 CODE 0056 158
CR1 CODE 000D 47
CR1A CODE 0014 52
CR2R3 CODE 002E 100
CR4R5 CODE 0042 129
CY BIT D7
DELAY CODE 0337 1031
DELAY1 CODE 033F 1035
DELAY2 CODE 0341 1036
DIV16 CODE 01B7 672
DIV32 CODE 020C 770
DIV32_OK CODE 0215 777
DIV8 CODE 019F 624
DIVN CODE 02CC 930
DIVN1 CODE 02D7 936
DIV_1 CODE 01FA 735
DIV_321 CODE 027F 863
DIV_LOOP CODE 01DD 710
DIV_LP32 CODE 0242 816
DIV_OK CODE 01C0 679
DPH DATA 83
DPL DATA 82
EA BIT AF
ES BIT AC
ET0 BIT A9
ET1 BIT AB
EX0 BIT A8
EX1 BIT AA
EXTI0 CODE 0003
EXTI1 CODE 0013
F0 BIT D5
IE DATA A8
IE0 BIT 89
IE1 BIT 8B
INT0 BIT B2
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 22
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
INT1 BIT B3
IP DATA B8
IT0 BIT 88
IT1 BIT 8A
MAC16 CODE 018B 590
MACD1 CODE 02F1 975
MACD16 CODE 02DE 962
MR0 CODE 0074 196
MR0A CODE 007F 203
MR0B CODE 007B 200
MR0R1 CODE 0084 223
MR0R1A CODE 008F 230
MR0R1B CODE 008B 227
MR0R3 CODE 009A 254
MR0R3A CODE 00A5 261
MR0R3B CODE 00A1 258
MUL16 CODE 0140 510
MUL8 CODE 0102 425
MUL816 CODE 011A 470
MULDIV CODE 02B7 919
MULD_OK CODE 02C0 926
OV BIT D2
P BIT D0
P0 DATA 80
P1 DATA 90
P2 DATA A0
P3 DATA B0
PCON DATA 87
POS CODE 00C1 296
PS BIT BC
PSW DATA D0
PT0 BIT B9
PT1 BIT BB
PX0 BIT B8
PX1 BIT BA
RB8 BIT 9A
RD BIT B7
REN BIT 9C
RESET CODE 0000
RI BIT 98
RS0 BIT D3
RS1 BIT D4
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
SUB16 CODE 00E2 367
SUB32 CODE 00EF 392
T0 BIT B4
T1 BIT B5
TB8 BIT 9B
TCON DATA 88
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 23
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
TF0 BIT 8D
TF1 BIT 8F
TH0 DATA 8C
TH1 DATA 8D
TI BIT 99
TIMER0 CODE 000B
TIMER1 CODE 001B
TL0 DATA 8A
TL1 DATA 8B
TMOD DATA 89
TR0 BIT 8C
TR1 BIT 8E
TXD BIT B1
UDIV16 CODE 01D6 706
UDIV32 CODE 021F 798
UDIV8 CODE 01AB 645
UMUL16 CODE 014C 530
UMUL8 CODE 010E 445
WR BIT B6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -