03 Irvine Lecture PPT Ch03
03 Irvine Lecture PPT Ch03
Eighth Edition
Chapter 3
Assembly Language
Fundamentals
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-1
Chapter Overview
• Basic Elements of Assembly Language
• Example: Adding and Subtracting Integers
• Assembling, Linking, and Running Programs
• Defining Data
• Symbolic Constants
• 64-Bit Programming
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-2
Basic Elements of Assembly Language
• Integer constants
• Integer expressions
• Character and string constants
• Reserved words and identifiers
• Directives and instructions
• Labels
• Mnemonics and Operands
• Comments
• Examples
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-3
Integer Constants
• Optional leading + or – sign
• binary, decimal, hexadecimal, or octal digits
• Common radix characters:
– h – hexadecimal
– d – decimal
– b – binary
– r – encoded real
Examples: 30d, 6Ah, 42, 1101b
Hexadecimal beginning with letter: 0A5h
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-4
Integer Expressions
• Operators and precedence levels:
• Examples:
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-5
Character and String Constants
• Enclose character in single or double quotes
– 'A', "x"
– ASCII character = 1 byte
• Enclose strings in single or double quotes
– "ABC"
– 'xyz'
– Each character occupies a single byte
• Embedded quotes:
– 'Say "Goodnight," Gracie'
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-6
Reserved Words and Identifiers
• Reserved words cannot be used as identifiers
– Instruction mnemonics, directives, type attributes,
operators, predefined symbols
– See MASM reference in Appendix A
• Identifiers
– 1-247 characters, including digits
– not case sensitive
– first character must be a letter, _, @, ?, or $
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-7
Directives
• Commands that are recognized and acted upon
by the assembler
– Not part of the Intel instruction set
– Used to declare code, data areas, select memory
model, declare procedures, etc.
– not case sensitive
• Different assemblers have different directives
– NASM not the same as MASM, for example
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-8
Instructions
• Assembled into machine code by assembler
• Executed at runtime by the CPU
• We use the Intel IA-32 instruction set
• An instruction contains:
– Label (optional)
– Mnemonic (required)
– Operand (depends on the instruction)
– Comment (optional)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3-9
Labels
• Act as place markers
– marks the address (offset) of code and data
• Follow identifer rules
• Data label
– must be unique
– example:myArray (not followed by colon)
• Code label
– target of jump and loop instructions
– example: L1: (followed by colon)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 10
Mnemonics and Operands
• Instruction Mnemonics
– memory aid
– examples: MOV, ADD, SUB, MUL, INC, DEC
• Operands
– constant
– constant expression
– register
– memory (data label)
Constants and constant expressions are often
called immediate values
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 11
Comments (1 of 2)
• Comments are good!
– explain the program's purpose
– when it was written, and by whom
– revision information
– tricky coding techniques
– application-specific explanations
• Single-line comments
– begin with semicolon (;)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 12
Comments (2 of 2)
• Multi-line comments
– begin with COMMENT directive and a programmer-
chosen character
– end with the same programmer-chosen character
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 13
Instruction Format Examples
• No operands
– stc ; set Carry flag
• One operand
– inc eax ; register
– inc myByte ; memory
• Two operands
– add ebx,ecx ; register, register
– sub myByte,25 ; memory, constant
– add eax,36 * 25 ; register, constant-expression
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 14
What's Next (1 of 5)
• Basic Elements of Assembly Language
• Example: Adding and Subtracting Integers
• Assembling, Linking, and Running Programs
• Defining Data
• Symbolic Constants
• 64-Bit Programming
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 15
Example: Adding and Subtracting
Integers
; AddTwo.asm – adds two 32-bit integers
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.code
main PROC
mov eax,5 ; move 5 to the EAX register
add eax,6 ; add6 to the EAX register
INVOKE ExitProcess,0
main ENDP
END main
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 16
Example Output
Showing registers and flags in the debugger:
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 17
Suggested Coding Standards (1 of 2)
• Some approaches to capitalization
– capitalize nothing
– capitalize everything
– capitalize all reserved words, including instruction
mnemonics and register names
– capitalize only directives and operators
• Other suggestions
– descriptive identifier names
– spaces surrounding arithmetic operators
– blank lines between procedures
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 18
Suggested Coding Standards (2 of 2)
• Indentation and spacing
– code and data labels – no indentation
– executable instructions – indent 4-5 spaces
– comments: right side of page, aligned vertically
– 1-3 spaces between instruction and its operands
ex: movax,bx
– 1-2 blank lines between procedures
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 19
Required Coding Standards
• (to be filled in by the professor)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 20
Program Template
; Program Template (Template.asm)
; Program Description:
; Author:
; Creation Date:
; Revisions:
; Date:Modified by:
.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO, dwExitCode:DWORD
.data
; declare variables here
.code
main PROC
; write your code here
INVOKE ExitProcess,0
main ENDP
; (insert additional procedures here)
END main
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 21
What's Next (2 of 5)
• Basic Elements of Assembly Language
• Example: Adding and Subtracting Integers
• Assembling, Linking, and Running Programs
• Defining Data
• Symbolic Constants
• 64-Bit Programming
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 22
Assembling, Linking, and Running
Programs
• Assemble-Link-Execute Cycle
• Listing File
• Map File
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 23
Assemble-Link Execute Cycle
• The following diagram describes the steps from
creating a source program through executing the
compiled program.
• If the source code is modified, Steps 2 through 4
must be repeated.
Link
Library
Step 2: Step 3: Step 4:
Source assembler Object linker Executable OS loader
Output
File File File
Listing Map
Step 1: text editor File File
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 24
Listing File
• Use it to see how your program is compiled
• Contains
– source code
– addresses
– object code (machine language)
– segment names
– symbols (variables, procedures, and constants)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 25
What's Next (3 of 5)
• Basic Elements of Assembly Language
• Example: Adding and Subtracting Integers
• Assembling, Linking, and Running Programs
• Defining Data
• Symbolic Constants
• 64-Bit Programming
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 26
Defining Data (1 of 2)
• Intrinsic Data Types
• Data Definition Statement
• Defining BYTE and SBYTE Data
• Defining WORD and SWORD Data
• Defining DWORD and SDWORD Data
• Defining QWORD Data
• Defining TBYTE Data
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 27
Defining Data (2 of 2)
• Defining Real Number Data
• Little Endian Order
• Adding Variables to the AddSub Program
• Declaring Uninitialized Data
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 28
Intrinsic Data Types (1 of 2)
• BYTE, SBYTE
– 8-bit unsigned integer; 8-bit signed integer
• WORD, SWORD
– 16-bit unsigned & signed integer
• DWORD, SDWORD
– 32-bit unsigned & signed integer
• QWORD
– 64-bit integer
• TBYTE
– 80-bit integer
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 29
Intrinsic Data Types (2 of 2)
• REAL4
– 4-byte IEEE short real
• REAL8
– 8-byte IEEE long real
• REAL10
– 10-byte IEEE extended real
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 30
Data Definition Statement
• A data definition statement sets aside storage in
memory for a variable.
• May optionally assign a name (label) to the data
• Syntax:
[name] directive initializer [,initializer] . . .
value1 BYTE 10
• All initializers become binary data in memory
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 31
Defining BYTE and SBYTE Data
Each of the following defines a single byte of storage:
value1 BYTE 'A' ; character constant
value2 BYTE 0 ; smallest unsigned byte
value3 BYTE 255 ; largest unsigned byte
value4 SBYTE -128; smallest signed byte
value5 SBYTE +127 ; largest signed byte
value6 BYTE ? ; uninitialized byte
• MASM does not prevent you from initializing a BYTE with a negative
value, but it's considered poor style.
• If you declare a SBYTE variable, the Microsoft debugger will
automatically display its value in decimal with a leading sign.
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 32
Defining Byte Arrays
Examples that use multiple initializers:
list1 BYTE 10,20,30,40
list2 BYTE 10,20,30,40
BYTE 50,60,70,80
BYTE 81,82,83,84
list3 BYTE ?,32,41h,00100010b
list4 BYTE 0Ah,20h,‘A’,22h
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 33
Defining Strings (1 of 3)
• A string is implemented as an array of characters
– For convenience, it is usually enclosed in quotation marks
– It often will be null-terminated
• Examples:
str1 BYTE "Enter your name",0
str2 BYTE 'Error: halting program',0
str3 BYTE 'A','E','I','O','U'
greeting BYTE "Welcome to the Encryption Demo
program "
BYTE "created by Kip Irvine.",0
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 34
Defining Strings (2 of 3)
• To continue a single string across multiple lines, end
each line with a comma:
menu BYTE "Checking Account",0dh,0ah,0dh,0ah,
"1. Create a new account",0dh,0ah,
"2. Open an existing account",0dh,0ah,
"3. Credit the account",0dh,0ah,
"4. Debit the account",0dh,0ah,
"5. Exit",0ah,0ah,
"Choice> ",0
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 35
Defining Strings (3 of 3)
• End-of-line character sequence:
– 0Dh = carriage return
– 0Ah = line feed
Idea: Define all strings used by your program in the same area of
the data segment.
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 36
Using the DUP Operator
• Use DUP to allocate (create space for) an array or
string. Syntax: counter DUP (argument)
• Counter and argument must be constants or
constant expressions
var1 BYTE 20 DUP(0) ; 20 bytes, all equal to zero
var2 BYTE 20 DUP(?) ; 20 bytes, uninitialized
var3 BYTE 4 DUP("STACK"); 20 bytes:
"STACKSTACKSTACKSTACK"
var4 BYTE 10,3 DUP(0),20; 5 bytes
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 37
Defining WORD and SWORD Data
• Define storage for 16-bit integers
– or double characters
– single value or multiple values
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 39
Defining QWORD, TBYTE, Real Data
Storage definitions for quadwords, tenbyte values,
and real numbers:
quad1 QWORD1234567812345678h
val1TBYTE 1000000000123456789Ah
rVal1 REAL4 -2.1
rVal2 REAL8 3.2E-260
rVal3 REAL10 4.6E+4096
ShortArray REAL4 20 DUP(0.0)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 40
Little Endian Order
• All data types larger than a byte store their
individual bytes in reverse order. The least
significant byte occurs at the first (lowest) memory
address.
• Example:
val1 DWORD 12345678h
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 41
Adding Variables to AddSub
TITLE Add and Subtract, Version 2(AddSub2.asm)
; This program adds and subtracts 32-bit unsigned
; integers and stores the sum in a variable.
INCLUDE Irvine32.inc
.data
val1 DWORD 10000h
val2 DWORD 40000h
val3 DWORD 20000h
finalVal DWORD ?
.code
main PROC
mov eax,val1 ; start with 10000h
add eax,val2 ; add 40000h
sub eax,val3 ; subtract 20000h
mov finalVal,eax ; store the result (30000h)
call DumpRegs ; display the registers
exit
main ENDP
END main
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 42
Declaring Unitialized Data
• Use the .data? directive to declare an unintialized
data segment:
.data?
• Within the segment, declare variables with "?"
initializers:
smallArray DWORD 10 DUP(?)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 43
What's Next (4 of 5)
• Basic Elements of Assembly Language
• Example: Adding and Subtracting Integers
• Assembling, Linking, and Running Programs
• Defining Data
• Symbolic Constants
• 64-Bit Programming
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 44
Symbolic Constants
• Equal-Sign Directive
• Calculating the Sizes of Arrays and Strings
• EQU Directive
• TEXTEQU Directive
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 45
Equal-Sign Directive
• name = expression
• expression is a 32-bit integer (expression or constant)
• may be redefined
• name is called a symbolic constant
• good programming style to use symbols
COUNT = 500
.
.
mov ax,COUNT
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 46
Calculating the Size of a Byte Array
• current location counter: $
– subtract address of list
– difference is the number of bytes
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 47
Calculating the Size of a Word Array
Divide total number of bytes by 2 (the size of a
word)
list WORD 1000h,2000h,3000h,4000h
ListSize = ($ - list) / 2
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 48
Calculating the Size of a Doubleword
Array
Divide total number of bytes by 4 (the size of a
doubleword)
list DWORD 1,2,3,4
ListSize = ($ - list) / 4
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 49
EQU Directive
• Define a symbol as either an integer or text
expression.
• Cannot be redefined
PI EQU <3.1416>
pressKey EQU <"Press any key to continue...",0>
.data
prompt BYTE pressKey
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 50
TEXTEQU Directive
• Define a symbol as either an integer or text expression.
• Called a text macro
• Can be redefined
continueMsg TEXTEQU <"Do you wish to continue (Y/N)?">
rowSize = 5
.data
prompt1 BYTE continueMsg
count TEXTEQU %(rowSize * 2) ; evaluates the expression
setupAL TEXTEQU <mov al,count>
.code
setupAL ; generates: "mov al,10"
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 51
What's Next (5 of 5)
• Basic Elements of Assembly Language
• Example: Adding and Subtracting Integers
• Assembling, Linking, and Running Programs
• Defining Data
• Symbolic Constants
• 64-Bit Programming
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 52
64-Bit Programming
• MASM supports 64-bit programming, although the
following directives are not permitted:
– INVOKE, ADDR, .model, .386, .stack
– (Other non-permitted directives will be introduced in
later chapters)
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 53
64-Bit Version of AddTwoSum
1: ; AddTwoSum_64.asm - Chapter 3 example.
3: ExitProcess PROTO
5: .data
6: sum DWORD 0
8: .code
9: mainPROC
10: moveax,5
11: addeax,6
12: movsum,eax
13:
14: movecx,0
15: call ExitProcess
16: main ENDP
17: END
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 54
Things to Notice About the Previous
Slide
• The following lines are not needed:
.386
.model flat,stdcall
.stack 4096
• INVOKE is not supported.
• CALL instruction cannot receive arguments
• Use 64-bit registers when possible
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 55
Summary
• Integer expression, character constant
• directive – interpreted by the assembler
• instruction – executes at runtime
• code, data, and stack segments
• source, listing, object, map, executable files
• Data definition directives:
– BYTE, SBYTE, WORD, SWORD, DWORD, SDWORD,
QWORD, TBYTE, REAL4, REAL8, and REAL10
– DUP operator, location counter ($)
• Symbolic constant
– EQU and TEXTEQU
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 56
4C 61 46 69 6E
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 57
Copyright
Copyright © 2020, 2015, 2011 Pearson Education, Inc. All Rights Reserved 3 - 58