Пожалуйста, помогите написать нижеследующее на ASM AVR, то, что генерирует Bascom не устраивает.
NOP
1_переменная_byte = Переменная_byte(переменная_byte).0 ' Время выполнения команды ~19 тактов при частоте МК 1 МГц
NOP
2_переменная_byte = Переменная_byte(переменная_byte).1
3_переменная_byte = Переменная_byte(переменная_byte).2
4_переменная_byte = Переменная_byte(переменная_byte).3
5_переменная_byte = Переменная_byte(переменная_byte).4
6_переменная_byte = Переменная_byte(переменная_byte).5
7_переменная_byte = Переменная_byte(переменная_byte).6
8_переменная_byte = Переменная_byte(переменная_byte).7
NOP
Время выполнения всего фрагмента при частоте МК 1 МГц ~156 тактов
$regfile = "m88def.dat" ' Используемый контроллер
$crystal = 1000000 ' 1 МГц
$framesize = 32
$hwstack = 40
$swstack = 16Dim Счетчик As Byte
Dim 0_переменная_byte As Byte
Dim 1_переменная_byte As Byte
Dim 2_переменная_byte As Byte
Dim 3_переменная_byte As Byte
Dim 4_переменная_byte As Byte
Dim 5_переменная_byte As Byte
Dim 6_переменная_byte As Byte
Dim 7_переменная_byte As ByteDim Переменная_byte(8) As Byte
Do
Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
0_переменная_byte = Переменная_byte(счетчик).0
1_переменная_byte = Переменная_byte(счетчик).1
2_переменная_byte = Переменная_byte(счетчик).2
3_переменная_byte = Переменная_byte(счетчик).3
4_переменная_byte = Переменная_byte(счетчик).4
5_переменная_byte = Переменная_byte(счетчик).5
6_переменная_byte = Переменная_byte(счетчик).6
7_переменная_byte = Переменная_byte(счетчик).7Loop
End
1:
+00000000: C019 RJMP PC+0x001A Relative jump
+00000001: 9518 RETI Interrupt return
1:
+00000002: 9518 RETI Interrupt return
+00000003: 9518 RETI Interrupt return
1:
+00000004: 9518 RETI Interrupt return
+00000005: 9518 RETI Interrupt return
1:
+00000006: 9518 RETI Interrupt return
+00000007: 9518 RETI Interrupt return
1:
+00000008: 9518 RETI Interrupt return
+00000009: 9518 RETI Interrupt return
1:
+0000000A: 9518 RETI Interrupt return
+0000000B: 9518 RETI Interrupt return
1:
+0000000C: 9518 RETI Interrupt return
+0000000D: 9518 RETI Interrupt return
1:
+0000000E: 9518 RETI Interrupt return
+0000000F: 9518 RETI Interrupt return
1:
+00000010: 9518 RETI Interrupt return
+00000011: 9518 RETI Interrupt return
1:
+00000012: 9518 RETI Interrupt return
+00000013: 9518 RETI Interrupt return
1:
+00000014: 9518 RETI Interrupt return
+00000015: 9518 RETI Interrupt return
1:
+00000016: 9518 RETI Interrupt return
+00000017: 9518 RETI Interrupt return
1:
+00000018: 9518 RETI Interrupt return
+00000019: 9518 RETI Interrupt return
1:
+0000001A: EF8F SER R24 Set Register
+0000001B: BF8D OUT 0x3D,R24 Out to I/O location
1:
+0000001C: EDC8 LDI R28,0xD8 Load immediate
+0000001D: ECE0 LDI R30,0xC0 Load immediate
1:
+0000001E: 2E4E MOV R4,R30 Copy register
+0000001F: E084 LDI R24,0x04 Load immediate
1:
+00000020: BF8E OUT 0x3E,R24 Out to I/O location
+00000021: E0D4 LDI R29,0x04 Load immediate
1:
+00000022: E0F4 LDI R31,0x04 Load immediate
+00000023: 2E5F MOV R5,R31 Copy register
1:
+00000024: 95A8 WDR Watchdog reset
+00000025: B784 IN R24,0x34 In from I/O location
1:
+00000026: 2E08 MOV R0,R24 Copy register
+00000027: 7F87 ANDI R24,0xF7 Logical AND with immediate
1:
+00000028: BF84 OUT 0x34,R24 Out to I/O location
+00000029: E188 LDI R24,0x18 Load immediate
1:
+0000002A: 2799 CLR R25 Clear Register
+0000002B: 93800060 STS 0x0060,R24 Store direct to data space
+0000002D: 93900060 STS 0x0060,R25 Store direct to data space
+0000002F: EFEE LDI R30,0xFE Load immediate
1:
+00000030: E0F3 LDI R31,0x03 Load immediate
+00000031: E0A0 LDI R26,0x00 Load immediate
1:
+00000032: E0B1 LDI R27,0x01 Load immediate
+00000033: 2788 CLR R24 Clear Register
1:
+00000034: 938D ST X+,R24 Store indirect and postincrement
+00000035: 9731 SBIW R30,0x01 Subtract immediate from word
1:
+00000036: F7E9 BRNE PC-0x02 Branch if not equal
+00000037: 2466 CLR R6 Clear Register
26: Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
+00000038: E0A0 LDI R26,0x00 Load immediate
+00000039: E0B1 LDI R27,0x01 Load immediate
26: Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
+0000003A: 918C LD R24,X Load indirect
+0000003B: 5F8F SUBI R24,0xFF Subtract immediate
26: Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
+0000003C: 938C ST X,R24 Store indirect
+0000003D: 91000100 LDS R16,0x0100 Load direct from data space
+0000003F: 3008 CPI R16,0x08 Compare with immediate
26: Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
+00000040: F010 BRCS PC+0x03 Branch if carry set
+00000041: F009 BREQ PC+0x02 Branch if equal
26: Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
+00000042: C001 RJMP PC+0x0002 Relative jump
+00000043: C003 RJMP PC+0x0004 Relative jump
26: Incr Счетчик : If Счетчик > 8 Then Счетчик = 1
+00000044: E081 LDI R24,0x01 Load immediate
+00000045: 93800100 STS 0x0100,R24 Store direct to data space
28: 0_переменная_byte = Переменная_byte(счетчик).0
+00000047: E0A0 LDI R26,0x00 Load immediate
+00000048: E0B1 LDI R27,0x01 Load immediate
28: 0_переменная_byte = Переменная_byte(счетчик).0
+00000049: 90AD LD R10,X+ Load indirect and postincrement
+0000004A: 24BB CLR R11 Clear Register
28: 0_переменная_byte = Переменная_byte(счетчик).0
+0000004B: E0A8 LDI R26,0x08 Load immediate
+0000004C: E0B1 LDI R27,0x01 Load immediate
28: 0_переменная_byte = Переменная_byte(счетчик).0
+0000004D: 0DAA ADD R26,R10 Add without carry
+0000004E: 1DBB ADC R27,R11 Add with carry
28: 0_переменная_byte = Переменная_byte(счетчик).0
+0000004F: 918C LD R24,X Load indirect
+00000050: FB80 BST R24,0 Bit store from register to T
28: 0_переменная_byte = Переменная_byte(счетчик).0
+00000051: E0A1 LDI R26,0x01 Load immediate
+00000052: E0B1 LDI R27,0x01 Load immediate
28: 0_переменная_byte = Переменная_byte(счетчик).0
+00000053: 2788 CLR R24 Clear Register
+00000054: F980 BLD R24,0 Bit load from T to register
28: 0_переменная_byte = Переменная_byte(счетчик).0
+00000055: 938C ST X,R24 Store indirect
29: 1_переменная_byte = Переменная_byte(счетчик).1
+00000056: E0A0 LDI R26,0x00 Load immediate
+00000057: E0B1 LDI R27,0x01 Load immediate
29: 1_переменная_byte = Переменная_byte(счетчик).1
+00000058: 90AD LD R10,X+ Load indirect and postincrement
+00000059: 24BB CLR R11 Clear Register
29: 1_переменная_byte = Переменная_byte(счетчик).1
+0000005A: E0A8 LDI R26,0x08 Load immediate
+0000005B: E0B1 LDI R27,0x01 Load immediate
29: 1_переменная_byte = Переменная_byte(счетчик).1
+0000005C: 0DAA ADD R26,R10 Add without carry
+0000005D: 1DBB ADC R27,R11 Add with carry
29: 1_переменная_byte = Переменная_byte(счетчик).1
+0000005E: 918C LD R24,X Load indirect
+0000005F: FB81 BST R24,1 Bit store from register to T
29: 1_переменная_byte = Переменная_byte(счетчик).1
+00000060: E0A2 LDI R26,0x02 Load immediate
+00000061: E0B1 LDI R27,0x01 Load immediate
29: 1_переменная_byte = Переменная_byte(счетчик).1
+00000062: 2788 CLR R24 Clear Register
+00000063: F980 BLD R24,0 Bit load from T to register
29: 1_переменная_byte = Переменная_byte(счетчик).1
+00000064: 938C ST X,R24 Store indirect
30: 2_переменная_byte = Переменная_byte(счетчик).2
+00000065: E0A0 LDI R26,0x00 Load immediate
+00000066: E0B1 LDI R27,0x01 Load immediate
30: 2_переменная_byte = Переменная_byte(счетчик).2
+00000067: 90AD LD R10,X+ Load indirect and postincrement
+00000068: 24BB CLR R11 Clear Register
30: 2_переменная_byte = Переменная_byte(счетчик).2
+00000069: E0A8 LDI R26,0x08 Load immediate
+0000006A: E0B1 LDI R27,0x01 Load immediate
30: 2_переменная_byte = Переменная_byte(счетчик).2
+0000006B: 0DAA ADD R26,R10 Add without carry
+0000006C: 1DBB ADC R27,R11 Add with carry
30: 2_переменная_byte = Переменная_byte(счетчик).2
+0000006D: 918C LD R24,X Load indirect
+0000006E: FB82 BST R24,2 Bit store from register to T
30: 2_переменная_byte = Переменная_byte(счетчик).2
+0000006F: E0A3 LDI R26,0x03 Load immediate
+00000070: E0B1 LDI R27,0x01 Load immediate
30: 2_переменная_byte = Переменная_byte(счетчик).2
+00000071: 2788 CLR R24 Clear Register
+00000072: F980 BLD R24,0 Bit load from T to register
30: 2_переменная_byte = Переменная_byte(счетчик).2
+00000073: 938C ST X,R24 Store indirect
31: 3_переменная_byte = Переменная_byte(счетчик).3
+00000074: E0A0 LDI R26,0x00 Load immediate
+00000075: E0B1 LDI R27,0x01 Load immediate
31: 3_переменная_byte = Переменная_byte(счетчик).3
+00000076: 90AD LD R10,X+ Load indirect and postincrement
+00000077: 24BB CLR R11 Clear Register
31: 3_переменная_byte = Переменная_byte(счетчик).3
+00000078: E0A8 LDI R26,0x08 Load immediate
+00000079: E0B1 LDI R27,0x01 Load immediate
31: 3_переменная_byte = Переменная_byte(счетчик).3
+0000007A: 0DAA ADD R26,R10 Add without carry
+0000007B: 1DBB ADC R27,R11 Add with carry
31: 3_переменная_byte = Переменная_byte(счетчик).3
+0000007C: 918C LD R24,X Load indirect
+0000007D: FB83 BST R24,3 Bit store from register to T
31: 3_переменная_byte = Переменная_byte(счетчик).3
+0000007E: E0A4 LDI R26,0x04 Load immediate
+0000007F: E0B1 LDI R27,0x01 Load immediate
31: 3_переменная_byte = Переменная_byte(счетчик).3
+00000080: 2788 CLR R24 Clear Register
+00000081: F980 BLD R24,0 Bit load from T to register
31: 3_переменная_byte = Переменная_byte(счетчик).3
+00000082: 938C ST X,R24 Store indirect
32: 4_переменная_byte = Переменная_byte(счетчик).4
+00000083: E0A0 LDI R26,0x00 Load immediate
+00000084: E0B1 LDI R27,0x01 Load immediate
32: 4_переменная_byte = Переменная_byte(счетчик).4
+00000085: 90AD LD R10,X+ Load indirect and postincrement
+00000086: 24BB CLR R11 Clear Register
32: 4_переменная_byte = Переменная_byte(счетчик).4
+00000087: E0A8 LDI R26,0x08 Load immediate
+00000088: E0B1 LDI R27,0x01 Load immediate
32: 4_переменная_byte = Переменная_byte(счетчик).4
+00000089: 0DAA ADD R26,R10 Add without carry
+0000008A: 1DBB ADC R27,R11 Add with carry
32: 4_переменная_byte = Переменная_byte(счетчик).4
+0000008B: 918C LD R24,X Load indirect
+0000008C: FB84 BST R24,4 Bit store from register to T
32: 4_переменная_byte = Переменная_byte(счетчик).4
+0000008D: E0A5 LDI R26,0x05 Load immediate
+0000008E: E0B1 LDI R27,0x01 Load immediate
32: 4_переменная_byte = Переменная_byte(счетчик).4
+0000008F: 2788 CLR R24 Clear Register
+00000090: F980 BLD R24,0 Bit load from T to register
32: 4_переменная_byte = Переменная_byte(счетчик).4
+00000091: 938C ST X,R24 Store indirect
33: 5_переменная_byte = Переменная_byte(счетчик).5
+00000092: E0A0 LDI R26,0x00 Load immediate
+00000093: E0B1 LDI R27,0x01 Load immediate
33: 5_переменная_byte = Переменная_byte(счетчик).5
+00000094: 90AD LD R10,X+ Load indirect and postincrement
+00000095: 24BB CLR R11 Clear Register
33: 5_переменная_byte = Переменная_byte(счетчик).5
+00000096: E0A8 LDI R26,0x08 Load immediate
+00000097: E0B1 LDI R27,0x01 Load immediate
33: 5_переменная_byte = Переменная_byte(счетчик).5
+00000098: 0DAA ADD R26,R10 Add without carry
+00000099: 1DBB ADC R27,R11 Add with carry
33: 5_переменная_byte = Переменная_byte(счетчик).5
+0000009A: 918C LD R24,X Load indirect
+0000009B: FB85 BST R24,5 Bit store from register to T
33: 5_переменная_byte = Переменная_byte(счетчик).5
+0000009C: E0A6 LDI R26,0x06 Load immediate
+0000009D: E0B1 LDI R27,0x01 Load immediate
33: 5_переменная_byte = Переменная_byte(счетчик).5
+0000009E: 2788 CLR R24 Clear Register
+0000009F: F980 BLD R24,0 Bit load from T to register
33: 5_переменная_byte = Переменная_byte(счетчик).5
+000000A0: 938C ST X,R24 Store indirect
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000A1: E0A0 LDI R26,0x00 Load immediate
+000000A2: E0B1 LDI R27,0x01 Load immediate
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000A3: 90AD LD R10,X+ Load indirect and postincrement
+000000A4: 24BB CLR R11 Clear Register
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000A5: E0A8 LDI R26,0x08 Load immediate
+000000A6: E0B1 LDI R27,0x01 Load immediate
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000A7: 0DAA ADD R26,R10 Add without carry
+000000A8: 1DBB ADC R27,R11 Add with carry
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000A9: 918C LD R24,X Load indirect
+000000AA: FB86 BST R24,6 Bit store from register to T
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000AB: E0A7 LDI R26,0x07 Load immediate
+000000AC: E0B1 LDI R27,0x01 Load immediate
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000AD: 2788 CLR R24 Clear Register
+000000AE: F980 BLD R24,0 Bit load from T to register
34: 6_переменная_byte = Переменная_byte(счетчик).6
+000000AF: 938C ST X,R24 Store indirect
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000B0: E0A0 LDI R26,0x00 Load immediate
+000000B1: E0B1 LDI R27,0x01 Load immediate
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000B2: 90AD LD R10,X+ Load indirect and postincrement
+000000B3: 24BB CLR R11 Clear Register
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000B4: E0A8 LDI R26,0x08 Load immediate
+000000B5: E0B1 LDI R27,0x01 Load immediate
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000B6: 0DAA ADD R26,R10 Add without carry
+000000B7: 1DBB ADC R27,R11 Add with carry
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000B8: 918C LD R24,X Load indirect
+000000B9: FB87 BST R24,7 Bit store from register to T
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000BA: E0A8 LDI R26,0x08 Load immediate
+000000BB: E0B1 LDI R27,0x01 Load immediate
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000BC: 2788 CLR R24 Clear Register
+000000BD: F980 BLD R24,0 Bit load from T to register
35: 7_переменная_byte = Переменная_byte(счетчик).7
+000000BE: 938C ST X,R24 Store indirect
38: Loop
+000000BF: CF78 RJMP PC-0x0087 Relative jump
39: End
+000000C0: 94F8 CLI Global Interrupt Disable
+000000C1: CFFF RJMP PC-0x0000 Relative jump
42:
+000000C2: 9731 SBIW R30,0x01 Subtract immediate from word
+000000C3: F7F1 BRNE PC-0x01 Branch if not equal
42:
+000000C4: 9508 RET Subroutine return
+000000C5: 9468 SET Set T in SREG
42:
+000000C6: F862 BLD R6,2 Bit load from T to register
+000000C7: 9508 RET Subroutine return
42:
+000000C8: 94E8 CLT Clear T in SREG
+000000C9: F862 BLD R6,2 Bit load from T to register
42:
+000000CA: 9508 RET Subroutine return
---- No Source ------------------------------------------------------------------------------------
Настоятельная просьба, писать по существу вопроса!
Отредактировано sasha_1973 (2013-10-21 10:14:34)
