Assembly Language for IntelBased Computers Kip Irvine Chapter
Assembly Language for Intel-Based Computers Kip Irvine Chapter 3: Assembly Language Fundamentals
Chapter Overview • • • Example: Adding and Subtracting Integers Basic Elements of Assembly Language Assembling, Linking, and Running Programs Defining Data Symbolic Constants Real-Address Mode Programming Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 2
Example: Adding and Subtracting Integers TITLE Add and Subtract (Add. Sub. asm) ; This program adds and subtracts 32 -bit integers. . model small. code mov eax, 10000 h add eax, 40000 h sub eax, 20000 h ; EAX = 10000 h ; EAX = 50000 h ; EAX = 30000 h mov ah, 4 ch int 21 h END Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 3
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 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 4
Integer Constants • Optional leading + or – sign • binary, decimal, hexadecimal, or octal digits • Common radix characters: • h – hexadecimal • d – decimal • b – binary Examples: 30 d, 6 Ah, 42, 1101 b Hexadecimal beginning with letter: 0 A 5 h Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 5
Integer Expressions • Operators and precedence levels: • Examples: Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 6
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' Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 7
Reserved Words and Identifiers • Reserved words cannot be used as identifiers • Instruction mnemonics, directives, type attributes, operators, predefined symbols • Identifiers • 1 -247 characters, including digits • not case sensitive • first character must be a letter, _, @, ? , or $ Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 8
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 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 9
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 Mnemonic Operand Comment (optional) (required) (depends on the instruction) (optional) Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 10
Labels • Act as place markers • marks the address (offset) of code and data • Follow identifer rules • Data label • must be unique • example: my. Array (not followed by colon) • Code label • target of jump and loop instructions • example: L 1: (followed by colon) Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 11
Mnemonics and Operands • Instruction Mnemonics • memory aid • examples: MOV, ADD, SUB, MUL, INC, DEC • Operands • • constant expression register memory (data label) Constants and constant expressions are often called immediate values Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 12
Comments • 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 (; ) • Multi-line comments • begin with COMMENT directive and a programmerchosen character • end with the same programmer-chosen character Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 13
Instruction Format Examples • No operands • stc ; set Carry flag • One operand • inc eax • inc my. Byte ; register ; memory • Two operands • add ebx, ecx • sub my. Byte, 25 • add eax, 36 * 25 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. ; register, register ; memory, constant ; register, constant-expression Web site Examples 14
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. Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 15
Listing File • Use it to see how your program is compiled • Contains • • source code addresses object code (machine language) symbols (variables, procedures]) • Example: add. Sub. lst Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 16
Map File • Information about each program segment: • starting address • ending address • size • Example: add. Sub. map Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 17
Data Types • 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 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 18
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]. . . value 1 BYTE 10 db • All initializers become binary data in memory Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 19
Defining BYTE and SBYTE Data Each of the following defines a single byte of storage: value 1 db 'A' ; character constant value 2 db 0 ; smallest unsigned byte value 3 db 255 ; largest unsigned byte value 4 db -128 ; smallest signed byte value 5 db +127 ; largest signed byte value 6 db ? ; uninitialized byte Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 20
Defining Byte Arrays Examples that use multiple initializers: list 1 db 10, 20, 30, 40 list 2 db 10, 20, 30, 40 db 50, 60, 70, 80 db 81, 82, 83, 84 list 3 db ? , 32, 41 h, 0010 b list 4 db 0 Ah, 20 h, ‘A’, 22 h Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 21
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: str 1 db "Enter your name", 0 str 2 db 'Error: halting program', 0 str 3 db 'A', 'E', 'I', 'O', 'U' greeting db "Welcome to the Encryption Demo program " db "created by Kip Irvine. ", 0 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 22
Defining Strings (2 of 3) • To continue a single string across multiple lines, end each line with a comma: menu db "Checking Account", 0 dh, 0 ah, "1. Create a new account", 0 dh, 0 ah, "2. Open an existing account", 0 dh, 0 ah, "3. Credit the account", 0 dh, 0 ah, "4. Debit the account", 0 dh, 0 ah, "5. Exit", 0 ah, "Choice> ", 0 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 23
Defining Strings (3 of 3) • End-of-line character sequence: • 0 Dh = carriage return • 0 Ah = line feed str 1 db "Enter your name: ", 0 Dh, 0 Ah db "Enter your address: ", 0 new. Line db 0 Dh, 0 Ah, 0 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 24
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 var 1 db 20 DUP(0) ; 20 bytes, all equal to zero var 2 db 20 DUP(? ) ; 20 bytes, uninitialized var 3 db 4 DUP("STACK") ; 20 bytes: "STACKSTACK" var 4 db 10, 3 DUP(0), 20 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. ; 5 bytes Web site Examples 25
Defining WORD and SWORD Data • Define storage for 16 -bit integers • or double characters • single value or multiple values word 1 word 2 word 3 word 4 my. List array dw 65535 dw – 32768 dw ? dw "AB" dw 1, 2, 3, 4, 5 dw 5 DUP(? ) Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. ; ; ; largest unsigned value smallest signed value uninitialized double characters array of words uninitialized array Web site Examples 26
Defining DWORD and SDWORD Data Storage definitions for signed and unsigned 32 -bit integers: val 1 val 2 val 3 val 4 dd 12345678 h dd – 2147483648 dd 20 DUP(? ) dd – 3, – 2, – 1, 0, 1 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. ; ; unsigned array Web site Examples 27
Adding Variables to Add. Sub TITLE Add and Subtract, Version 2 (Add. Sub 2. asm) ; This program adds and subtracts 32 -bit unsigned ; integers and stores the sum in a variable. . data val 1 dd 10000 h val 2 dd 40000 h val 3 dd 20000 h final. Val dd ? . code mov add sub mov eax, val 1 eax, val 2 eax, val 3 final. Val, eax ; ; start with 10000 h add 40000 h subtract 20000 h store the result (30000 h) END Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 28
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 al, COUNT Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 29
Equal-Sign Directive Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 30
Real Address Mode Programming TITLE Add and Subtract, Version 2 (Add. Sub 2. asm) ; This program adds and subtracts 32 -bit unsigned ; integers and stores the sum in a variable. . data val 1 dd 10000 h val 2 dd 40000 h val 3 dd 20000 h final. Val dd ? . code mov ax, @data mov ds, ax mov add sub mov eax, val 1 eax, val 2 eax, val 3 final. Val, eax ; ; start with 10000 h add 40000 h subtract 20000 h store the result (30000 h) END Irvine, Kip R. Assembly Language for Intel-Based Computers, 2007. Web site Examples 31
- Slides: 31