Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
IKI10230 Pengantar Organisasi Komputer Kuliah no. A1: AVR Assembler & Studio Sumber: 1. AVR Assembler. 2. AVR Studio 28 Februari 2003 Bobby Nazief ([email protected]) Qonita Shahab ([email protected]) bahan kuliah: http://www.cs.ui.ac.id/kuliah/iki10230/ 1 Why RISC? ° Reduced Instruction Set Computing (RISC) ° Hanya terbatas jenis/jumlah instruksi untuk operasi dasar • Arithmetic, load/store, branches and jumps • Instruksi umum dan sering digunakan: sederhana dan cepat Top 10 80x86 Instructions Rank Instruction Integer Average Percent total executed 1 load 22% 2 conditional branch 20% 3 compare 16% 4 store 12% 5 add 8% 6 and 6% 7 sub 5% 8 move register-register 4% 9 call 1% 10 return 1% Total 96% Simple instructions dominate instruction frequency make common case: simple and fast 17 2 Why AVR 8-bit RISC ? ° RISC: kinerja (performance) komputer meningkat • Pilihan teknologi rancangan prosesor modern (PowerPC, Sun Sparc, MIPS dll) • Fast with reduced complexity! ° Atmel AVR 8-bit RISC • Sederhana (bentuk minimalis dari RISC): mudah dipelajari ! • Target operasi: microcontroller (embedded systems) - Berbagai aplikasi dan peralatan elektronis (ponsel, home appliances, mobil, dll) - Controller untuk pabrik, proses kimia, mesin dll. - “Vast opportunity”: karir, wira-usaha dll. (more embedded computers than PCs!!!) ° Why not X86 (Intel, mikroprosesor paling populer) • Terlalu rumit (complex): operasi beragam dan sangat banyak variasinya • Akses langsung ke register di PC kita? 3 AVR Assembler 4 Bahasa Rakitan AVR ° Komputer (rangkaian dijital) hanya mengerti instruksi mesin ° Assembly code: representasi tekstual (mudah dibaca oleh manusia) dari instruksi mesin • Setiap instruksi mesin (instruction sets) terdapat korespondensi assembly code • Kode tersebut: simbol dari operasi instruksi mesin • Bahasa rakitan (assembly language): cara pemrograman menggunakan assembly code (terdapat banyak bantuan untuk memudahkan penulisan program). ° Assembler: sebuah program yang menerjemahkan assembly code ke instruksi mesin. 5 Contoh Program ldi r16,0x8 ldi r17,0x9 add r16,r17 ldi r18,0xff sub r18,r16 com r16 ; r16 = 0x8 + 0x9 = 0x11 ; r18 = 0xff - 0x11 = 0xee ; r16 = 0xee nop 6 AVR Assembler: Kompilasi Program 7 Contoh Program.LST 000000 e008 ldi r16,0x8 000001 e019 ldi r17,0x9 000002 0f01 add r16,r17 000003 ef2f ldi r18,0xff 000004 1b20 sub r18,r16 000005 9500 com r16 000006 0000 nop 8 Pemrograman Bahasa Rakitan AVR 9 Instruksi ° Bahasa Rakitan: setiap “statement” disebut instruksi, merupakan eksekusi/operasi perintah instruksi mesin • Jadi setiap baris pada bahasa rakitan: berisi 1 (satu) perintah saja (bandingkan dengan HLL!) 10 Syntax ° 1 instruksi per baris ° Format setiap baris instruksi: 1. [label:] directive 2. [label:] instruction 3. komentar [operands] [operands] [komentar] [komentar] 4. baris kosong ° Komentar: ; [Text] ° Huruf besar/kecil tidak dibedakan 11 Contoh Program ;***** Subroutine Register Variables .def A =r13 .def B =r14 .def cnt2 =r15 .def cnt1 =r16 .def endL =r17 .def endH =r18 ;***** Code bubble: mov mov mov i_loop: ld ld cp brlo st std L1: dec brne dec brne ret ZL,endL ZH,endH cnt2,cnt1 A,Z B,-Z A,B L1 Z,A Z+1,B cnt2 i_loop cnt1 bubble ;first value to be compared ;second value to be compared ;inner loop counter ;outer loop counter ;end of data array low address ;end of data array high address ;init Z pointer ;counter2 <- counter1 ;get first byte, A (n) ;decrement Z and get second byte, B (n-1) ;compare A with B ;if A not lower ;store swapped ;end inner loop ;end outer loop 12 Directives 13 Peta Memori Memori Program Memori Data ° Program dan data ditempatkan pada memori yang pengalamatannya terpisah ° Memori data mencakup Register, I/O, SRAM Internal, SRAM Eksternal 14 CSEG, DSEG, ESEG ° The CSEG directive defines the start of a Code Segment ° An Assembler file can consist of several Code Segments, which are concatenated into one Code Segment when assembled ° The default segment type is Code ° Syntax: .CSEG ° Example: .DSEG vartab: ; Start data segment .BYTE 4 .CSEG const: ; Reserve 4 bytes in SRAM ; Start code segment .DW 2 ; Write 0x0002 in prog.mem. mov r1,r0 ; Do something 15 ORG ° The ORG directive sets the location counter (within memory segment) to an absolute value (as the parameter) ° If the directive is preceded by a label (on the same source code line), the label will be given the value of the parameter ° The default values of the Code and EEPROM location counters are zero, whereas the default value of the SRAM location counter is 32 when the assembling is started ° Syntax: .ORG expression ° Example: .DSEG .ORG variable: .ESEG .ORG eevar: .CSEG .ORG 0x20 .DW 0xfeff ; Start data segment ; Set SRAM address to hex 67 ; Reserve a byte at SRAM adr.67H ; Start EEPROM Segment ; Set EEPROM location counter ; Initialize one word 0x10 mov r0,r1 ; Set Program Counter to hex 10 ; Do something 0x67 .BYTE 1 16 BYTE ° The BYTE directive reserves memory resources in the SRAM ° In order to be able to refer to the reserved location, the BYTE directive should be preceded by a label ° The directive can only be used within a Data Segment ° Syntax: LABEL: .BYTE expression ° Example: .DSEG var1: .BYTE 1 ; reserve 1 byte to var1 table: .BYTE tab_size ; reserve tab_size bytes ldi r30,low(var1) ; Load Z register low ldi r31,high(var1) ; Load Z register high ld r1,Z ; Load VAR1 into register 1 .CSEG 17 DB, DW ° The DB directive reserves memory resources in the program memory (CSEG) or the EEPROM (ESEG) memory ° The DB directive should be preceded by a label ° The DB directive takes a list of expressions, and must contain at least one expression ° Each expression must evaluate to a number between -128 (2’s complement) and 255 ° Syntax: LABEL: .DB expressionlist ° Example: .CSEG consts: .DB 0, 255, 0b01010101, -128, 0xaa .ESEG eeconst: .DB 0xff 18 DEF ° The DEF directive allows the registers to be referred to through symbols ° A defined symbol can be used in the rest of the program to refer to the register it is assigned to ° A register can have several symbolic names attached to it ° A symbol can be redefined later in the program ° Syntax: .DEF Symbol=Register ° Example: .DEF .DEF .CSEG temp=R16 ior=R0 ldi temp,0xf0 in ior,0x3f ; Load 0xf0 into temp register ; Read SREG into ior register eor temp,ior ; Exclusive or temp and ior 19 EQU ° The EQU directive assigns a value to a label ° This label can then be used in later expressions ° A label assigned to a value by the EQU directive is a constant and can not be changed or redefined ° Syntax: .EQU label = expression ° Example: .EQU .EQU io_offset = 0x23 porta = io_offset + 2 .CSEG clr r2 out porta,r2 ; Start code segment ; Clear register 2 ; Write to Port A 20 SET ° The SET directive assigns a value to a label ° This label can then be used in later expressions ° A label assigned to a value by the SET directive can be changed later in the program ° Syntax: .SET label = expression ° Example: .SET .SET io_offset = 0x23 porta = io_offset + 2 .CSEG clr r2 out porta,r2 ; Start code segment ; Clear register 2 ; Write to Port A 21 EXIT ° The EXIT directive tells the Assembler to stop assembling the file ° Normally, the Assembler runs until end of file (EOF) ° Syntax: .EXIT ° Example: .EXIT ; Exit this file 22 MACRO, ENDMACRO ° The MACRO directive tells the Assembler that this is the start of a Macro ° A Macro can take up to 10 parameters (referred to as @0-@9 within the Macro definition) ° The Macro definition is terminated by an ENDMACRO directive ° Syntax: .MACRO macroname .ENDMACRO ° Example: .MACRO SUBI16 ; Start macro definition subi @1,low(@0) ; Subtract low byte sbci @2,high(@0) ; Subtract high byte .ENDMACRO ; End macro definition .CSEG ; Start code segment SUBI16 0x1234,r16,r17 ; Sub.0x1234 from r17:r16 23 Expressions: Operands, Operators, Functions 24 Operands ° Reminder: 1. [label:] 2. [label:] directive instruction [operands] [operands] [komentar] [komentar] ° User defined labels which are given the value of the location counter at the place they appear ° User defined variables defined by the SET directive ° User defined constants defined by the EQU directive ° Integer constants: constants can be given in several formats, including a) Decimal (default): 10, 255 b) Hexadecimal (two notations): 0x0a, $0a, 0xff, $ff c) Binary: 0b00001010, 0b11111111 ° PC (program counter) - the current value of the Program memory location counter 25 Unary Operators ° Logical Not Symbol: ! • returns 1 if the expression was zero, and returns 0 if the expression was nonzero ldi r16,!0xf0 ; Load r16 with 0x00 ° Bitwise Not Symbol: ~ • returns the input expression with all bits inverted ldi r16,~0xf0 ; Load r16 with 0x0f ° Unary Minus Symbol: • returns the arithmetic negation of an expression ldi r16,-2 ; Load -2(0xfe) in r16 26 Binary Operators ° Multiplication Symbol: * • returns the product of two expressions ldi r30,label*2 ; Load r30 with label*2 ° Division Symbol: / • returns the integer quotient of the left expression divided by the right expression ldi r30,label/2 ; Load r30 with label/2 ° Addition Symbol: + • returns the sum of two expressions ldi r30,c1+c2 ; Load r30 with c1+c2 ° Subtraction Symbol: • returns the left expression minus the right expression ldi r17,c1-c2 ;Load r17 with c1-c2 27 Binary Operators ° Shift left Symbol: << • returns the left expression shifted left a number of times given by the right expression Ldi r17,1<<bitmask ;Load r17 with 1 shifted left bitmask times ° Shift right Symbol: >> • returns the left expression shifted right a number of times given by the right expression. ldi r17,c1>>c2 ;Load r17 with c1 shifted right c2 times ° Less than Symbol: < • returns 1 if the signed expression to the left is Less than the signed expression to the right, 0 otherwise ori r18,bitmask*(c1<c2)+1 ;Or r18 with an expression ° Less or Equal Symbol: <= • returns 1 if the signed expression to the left is Less than or Equal to the signed expression to the right, 0 otherwise ori r18,bitmask*(c1<=c2)+1 ;Or r18 with an expression 28 Binary Operators ° Greater than Symbol: > • returns 1 if the signed expression to the left is Greater than the signed expression to the right, 0 otherwise ori r18,bitmask*(c1>c2)+1 ;Or r18 with an expression ° Greater or Equal Symbol: >= • returns 1 if the signed expression to the left isGreater than or Equal to the signed expression to the right, 0 otherwise ori r18,bitmask*(c1>=c2)+1 ;Or r18 with an expression ° Equal Symbol: == • returns 1 if the signed expression to the left is Equal to the signed expression to the right, 0 otherwise andi r19,bitmask*(c1==c2)+1;And r19 with an expression ° Not Equal Symbol: != • returns 1 if the signed expression to the left is Not Equal to the signed expression to the right, 0 otherwise .SET flag=(c1!=c2) ;Set flag to 1 or 0 29 Binary Operators ° Bitwise And Symbol: & • returns the bitwise And between two expressions ldi r18,High(c1&c2) ;Load r18 with an expression ° Bitwise Xor Symbol: ^ • returns the bitwise Exclusive Or between two expressions ldi r18,Low(c1^c2) ;Load r18 with an expression ° Bitwise Or Symbol: | • returns the bitwise Or between two expressions ldi r18,Low(c1|c2) ;Load r18 with an expression ° Logical And Symbol: && • returns 1 if the expressions are both nonzero, 0 otherwise ldi r18,Low(c1&&c2) ;Load r18 with an expression ° Logical Or Symbol: || • returns 1 if one or both of the expressions are nonzero, 0 otherwise ldi r18,Low(c1||c2) ;Load r18 with an expression 30 Functions ° LOW(expression) returns the low byte of an expression ° HIGH(expression) returns the second byte of an expression ° BYTE2(expression) is the same function as HIGH ° BYTE3(expression) returns the third byte of an expression ° BYTE4(expression) returns the fourth byte of an expression ° LWRD(expression) returns bits 0-15 of an expression ° HWRD(expression) returns bits 16-31 of an expression ° PAGE(expression) returns bits 16-21 of an expression ° EXP2(expression) returns 2 to the power of expression ° LOG2(expression) returns the integer part of log2(expression) 31 AVR Studio 32 AVR Studio: Eksekusi Program 33 Inspeksi Status Prosesor ° Status Prosesor dapat dilihat pada window “Processor”: 34 Inspeksi Isi Register ° Isi Register dapat dilihat pada window “Register”: 35 Inspeksi Isi Memori ° Isi Memori dapat dilihat pada window “Memory”: 36