Quiz 6.3: Difference between revisions
No edit summary |
No edit summary |
||
| Line 1: | Line 1: | ||
Sections start their location counters at zero. The .bss directives don't advance the counter, because they go off to a different section. Assembly instructions take up bytes of memory according to what they are and their addressing mode. Whenever a .sect happens the location counter is reset to zero. There is more in section 2 of this [http://www.ti.com/lit/ug/slau131m/slau131m.pdf TI Manual on the Assembler]. I'm not certain about these, but here is what I came up with. | Sections start their location counters at zero. The .bss directives don't advance the counter, because they go off to a different section. Assembly instructions take up bytes of memory according to what they are and their addressing mode. Whenever a .sect happens the location counter is reset to zero. There is more in section 2 of this [http://www.ti.com/lit/ug/slau131m/slau131m.pdf TI Manual on the Assembler]. I'm not certain about these, but here is what I came up with, as my best guess. This quiz is more tailored to the old Assembly List file, that has a field for the section counter. Code Composer Studio | ||
*0x0000 | *0x0000 | ||
| Line 14: | Line 14: | ||
*0x0000 | *0x0000 | ||
*0x0000 | *0x0000 | ||
You can get the Assembly List file by going into the Build Settings->Build->Advanced Options->Assembler, and tick the Generate listing file box. Here is the listing file I got using the MSP430G2553 processor. | |||
<nowiki>MSP430 Assembler Unix v15.12.3 Tue Nov 1 17:48:13 2016 | |||
Tools Copyright (c) 2003-2015 Texas Instruments Incorporated | |||
../main.asm PAGE 1 | |||
1 .cdecls C,"msp430.h" ; include c header | |||
2 000000 .bss cnt,2 ; WDT second counter | |||
3 000002 .bss cat,4 | |||
4 000000 .text ; program section | |||
5 000000 4031 start: mov.w #0x0400,SP ; set stack pointer | |||
000002 0400 | |||
6 000004 40B2 mov.w #0x5a18,&WDTCTL ; set WD timer interval | |||
000006 5A18 | |||
000008 0000! | |||
7 00000a 40B2 mov.w #0x00fa,&cnt ; 1 sec WD counter | |||
00000c 00FA | |||
00000e 0000! | |||
8 000010 43D2 mov.b #0x01,&IE1 ; enable WDT interrupt | |||
000012 0000! | |||
9 000014 D3D2 bis.b #0x01,&P1DIR ; P1.0 output | |||
000016 0000! | |||
10 000018 D032 bis.w #0x0018,SR ; enable interrupts | |||
00001a 0018 | |||
11 000006 .bss dog,2 | |||
12 00001c E3D2 wdt_isr: xor.b #0x01,&P1OUT ; toggle P1.0 | |||
00001e 0000! | |||
13 000020 1300 reti ; return from interrupt | |||
14 000000 .sect ".int10" ; WDT vector section | |||
15 000000 0000! .word wdt_isr ; Watchdog ISR | |||
16 000000 .sect ".reset" ; PUC vector section | |||
17 000000 0000! .word start ; RESET ISR | |||
18 .end | |||
No Assembly Errors, No Assembly Warnings | |||
</nowiki> | |||
You can see that my guess wasn't right. The second column of numbers is the location counter. :-) | |||
Revision as of 17:53, 1 November 2016
Sections start their location counters at zero. The .bss directives don't advance the counter, because they go off to a different section. Assembly instructions take up bytes of memory according to what they are and their addressing mode. Whenever a .sect happens the location counter is reset to zero. There is more in section 2 of this TI Manual on the Assembler. I'm not certain about these, but here is what I came up with, as my best guess. This quiz is more tailored to the old Assembly List file, that has a field for the section counter. Code Composer Studio
- 0x0000
- 0x0000
- 0x0000
- 0x0002
- 0x0008
- 0x000a
- 0x000c
- 0x000e
- 0x000e
- 0x0010
- 0x0002
- 0x0000
- 0x0000
You can get the Assembly List file by going into the Build Settings->Build->Advanced Options->Assembler, and tick the Generate listing file box. Here is the listing file I got using the MSP430G2553 processor.
MSP430 Assembler Unix v15.12.3 Tue Nov 1 17:48:13 2016
Tools Copyright (c) 2003-2015 Texas Instruments Incorporated
../main.asm PAGE 1
1 .cdecls C,"msp430.h" ; include c header
2 000000 .bss cnt,2 ; WDT second counter
3 000002 .bss cat,4
4 000000 .text ; program section
5 000000 4031 start: mov.w #0x0400,SP ; set stack pointer
000002 0400
6 000004 40B2 mov.w #0x5a18,&WDTCTL ; set WD timer interval
000006 5A18
000008 0000!
7 00000a 40B2 mov.w #0x00fa,&cnt ; 1 sec WD counter
00000c 00FA
00000e 0000!
8 000010 43D2 mov.b #0x01,&IE1 ; enable WDT interrupt
000012 0000!
9 000014 D3D2 bis.b #0x01,&P1DIR ; P1.0 output
000016 0000!
10 000018 D032 bis.w #0x0018,SR ; enable interrupts
00001a 0018
11 000006 .bss dog,2
12 00001c E3D2 wdt_isr: xor.b #0x01,&P1OUT ; toggle P1.0
00001e 0000!
13 000020 1300 reti ; return from interrupt
14 000000 .sect ".int10" ; WDT vector section
15 000000 0000! .word wdt_isr ; Watchdog ISR
16 000000 .sect ".reset" ; PUC vector section
17 000000 0000! .word start ; RESET ISR
18 .end
No Assembly Errors, No Assembly Warnings
You can see that my guess wasn't right. The second column of numbers is the location counter. :-)