第 4 章 汇编语言程序设计

Click here to load reader

download 第 4 章 汇编语言程序设计

of 151

description

第 4 章 汇编语言程序设计. 本 章结合 C54x 的软件开发过程,介绍 DSP 所采用的 COFF 目标文件格式 、结构和规范。介绍汇编语 言的 重要组成部分: 伪指 令 Assembler directives 和 宏指 令 Macro directives 。 讨论建立汇编语言程序并产生可执行文件的设计要求。指出汇编程序设计中的一些关键问题,并通过实例介绍设计的方法和技巧。. 参考: TMS320C54x Assembly Language Tools User’s Guide.pdf, SPRU102F , 2002 年, TI 官网. - PowerPoint PPT Presentation

Transcript of 第 4 章 汇编语言程序设计

PowerPoint Presentation

4-4 TMS320C54x 4 MEMORY { PAGE 0: PROG: origin=0x0080, length=0xFF00 PAGE 1: DATA: origin=0x0080, length=0xFF80 } SECTIONS { .text: PAGE = 0 .data: PAGE = 0 .cinit: PAGE = 0 C .bss: PAGE = 1 }4.4.3 Symbols3. Substitution Symbols .asg *+, INC ; indirect auto-increment4. Local Labels 2 $nn=0~9 namename 4 2 C/C++ C54x4-1 4 4.1 C54x 4

C54xTI CCS(Code Composer Studio)6CCS 4 CCCOFFCOFFEPROMTMS320C54xHEX4 4.2 COFF C54x(COFF)COFF common object file format COFF3COFF0COFF1COFF2 COFF /COFFCOFF2-v nCOFF4 4.2.1 COFF .text .data .bss COFF 4 Section 00.cmdMEMORYSECTIONS 4 1. .text .data .sect 4 2. RAM .bss.usect.4 One of the linkers functions is to relocate sections into the target memory map;this function is called allocation. :.bss.data.textRAME2PROMROM4 133. 5 .bss .usect .text .data .sect4 .text [] .data [] .sect [,] SPC SPC04 (1) .bss: bss .bss , [, [][, ]]bssC54x.bss (2) .usect .usect [, [][, ]] .usect4 4-1 .text .word 1,2,3,4,5,6,7,8 .data .word 9,10,11,12 .word 13,14 .word 15,16 .sect var1 .word 17,18 .bss x1,19 .bss19 y1 .usect var2, 40; var240 4 .text8161~8 .data8169~16 Var12161718 .bss19 x1 Var240y1 4-1 .text .word 1,2,3,4,5,6,7,8 .data .word 9,10,11,12 .word 13,14 .word 15,16 .sect var1 .word 17,18 .bss x1,19 y1 .usect var2, 40; 54.2.2 .text.data.sect().text.data.sect.bss.usect(.bss.usect)4-24 SPC SPC SPCSPC0SPCSPC4 4.2.2 4-2 .datacoeff .word 011h,022h,033h .bss buffer10 prt .word 0123h .textadd LD 0FhA Aloop: SUB #1A BC aloopAGEQ .dataivals .word 0AAh0BBh0CCh ; ;3.data ;.bss10 ;.bss0123h.data ; ;1(DP) ;2 ;2 ; ;3.datavar2 .usect newvars, 1 inbuf .usect newvars, 7 .text mpy LD 0AhB Mloop: MPY #0AhB BC mloopBNOV .sect vectors .word 011h033h ;newvars,1 ;newvars7 ; ;1(DP) ;2 ;2 ;vectors ;2vectors 5.text10.data7 vectors.sect,2 .bss 10newvars.usect, 8 4 4-2 2 **********************************3 ** .data **4 **********************************5 0000 .data6 0000 0011 coeff .word 011h,022h,033h 0001 0022 0002 00337 **********************************8 ** .bss **9 **********************************10 0000 .bss buffer1011 **********************************12 ** .bss.data **13 **********************************14 0003 0123 prt .word 0123h 15 **********************************16 ** .text **17 **********************************18 0000 .text19 0000 100f add LD 0FhA ;DP20 0001 f010 aloop SUB #1 A 0002 0001 21 0003 f842 BC aloopAGEQ 0004 0001 ( : relocatable internal reference)22 **********************************23 ** .data24 **********************************25 0004 .data 26 0004 00aa ivals .word 0AAh0BBh0CCh 0005 00bb 0006 00cc27 **********************************28 ** **29 **********************************30 0000 var2 .usect newvars1 31 0001 inbuf .usect newvars7 32 ****************************************33 ** .text **34 ****************************************35 0005 .text 36 0005 110a mpy LD 0AhB 37 0006 f166 mloop MPY #0AhB 0007 000a 38 0008 f868 BC mloopBNOV 0009 0006 ( : relocatable internal reference) 39 ****************************************40 .vectors41 ****************************************42 0000 .sect vectors 43 0000 0011 .word 011h033h 0001 0033 4-2 4 15 ********************************16 ** .text **17 ********************************18 0000 .text19 0000 100f add LD 0FhA20 0001 f010 aloop SUB #1 A 0002 0001 21 0003 f842 BC aloopAGEQ 0004 0001 22 **********************************23 ** .data ** 24 **********************************25 0004 .data 26 0004 00aa ivals .word 0AAh0BBh0CCh 0005 00bb 0006 00cc27 ********************************28 ** **29 ********************************30 0000 var2 .usect newvars131 0001 inbuf .usect newvars7100ff0100001f8420001110af166000aF868000666614001100220033012300aa00bb00cc.data00110033 1010.bss10.text 18 0000 .text19 0000 100f add LD 0FhA19 100f20 0001 f010 aloop SUB #1 A 0002 000120 f01020 000121 0003 f842 BC aloopAGEQ 0004 0001 ( : relocatable internal reference)21 f84221 000125 0004 .data26 0004 00aa ivals .word 0AAh0BBh0CCh 0005 00bb 0006 00cc.data 26 00aa26 00bb26 00cc30 0000 var2 .usect newvars1newvars 30 131 0001 inbuf .usect newvars731 7SPC294 32 *********************************33 ** .text **34 *********************************35 0005 .text 36 0005 110a mpy LD 0AhB 37 0006 f166 mloop MPY #0AhB 0007 000a 38 0008 f868 BC mloopBNOV 0009 0006 39 ****************************************40 ** .vectors ** 41 ****************************************42 0000 .sect vectors 43 0000 0011 .word 011h033h 0001 0033 1920202121100ff0100001f8420001110af166000aF8680006.text66614262626001100220033012300aa00bb00cc.data00440088 1010.bss30318newvars35 0005 .text.text 36 0005 110a mpy LD 0AhB 36 110a37 0006 f166 mloop MPY #0AhB 0007 000a 37 f16637 000a38 0008 f868 BC mloopBNOV 0009 0006 ( : relocatable internal reference) 38 f86838 000642 0000 .sect vectorsvectors 43 0000 0011 .word 011h033h43 001143 0033SPC0001 0033304.2.3 C54x 1.objCOFF.out 4 (Allocation): .text.data.bss MEMORYSECTIONS4 1. 4 1 2CCS 3MEMORYSECTIONSMEMORYSECTIONS 4 4

2. MEMORY SECTIONS 4 1MEMORY MEMORY4 2. MEMORY { PAGE 0 : name 1 [(attr)] : origin = constant , length = constant; PAGE n : name n [(attr)] : origin = constant , length = constant; } PAGE 0 : PROG: origin = 0x0080, length = 0xFF00PAGE 1 : DATA: origin = 0x0080, length = 0xFF80 2SECTIONS SECTIONSMEMORYSECTIONS SECTIONS SECTIONS { name : [property, property, property,...] name : [property, property, property,...] name : [property, property, property,...] } 2. (An output section is a section in the output file.).text: PAGE = 0.data: PAGE = 0.bss: PAGE = 1.text: PAGE = 0.data: PAGE = 0.bss: PAGE = 1nameproperty property load run input sections Section type Fill value 4 3. () MEMORYSECTIONS 0080h4 .text.text .data.text .bss .data.bss 4 File1.obj.text1.data1.bss1table_1 ()u_vars1 ()File2.obj.text2.data2.bss2table_2 ()u_vars2 ()FFT().text.text1.text2.data.data1.data2 .bss.bss1.bss2tabletable_1table_2u_vars1u_vars1u_vars2FFTFFT4 424.3 .word.byte, .long .... .text:.data:.word.bss: .bss.data.sect.text.usect () .bes.byte.field.float.int.long.space.string.pstring.xfloat.xlong.word 4 (6) .macro SPC .align .drlist.drnolist .copy.def.global.include.mlib .ref 4 (7) .break.else.elseif.endif.endloop.if.loop (8) .asg.endstruct.equ.eval.label.set.sruct (9) .algebraic.emsg.end.mmregs.mmsg.newblock.sblock.version.vmsg 4 1 .bss symbol, size in words [,blocking] [, alignment] .bss .data .data .sect section name .text .text symbol .usect section name, size in words [,blocking] [,alignment flag] .bss.bss 4 472 .byte value [,, value] 88 .char value [,, value] 88 .field value [,size in bits] .float value [,, value] IEEE(32) ..xfloat value [,, value] IEEE(32) , .int value [,,value] 1616 .short value [,,value] 16.word value [,,value] 16.double value [,,value] (32) (32) , 2 .long value [,,value] 32322 .string string [,, string] 8 2

4.5.byte.int.long.xlong.float.xfloat.word.string

504.5.byte.int.long.xlong.float.xfloat.word.string .byte 0AAh0BBh .word 0CCCh .xlong 0EEEEFFFh .long 0EEEEFFFFh .int 0DDDDh .xfloat 1.99999 .float 1.99999 .string help .byte:8word 15 0 15 00,1 0 0 A A 0 0 B B .word:162 0 C C C .xlong:3223,4 0 E E E E F F F .long:3226,7 E E E E F F F F .int:168 D D D D .xfloat:(32) 9,A 3 F F F F F A C .float:(32) C,D 3 F F F F F A C .string:8heE,F 0 0 6 8 0 0 6 5lp10,11 0 0 6 C 0 0 7 04 514-6 .field4 000000 6000 .field 3, 35 000000 6400 .field 8, 66 000000 6440 .field 16, 57 000001 0123 .field 01234h,20 000002 40008 000003 0000 .field 01234h,32 000004 1234 .fieldSPC

.fieldSPC3. SPC .align.even .align [size in words] (SPC)11282 .even SPC() .align 24 (1) .align20~216 2 1SPC 2SPC/ 128SPC .align(2) .even.align 24 3. SPC 54.align20~216 2 1SPC 2SPC/ 128SPC .align4 3. SPC 55 .align .field 2,3 .field 11,8 .align 2 .string Errorcnt .align .byte 4 ; 2 ; 4160h ; ,SPC=02h ; ; ,SPC=80h ; ,804h4 564 1 000000 4000 .field 2,3 2 000000 4160 .field 11,8 3 (.even) .align 2 4 000002 0045 .string Errorcnt 000003 0072 000004 0072 000005 006f 000006 0072 000007 0063 000008 006e 000009 0074 5 .align 6 000080 0004 .byte 4 000000SPC4000000000SPC4160000002SPC 000002SPC0045000003SPC0072000004SPC0072000005SPC006F000006SPC0072000007SPC0063000008SPC006E000009SPC0074000080SPC 000080SPC0040100 0000 0000 00000100 0001 0110 000057 .4. .drnolist .drlist .drnolist .fclist false conditional code block listing .fcnolist .length page length .list .nolist .mlist .mnolist .option {BLMRTWX} {B|L|T|W}limits the listing of .byte,.long, .string, .word directives to one line.{R}resets the B, M, T, and W options.{M}turns off macro expansions in listing.{X}

produces a symbol cross-reference listing. (You can also obtain across-reference listing by invoking the assembler with the -x option.)4. 59 .nolist .mlist .mnolist .option {BLMRTWX} .page .sslist .ssnolist .titlestring .width page width 4. 605. .copy []filename[] .def symbol1 [, ... , symboln] .global symbol1 [, ... , symboln].include []filename[].ref symbol1 [, ... , symboln]6. .macro.mlib []filename[].mexit goto .endm.endm.var : 4 3 , ()()4 6. 1). .include.copy .mlib 4 644 macname .macro [parameter 1][, , parameter n] [.mexit] .endm macname: .macro: parameters: : : .mexit: .endm .endm: 1). 654 *macname .macro [parameter 1][, , parameter n] [.mexit] .endm 1). 662). [label][:] macname [parameter 1][parameter n] 4 673). ,.mnolist4 68 4 6. 694-7 1 * add32 * ADDRP = P1 + P2 + P33 add3 .macro P1, P2, P3, ADDRPadd34 LD P1, A5 ADD P2, A6 ADD P3, A7 STL A, ADDRP8 .endm910 .global abc, def, ghi, adr1112 000000 add3 abc, def, ghi, adr4 4 1 000000 1000!LD abc, A 1 000001 0000! ADD def, A 1 000002 0000! ADD ghi, A 1 000003 8000! STLA, adr3~8add34P1, P2, P3, ADDRPADDRP = P1 + P2 + P312add34abc, def, ghi, adr124 Nesting Level NumberThe assembler may precede a line with a number; the number indicates the nesting level of macro expansions or loop blocks. 1 000000 1000!LD abc, A 1 000001 0000! ADD def, A 1 000002 0000! ADD ghi, A 1 000003 8000! STLA, adr! undefined external reference .text relocatable internal reference .data relocatable+ .sect relocatable- .bss, .usect relocatable% complex relocation expression4 relocation type1: LD Smem, dst

1: ADD Smem, src

1: STL src, Smem

7. (1) .if/.elseif/.else/.endif, (2) .loop/.break/.endloop .if well-defined expression .if .elseif well-defined expression .if.elseif .else well-defined expression .if, .endif .loop [well-defined expression].break [well-defined expression] .break .endloop .endloop 7. 74 8. .asg []character string [], substitution symbol.eval well-defined expression, substitution symbol.equINDEX .equ 100.set INDEX .set 100.struct.endstructC.tag.tag8. .label symbol.struct C.endstruct .unionCunion.endunionunion.tagC4-8 .struct.endstructtype .struct X .intY .intT_LEN.endstructCOORD .tag type COORD ADD COORD.Y, A .bss COORD, T_LEN 4 .union/.endunion.union.tagunionunion.tag8. 78unionunionunion 4 8. 794-9 .union/.endunion .datas2_tag .struct ; .union ;union .struct ;unionh1 .half ;h1, h2w1h2 .uhalf .endstructw1 .word ;union .endunionw2 .word ;s2_len .endstructXYZ .tag s2_tag .bss XYZ, s2_len ;ADD XYZ.h2, A .textADD @(XYZ.h2),A 9 .end .far_mode .mmregs .mmregs.set .newblock .version [value] C54x .emsg string .mmsg string .wmsg string 814 .newblock $nname? .newblock 9 824 3 .emsg .wmsg.emsg .mmsg.emsg.wmsg9 834.4 C54x CPUAssembly Language Instructions Assembler DirectivesMacro DirectivesC54x 4 4.4.1 C54x4 [][:] [] [; ]4-10 x .set 200H ; x200HBegin: STM #xAR1 ; 200HAR1 STL A, *AR1 AAR1 4 85 (*) Tab4 \ 4 1. (Label Field) 32(A~Za~z0~9_$) 4 (1)SPC4-11 .word Start Start000040H 9 000000 10 000040 000A Start .word 0Ah37 000041 0003 000042 0007 40h4 1. (Label Field)(2) SPC label .set $$SPC(3) SPC Here000043H 000043 Here:0000430003 . word 3 4 1. (Label Field) ADDMACSTH .data.list.set. .macro.var.mexit. 2. Mnemonic Fields # *@#*@3. Operand Field STM #x, AR1 .bss X, 192ASCII4. Comment Field 4 4.4.2 1100001b1100001B216q532Q0216()1234+1234-12340B40h0B40H0xB40Dit is a string1.523e-23C- X .set 50.set 4.4.3 (Symbols)Labelsconstants substitution symbols A~Za~z0~9_$ 200 1 4 A~Za~z0~9_$ 200 1 4.4.3 (Symbols)1. Labels 2. .set.equ.struct/.tag/.endstruct -d asm500 -d name=[value]4 4.4.3 4 .newblock .sect.text.data include.include.copy include(included)4 4. 4-12$n ADDRAADDRBADDRC Label1 LD ADDRA,A SUB ADDRB,A BC $1,ALT LD ADDRB,A B $2 $1 LD ADDRA,A $2 ADD ADDRC,A .newblock BC $1,ALT STL A,ADDRC $1 NOP ADDRAA B 0$1 ADDRBA $2 $1ADDRAA $2ADDRC ; $1, 0$1 ACC16ADDRC .newblock .newblock BC $1,ALT 0$1 STL A,ADDRC ACC16ADDRC $1 NOP

$1 994.4.4 Expressions 4 1. Operators (4.10) C54xC 2. Conditional Expressions = = = != > = < = > < 1004 3.(Well-Defined Expressions) (absolute) 4-14 .data label1 .word 0 .word 1 .word 2 label2 .word 3 X .set 50h goodsym1 .set l00h + X goodsym2 .set $ goodsym3 .set label1 goodsym4 .set label2-label1; 160,1,2 label1; 3label2; ; ; X; $SPC3. ; 4 3. 2 Expressions that cannot be reduced to contain only one relocatable symbol are illegal.4.11 ABA+BA-B* * AB Symbols or registers that have been defined as global with the .global directive are referred to as external.4-15 4 .global extern_1 intern_1.word D LAB1 .set 2 intern_2.word 3 LD #LAB1+((5+4)*3),A LD #LAB1+3+(4*7),A .global extern_1 intern_1.word D LAB1 .set 2 intern_2.word 3 LD #LAB1+((5+4)*3),A LD #LAB1+3+(4*7),A; ; ; LAB1=2 ; ; LAB1,A=29 ; LAB1A=33 1064-16 LD extern_1-10B LD 10-extern_1B LD -(intern_1)B LD extern_1/10B LD intern_1 + extern_1B += 4 107 LD intern_1 - intern_2 + extern_1B LD intern_1 + intern_2 + extern_1B LD intern_1 + extern_1 - intern_2B-= ++=+=4 4-17 1084.5 4.5.1 DSP 4 3 1. 4 4-19 STM #00a8H, PMST STM #0000H, SWWSRSTM#Data_0, AR2STM#Data_1, AR32.C54x CPUABCTCOVAOVB 4 2 TMS320C54x CMPS

1122.4-21 data0data1data2data2 1 CMPS data0 .set 200 data1 .set 100 .bss data2, 1 .text LD #data0, 16, a ;data0A31~16 Add #data1, A; data0A15~10 CMPS A, data2 ; .end4

2CMPR data0 .set 200data1 .set 100 .bss data2, 1 .text STM #data0, AR0; STM #data1, AR3 CMPR 0, AR3 BC d1, NTC BD d2 NOP NOP d1: CMPR 1, AR3 BC d2, TC MVMD AR3, data2 BD loop NOP NOP d2: MVMD AR0, data2 loop: NOP .endCMPR CC, ARxIf (cond), Then 1TCElse 0TC

3. 44 STM #99AR1 Loop: RPT #999 NOP BANZ loop, *AR1- 4-23 3.

.bss a, 6 .bss x, 6 .bss y, 1Table: .word 1,2 ,3,4,5, 6 .text STM #aAR1 RPT #5 MVPD Table, *AR1+ STM #aAR3 STM #xAR4 STM #yAR7 RPTZ A #5 ;06 MAC *AR3+*AR4+A ; STL A*AR7(Xmem)(Ymem)+(src)dst(Xmem) T4-24 20ns 20ns[2+(1+1000+4)100 ]=2010400ns2ms STM #99AR12 Loop: RPT #999 1 NOP 11000 BANZ loop, *AR1- 4 2 NOP NOP NOP NOP3.4.5.2 DSP 4 C54x CCS(project) 1. 4-26 .ref _c_int00 .sect "vectors"int_RESET: BD_c_int00; _c_int00 NOP NOP .space 124*16 ;, .end4-25: ,:NMI: RETE 1 NOP NOP NOP sint17 .space 4*16 ; .....TINT0: BD _timer_isr PSHM ST0 PSHM ST1 .....DMAC5: RETEDMA5 NOP NOP NOP 2. 4 3. 4.2.34-28 test.cmdvectors.objtest.obj-otest.out-mtest.mapMEMORY{PAGE 0: EPROM:org=0xE000, len=0x100 VECS: org=0xFF80, len=0x80PAGE 1: DARAM:org=0x0080, len=0x20 SPRAM:org=0x0100, len=0x0020}SECTIONS{ .text:> EPROMPAGE 0.data:> EPROMPAGE 0.bss:> SPRAMPAGE 1.STACK:> DARAMPAGE 1.vectors:> VECS PAGE 0} 3.4 SECTIONS{.text:>EPROMPAGE 0.data:> EPROMPAGE 0.bss:>SPRAMPAGE 1.STACK :> DARAMPAGE 1.vectors :> VECS PAGE 0} MEMORY{ PAGE 0: EPROM:org=0xE000, len=0x100 VECS: org=0xFF80, len=0x80 PAGE 1: DARAM:org=0x0080, len=0x20 SPRAM:org=0x0100, len=0x0020}4. 4 1C.c.asm2CC.c.asm3CTMS320C54x Code Composer Studio Tutorial.pdfspru327c2000TI34 (.obj) (.lst) SPC 4 2 **********************************3 ** .data **4 **********************************5 0000 .data6 0000 0011 coeff .word 011h,022h,033h 0001 0022 0002 00337 **********************************8 ** .bss **9 **********************************10 0000 .bss buffer1011 **********************************12 ** .bss.data **13 **********************************14 0003 0123 prt .word 0123h ASM500 asm500 [input file [object file [listing file]]] [-options]4 input file: .asmobject file: OBJ,.objlisting file: ,.lstoptions:

-cabcABC

4.12 C54x -@-@filename(), this-file.asm-a-a-c-d-d name[=value] name.set[=value]-f.asm-gCOFF-h, -help, -?-hc-hi34.123 -i.copy.include.mlib -l(l)-mf-mg-q-r, -r[num]num-pw-u-u name-d-v-v value541,542,543,545,5451p,5461p,548,549-s-x4 .out4 lnk500 [-options] filename1 filenamen.obj 4-13 C54x 4 -a -ar0 -e global_symbol -f fill_value16(fill_value) -i dirdir() -l filename -m filename.mapfilename -o filenamea.out -r4 .outCCS 5 -l.lst(4-29 4-2 )-m.map(4-30)4 .outCCS 5 -l.lst(4-29)-m.map(4-30)

4 .outCCS 5 -l.lst(4-29)-m.map(4-30)

4.5.3 DSP 4 1. .C54x 4.5.3 DSP 4 2. Q CPU QQQ0Q1QiQ15D0D1DiD15 4.14 Q Q--Q15D15015-1~0.99996952 -15Q14D14114-2~1.99993902 -14Q13D13213-4~3.99987792 -13Q12D12312-8~7.99975592 -12Q11D11411-16~15.99951172 -11Q10D10510-32~31.99902342 -10Q9D969-64~63.998043752 -9Q8D878-128~127.99609382 -8Q7D787-256~255.99218752 -7Q6D696-512~511.98043752 -6Q5D5105-1024~1023.968752 -5Q4D4114-2048~2047.93752 -4Q3D3123-4096~4095.8752 -3Q2D2132-8192~8191.752 -2Q1D1141-16384~16383.52 -1Q0D0150-32768~367672 04 2. Q 4.5.3 DSP

3. Q QDSPQ Q 4.5.3 DSP 4. Q0Q15 4.5.3 DSP Q 114-35 0.5+0.89=1.39Q15Q15Q14 .bss x,2 .bss sum,1table: .word 5*16384/10 ; 0.5Q14 .word 89*16384/100 ; 0.89Q14 .textSTM#x,AR2RPT#1MVPD table,*AR2+LD x,AADDx+1,ASTLA,*AR22 1616=32 Q0Q0=Q0D0 Q15Q15=Q30D30D31D30 QiQj = Qi+j 2 4-37 7.621.84 = 14.0208 .bssx,2 .bssprod,2table: .word 762*4096/100 7.62Q12 .word 184*16384/1001.84Q14 .text STM #x,AR2RPT #1MVPD table,*AR2+STM #x,AR4STM #x+1,AR5MPY *AR4,*AR5,A DST A,prodQ2632 164.5.4 4 C/C++C MMR PMST 1.MMR(IMR,IFR,TRN,REA,RSA,XPC): AGAHALBGBHBL ST0ST1 PMST AR0~AR7 SP T BRC BK

1.MMR4-38 STLMAAR1AAR1STM#8AR28AR2 MMR1.MMR 1NOPAR2

2.4 4-40 LD*AR2BXC2BEQ B=02

2.4 2NOP

3.PMST (PMST)PMST 4-41 DROM3NOP ORM #8h, PMSTDROM = 1DP=0 NOP NOP NOP LD *AR3, AROM 3.PMST 4 4-42 MP/MC2NOP STLMA, PMSTMP/MC=1 NOP NOP CALLDoffchip offchip STM#k, AR14-15MMR1NOP2 4-43 RSBX SXM SXMADD *AR1(10h)A ;((AR1+10h))+(A)A RSBX SXMNOPADD *AR1(10h)A NOP ADD *AR1ANOP4.24.4, 4.54.8, 4.11, 4.18,4.19lnk500 a.obj b.obj -m prog.map -o prog.outa.objb.obj-m prog.map-o prog.out