Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

14
Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3 Department of Computer Science and Software Engineering University of Wisconsin-Platteville

description

Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3. Department of Computer Science and Software Engineering University of Wisconsin-Platteville. Assembly files (.asm). We will be using the nasm assembler Program Components Comments Labels Directives Data - PowerPoint PPT Presentation

Transcript of Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Page 1: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Computer Architecture and Operating Systems

CS 3230 :Assembly SectionLecture 3

Department of Computer Science and Software Engineering University of Wisconsin-Platteville

Page 2: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Assembly files (.asm) We will be using the nasm assembler Program Components

Comments Labels Directives Data Main subroutine, which is a global one Instructions: generally the format of an NASM instruction is

as follows

Label       Instruction    Operands     ;  Comment

Page 3: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Program Organization for CS3230 Generally, we will be using a C driver program

called driver.c to run our assembler routines Why driver.c ?

1. lets the C system set up the program to run correctly

2. All the segments and their corresponding segment registers will be initialized by C

3. The C library will also be available to be used by the assembly code

Page 4: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Program Organization : Skeleton file

; file: skel.asm; This file is a skeleton that can be used to start assembly programs.

%include "asm_io.inc"segment .data; initialized data is put in the data segment here

segment .bss; uninitialized data is put in the bss segment

segment .text global asm_mainasm_main: enter 0,0 ; setup routine pusha

; code is put in the text segment. Do not modify the code before; or after this comment.

popa mov eax, 0 ; return back to C leave ret

Page 5: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Comments Comments are denoted by semi-colons (;).

Everything from the semi-colon to the end of the line is ignored.

Page 6: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Labels Labels identify

The start of subroutines or locations to jump to in your code Variables are declared as labels pointing to specific memory

locations

Labels are local to your file/module unless you direct otherwise

The colon identifies a label (an address!) Example: NewLabel: To define a label as global we say

global NewLabel

Page 7: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Directives Direct the assembler to do something

Define constants Define memory to store data into Group memory into segments Conditionally include source code Include other files

Page 8: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Equ and % define directives The equ directive

Used to define named constants used in your assembly program

Syntax: symbol equ value Similar to C’s const directive :(const int symbol = value)

The %define directive Similar to C’s #define directive (#define name value) Most commonly used to define constant macros: %define SIZE 100

mov eax, SIZE Macros can be redefined, and can be more complex than

simple constants

Page 9: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Data directives Used in data segments to define room for memory There are two ways memory can be reserved

Defines room for data without initial value ( segment .bss)

• Using : RESX directive Defines room for data with initial value

(segment .data)• Using : DX directive

Note: X is replaced with a letter that determines the size of the object as following

Page 10: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Example: Data Directives L1 db 0 ;byte labeled L1 w/ initial value 0 decimalL2 dw 1000 ;word labeled L2 w/ initial value 1000 decimalL3 db 110101b;byte labeled L3 w/ initial value 110101 binary( 53)L4 db 12h ;byte labeled L4 w/ initial value 12 hex (18 decimal)L5 db 17o ;byte labeled L5 w/ initial value 17 octal (15 decimal)L6 dd 1A92h ;doubleword labeled L6 initialized to hex 1A92L7 resb 1 ;1 uninitialized byteL8 db “A” ;byte initialized to ASCII of A = 65L9 resw 100 ; reserves room for 100 words

Note: Double quotes and single quotes are treated the same

Page 11: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

More examples Sequences of memory may also be defined.

L10 db 0, 1, 2, 3 ; defines 4 bytes

L11 db "w", "o", "r", ’d’, 0 ; defines a C string = "word"

L12 db ’word’, 0 ; same as L11

For large sequences, NASM’s TIMES directive is often useful.

L13 times 100 db 0 ; equivalent to 100 (db 0)’s

Page 12: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Debugging There are four debugging routines named:

dump_regs: this macro prints out the values of the registers (in hexadecimal)

• Syntax : dump_regs X• X: It takes a single integer argument that is printed out as

well. This can be used to distinguish the output of different dump regs commands

dump_mem: this macro prints out the values of a region of memory (in hexadecimal) and also as ASCII characters

• Syntax: dump_mem X, label , Y• X: This can be used to distinguish the output of different

dump_mem commands• Label: the starting address of displayed region • Y: the number of 16-byte paragraphs to display after the

starting address

Page 13: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Debugging (cont.) There are four debugging routines named:

dump_stack: this macro prints out the values on the CPU stack

• Syntax: dump_stack X, Y , Z• X: This can be used to distinguish the output of different

dump_stack commands• Y: the number of double words to display below the

address that the EBP register holds• Z: the number of double words to display above the

address in EBP dump_math: this macro prints out the values of the

registers of the math coprocessor• Syntax: dump_math X• X: This can be used to distinguish the output of different

dump_math commands

Page 14: Computer Architecture and Operating Systems CS 3230 :Assembly Section Lecture 3

Assembling the code Use PuTTy and WinSCP application to use nasm

commands To edit your assembly file

nano myfile.asm (or vi or emacs or joe or WinSCP editor )

To assemble your program

nasm –f elf myfile.asm

To create an executable program

gcc –m32 myfile.o driver.c asm_io.o

From the above command, you will get a new prompt and a file a.out or a.exe will be created

To run the program, give the command

./a.out or ./a.exe