Assembly Language for Intel- -Based Based Assembly Language for Intel th Edition Computers, 4 th Edition Computers, 4 Kip R. Irvine Chapter 3: Assembly Language Fundamentals (c) Pearson Education, 2002.
Chapter Overview Chapter Overview • Basic Elements of Assembly Language • Example: Adding and Subtracting Integers • Assembling, Linking, and Running Programs • Defining Data • Symbolic Constants • Real-Address Mode Programming 2 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Basic Elements of Assembly Language Basic Elements of Assembly Language • Integer constants • Integer expressions • Real-number constants • Character and string constants • Reserved words and identifiers • Directives • Instructions • Labels • Mnemonics • Operands • Comments • Examples 3 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Integer Constants 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 • To prevent the assembler from interpreting it as an identifier 4 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Integer Expressions Integer Expressions • Operators and precedence levels: • Examples: 5 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Real Number Constants Real Number Constants • Decimal Real • [sign] integer.[integer [exponent]] • E.g., 2., +3.0, -44.2E+05, 26.E5 • Encoded Real • Specify a real constant in hexadecimal as an encoded real if you know the exact binary representation of the number • E.g., 3F800000r -> +1.0 6 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Character and String Constants 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' 7 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Reserved Words and Identifiers Reserved Words and Identifiers • Reserved words (Appendix D) cannot be used as identifiers • Instruction mnemonics (ADD, MOV …), directives (tell MASM how to assemble programs), type attributes (BYTE, WORD …), operators (+, - …), predefined symbols (@data …) • Identifiers • 1-247 characters, including digits • case insensitive (by default) • first character must be a letter, _, @, or $ 8 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Directives Directives • Directives • not part of Intel instruction set • part of the assembler’s syntax • case insensitive • .data, .code, proc • Commands that are recognized and acted upon by the assembler as the program’s source code is being assembled • Used to declare code, data areas, select memory model, declare procedures, etc. • Different assemblers have different directives. 9 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Instructions Instructions • Assembled into machine code by assembler • Executed at runtime by the CPU • Member of the Intel IA-32 instruction set • Parts • Label • Mnemonic • Operand • Comment Label: Mnemonic Operand(s) ; Comment 10 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Labels Labels • Act as place markers • marks the address (offset) of code and data • Follow identifier rules • Data label • example: first BYTE 10 • Code label • target of jump and loop instructions • example: L1: target: mov ax, bx … jmp target 11 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Mnemonics and Operands Mnemonics and Operands • Instruction Mnemonics • "reminder" • examples: MOV, ADD, SUB, MUL, INC, DEC • Operands • constant (immediate value) • constant expression • register • memory (data label) 12 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Comments Comments • Comments are good! • explain the program's purpose • when it was written, and by whom • revision information • tricky coding techniques • application-specific explanations COMMENT ! • Single-line comments comment. • begin with semicolon (;) also comment. ! • Multi-line comments • begin with COMMENT directive and a programmer- chosen character • end with the same programmer-chosen character 13 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Instruction Format Examples 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, expression 14 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Example: Adding and Subtracting Integers Example: Adding and Subtracting Integers TITLE Add and Subtract (AddSub.asm) ; This program adds and subtracts 32-bit integers. 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 ; call a predefined MS-Windows ; function that halts the program ; in Irvine32.inc main ENDP END main 15 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Example Output Example Output Program output, showing registers and flags: EAX=00030000 EBX=7FFDF000 ECX=00000101 EDX=FFFFFFFF ESI=00000000 EDI=00000000 EBP=0012FFF0 ESP=0012FFC4 EIP=00401024 EFL=00000206 CF=0 SF=0 ZF=0 OF=0 16 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Suggested Coding Standards [1/2] Suggested Coding Standards [1/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 17 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Suggested Coding Standards [2/2] Suggested Coding Standards [2/2] • Indentation and spacing • code and data labels – no indentation • executable instructions – indent 4-5 spaces • comments: begin at column 40-45, aligned vertically • 1-3 spaces between instruction and its operands • ex: mov ax,bx • 1-2 blank lines between procedures 18 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Alternative Version of AddSub AddSub Alternative Version of TITLE Add and Subtract (AddSubAlt.asm) ; This program adds and subtracts 32-bit integers. .386 .MODEL flat,stdcall .STACK 4096 ExitProcess PROTO, dwExitCode:DWORD DumpRegs PROTO .code main PROC mov eax,10000h ; EAX = 10000h add eax,40000h ; EAX = 50000h sub eax,20000h ; EAX = 30000h call DumpRegs INVOKE ExitProcess,0 main ENDP END main 19 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Program Template Program Template TITLE Program Template (Template.asm) ; Program Description: ; Author: ; Creation Date: ; Revisions: ; Date: Modified by: INCLUDE Irvine32.inc .data ; (insert variables here) .code main PROC ; (insert executable instructions here) exit main ENDP ; (insert additional procedures here) END main 20 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Assembling, Linking, and Running Programs Assembling, Linking, and Running Programs • Assemble-Link-Execute Cycle • make32.bat • Listing File • Map File 21 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Assemble- -Link Execute Cycle Link Execute Cycle Assemble • 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 4: Step 3: Step 2: OS loader Source Object linker Executable assembler Output File File File Listing Map File File Step 1: text editor 22 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
make32.bat make32.bat • Called a batch file • Run it to assemble and link programs • Contains a command that executes ML.EXE (the Microsoft Assembler) • Contains a command that executes LINK32.EXE (the 32-bit Microsoft Linker) • Command-Line syntax: make32 progName (progName includes the .asm extension) (use make16.bat to assemble and link Real-mode programs) 23 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Listing and Map Files Listing and Map Files • Listing File • Use it to see how your program is compiled • Contains • source code • offset addresses • object code (machine language) • segment names • symbols (variables, procedures, and constants) • Map File • Information about each program segment: • starting address • ending address • size • segment type 24 Irvine, Kip R. Assembly Language for Intel-Based Computers, 2003.
Recommend
More recommend