Introduction To Assembly Language
Introduction To Assembly Language
Introduction To Assembly Language
Assembly Language
COE 205
Computer Organization and Assembly Language
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 2
Constants
Integer Constants
Examples: –10, 42d, 10001101b, 0FF3Ah, 777o
Radix: b = binary, d = decimal, h = hexadecimal, and o = octal
If no radix is given, the integer constant is decimal
A hexadecimal beginning with a letter must have a leading 0
One operand
inc eax ; increment register eax
call Clrscr ; call procedure Clrscr
jmp L1 ; jump to instruction with label L1
Two operands
add ebx, ecx ; register ebx = ebx + ecx
sub var1, 25 ; memory variable var1 = var1 - 25
Three operands
imul eax,ebx,5 ; register eax = ebx * 5
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 6
Comments
Comments are very important!
Explain the program's purpose
When it was written, revised, and by whom
Explain data used in the program
Explain instruction sequences and algorithms used
Application-specific explanations
Single-line comments
Begin with a semicolon ; and terminate at end of line
Multi-line comments
Begin with COMMENT directive and a chosen character
End with the same chosen character
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 7
Next . . .
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 8
Flat Memory Program Template
TITLE Flat Memory Program Template (Template.asm)
; Program Description:
; Author: Creation Date:
; Modified by: Modification Date:
.686
.MODEL FLAT, STDCALL
.STACK
INCLUDE Irvine32.inc
.DATA
; (insert variables here)
.CODE
main PROC
; (insert executable instructions here)
exit
main ENDP
; (insert additional procedures here)
END main
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 9
TITLE and .MODEL Directives
TITLE line (optional)
Contains a brief heading of the program and the disk file name
.MODEL directive
Specifies the memory configuration
For our purposes, the FLAT memory model will be used
Linear 32-bit address space (no segmentation)
STDCALL directive tells the assembler to use …
Standard conventions for names and procedure calls
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 11
INCLUDE, PROC, ENDP, and END
INCLUDE directive
Causes the assembler to include code from another file
We will include Irvine32.inc provided by the author Kip Irvine
Declares procedures implemented in the Irvine32.lib library
To use this library, you should link Irvine32.lib to your programs
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 13
Adding and Subtracting Integers
TITLE Add and Subtract (AddSub.asm)
; This program adds and subtracts 32-bit integers.
.686
.MODEL FLAT, STDCALL
.STACK
INCLUDE Irvine32.inc
.CODE
main PROC
mov eax,10000h ; EAX = 10000h
add eax,40000h ; EAX = 50000h
sub eax,20000h ; EAX = 30000h
call DumpRegs ; display registers
exit
main ENDP
END main
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 14
Example of Console Output
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 15
Suggested Coding Standards
Some approaches to capitalization
Capitalize nothing
Capitalize everything
Capitalize all reserved words, mnemonics and register names
Capitalize only directives and operators
MASM is NOT case sensitive: does not matter what case is used
Other suggestions
Use meaningful identifier names
Use blank lines between procedures
Use indentation and spacing to align instructions and comments
Use tabs to indent instructions, but do not indent labels
Align the comments that appear after the instructions
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 16
Understanding Program Termination
The exit at the end of main procedure is a macro
Defined in Irvine32.inc
Expanded into a call to ExitProcess that terminates the program
ExitProcess function is defined in the kernel32 library
We can replace exit with the following:
push 0 ; push parameter 0 on stack
call ExitProcess ; to terminate program
You can also replace exit with: INVOKE ExitProcess, 0
PROTO directive (Prototypes)
Declares a procedure used by a program and defined elsewhere
ExitProcess PROTO, ExitCode:DWORD
Specifies the parameters and types of a given procedure
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 17
Modified Program
TITLE Add and Subtract (AddSubAlt.asm)
; This program adds and subtracts 32-bit integers
.686
.MODEL flat,stdcall
.STACK 4096
.code
main PROC
mov eax,10000h ; EAX = 10000h
add eax,40000h ; EAX = 50000h
sub eax,20000h ; EAX = 30000h
push 0
call ExitProcess ; to terminate program
main ENDP
END main
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 18
Next . . .
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 19
Assemble-Link-Debug Cycle
Editor
Write new (.asm) programs Edit
Debugger: WINDBG.exe
Assemble
Trace program execution
Either step-by-step, or library.lib prog.obj prog.lst
Use breakpoints
View Link
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 22
Next . . .
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 23
Intrinsic Data Types
BYTE, SBYTE REAL4
8-bit unsigned integer IEEE single-precision float
8-bit signed integer Occupies 4 bytes
WORD, SWORD REAL8
16-bit unsigned integer IEEE double-precision
16-bit signed integer Occupies 8 bytes
DWORD, SDWORD REAL10
32-bit unsigned integer IEEE extended-precision
32-bit signed integer Occupies 10 bytes
QWORD, TBYTE
64-bit integer
80-bit integer
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 24
Data Definition Statement
Sets aside storage in memory for a variable
May optionally assign a name (label) to the data
Syntax:
val1 BYTE 10
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 25
Defining BYTE and SBYTE Data
Each of the following defines a single byte of storage:
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 26
Defining Byte Arrays
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 27
Defining Strings
A string is implemented as an array of characters
For convenience, it is usually enclosed in quotation marks
It is often terminated with a NULL char (byte value = 0)
Examples:
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 28
Defining Strings – cont'd
To continue a single string across multiple lines, end
each line with a comma
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 30
Defining 16-bit and 32-bit Data
Define storage for 16-bit and 32-bit integers
Signed and Unsigned
Single or multiple initial values
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 31
QWORD, TBYTE, and REAL Data
QWORD and TBYTE
Define storage for 64-bit and 80-bit integers
Signed and Unsigned
REAL4, REAL8, and REAL10
Defining storage for 32-bit, 64-bit, and 80-bit floating-point data
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 32
Symbol Table
Assembler builds a symbol table
So we can refer to the allocated storage space by name
Assembler keeps track of each name and its offset
Offset of a variable is relative to the address of the first variable
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 34
Adding Variables to AddSub
TITLE Add and Subtract, Version 2 (AddSub2.asm)
.686
.MODEL FLAT, STDCALL
.STACK
INCLUDE Irvine32.inc
.DATA
val1 DWORD 10000h
val2 DWORD 40000h
val3 DWORD 20000h
result DWORD ?
.CODE
main PROC
mov eax,val1 ; start with 10000h
add eax,val2 ; add 40000h
sub eax,val3 ; subtract 20000h
mov result,eax ; store the result (30000h)
call DumpRegs ; display the registers
exit
main ENDP
END main
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 35
Next . . .
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 36
Defining Symbolic Constants
Symbolic Constant
Just a name used in the assembly language program
Processed by the assembler pure text substitution
Assembler does NOT allocate memory for symbolic constants
Assembler provides three directives:
= directive
EQU directive
TEXTEQU directive
Defining constants has two advantages:
Improves program readability
Helps in software maintenance: changes are done in one place
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 37
Equal-Sign Directive
Name = Expression
Name is called a symbolic constant
Expression is an integer constant expression
Good programming style to use symbols
COUNT = 500 ; NOT a variable (NO memory allocation)
. . .
mov eax, COUNT ; mov eax, 500
. . .
COUNT = 600 ; Processed by the assembler
. . .
mov ebx, COUNT ; mov ebx, 600
Name EQU <text> Any text may appear within < …>
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 41
OFFSET Operator
OFFSET = address of a variable within its segment
In FLAT memory, one address space is used for code and data
OFFSET = linear address of a variable (32-bit number)
.DATA
bVal BYTE ? ; Assume bVal is at 00404000h
wVal WORD ?
dVal DWORD ?
dVal2 DWORD ?
.CODE
mov esi, OFFSET bVal ; ESI = 00404000h
mov esi, OFFSET wVal ; ESI = 00404001h
mov esi, OFFSET dVal ; ESI = 00404003h
mov esi, OFFSET dVal2 ; ESI = 00404007h
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 42
ALIGN Directive
ALIGN directive aligns a variable in memory
Syntax: ALIGN bound
Where bound can be 1, 2, 4, or 16
Address of a variable should be a multiple of bound
Assembler inserts empty bytes to enforce alignment
.DATA ; Assume that
b1 BYTE ? ; Address of b1 = 00404000h
ALIGN 2 ; Skip one byte
w1 WORD ? ; Address of w1 = 00404002h
w2 WORD ? ; Address of w2 = 00404004h 40400C d2
404008 d1
ALIGN 4 ; Skip two bytes 404004 w2
d1 DWORD ? ; Address of d1 = 00404008h 404000 b1 w1
d2 DWORD ? ; Address of d2 = 0040400Ch
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 43
TYPE Operator
TYPE operator
Size, in bytes, of a single element of a data declaration
.DATA
var1 BYTE ?
var2 WORD ?
var3 DWORD ?
var4 QWORD ?
.CODE
mov eax, TYPE var1 ; eax = 1
mov eax, TYPE var2 ; eax = 2
mov eax, TYPE var3 ; eax = 4
mov eax, TYPE var4 ; eax = 8
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 44
LENGTHOF Operator
LENGTHOF operator
Counts the number of elements in a single data declaration
.DATA
array1 WORD 30 DUP(?),0,0
array2 WORD 5 DUP(3 DUP(?))
array3 DWORD 1,2,3,4
digitStr BYTE "12345678",0
.code
mov ecx, LENGTHOF array1 ; ecx = 32
mov ecx, LENGTHOF array2 ; ecx = 15
mov ecx, LENGTHOF array3 ; ecx = 4
mov ecx, LENGTHOF digitStr ; ecx = 9
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 45
SIZEOF Operator
SIZEOF operator
Counts the number of bytes in a data declaration
Equivalent to multiplying LENGTHOF by TYPE
.DATA
array1 WORD 30 DUP(?),0,0
array2 WORD 5 DUP(3 DUP(?))
array3 DWORD 1,2,3,4
digitStr BYTE "12345678",0
.CODE
mov ecx, SIZEOF array1 ; ecx = 64
mov ecx, SIZEOF array2 ; ecx = 30
mov ecx, SIZEOF array3 ; ecx = 16
mov ecx, SIZEOF digitStr ; ecx = 9
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 46
Multiple Line Declarations
A data declaration spans multiple In the following example, array
lines if each line (except the last) identifies the first line WORD
ends with a comma declaration only
The LENGTHOF and SIZEOF Compare the values returned by
operators include all lines LENGTHOF and SIZEOF here to
belonging to the declaration those on the left
.DATA .DATA
array WORD 10,20, array WORD 10,20
30,40, WORD 30,40
50,60 WORD 50,60
.CODE .CODE
mov eax, LENGTHOF array ; 6 mov eax, LENGTHOF array ; 2
mov ebx, SIZEOF array ; 12 mov ebx, SIZEOF array ; 4
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 47
PTR Operator
PTR Provides the flexibility to access part of a variable
Can also be used to combine elements of a smaller type
Syntax: Type PTR (Overrides default type of a variable)
.DATA
dval array
dval DWORD 12345678h
array BYTE 00h,10h,20h,30h 78 56 34 12 00 10 20 30
.CODE
mov al, dval ; error – why?
mov al, BYTE PTR dval ; al = 78h
mov ax, dval ; error – why?
mov ax, WORD PTR dval ; ax = 5678h
mov eax, array ; error – why?
mov eax, DWORD PTR array ; eax = 30201000h
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 48
LABEL Directive
Assigns an alternate name and type to a memory location
LABEL does not allocate any storage of its own
Removes the need for the PTR operator
Format: Name LABEL Type
.DATA blist
dval LABEL DWORD
00 10 00 20
wval LABEL WORD
blist BYTE 00h,10h,00h,20h wval
.CODE dval
mov eax, dval ; eax = 20001000h
mov cx, wval ; cx = 1000h
mov dl, blist ; dl = 00h
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 49
Summary
Instruction executed at runtime
Directive interpreted by the assembler
.STACK, .DATA, and .CODE
Define the code, data, and stack sections of a program
Edit-Assemble-Link-Debug Cycle
Data Definition
BYTE, WORD, DWORD, QWORD, etc.
DUP operator
Symbolic Constant
=, EQU, and TEXTEQU directives
Data-Related Operators
OFFSET, ALIGN, TYPE, LENGTHOF, SIZEOF, PTR, and LABEL
Introduction to Assembly Language COE 205 – Computer Organization and Assembly Language – KFUPM © Muhamed Mudawar – slide 50