INTRODUCTION TO IBM PC ASSEMBLY LANGUAGE

Slides:



Advertisements
Similar presentations
Sheet 1 Introduction to Computer Organization and Assembly Language.
Advertisements

COE Computer Organization & Assembly Language
CEN 226: Computer Organization & Assembly Language :CSC 225 (Lec#4)
Irvine: Assembly Language for Intel-Based Computers (1999) Symbolic Constants Equal-sign Directive EQU Directive TEXTEQU Directive.
Chapter 3 Assembly Language: Part 1. Machine language program (in hex notation) from Chapter 2.
Assembly Language for Intel-Based Computers Chapter 3: Assembly Language Fundamentals Kip Irvine.
8051 ASSEMBLY LANGUAGE PROGRAMMING
Joseph L. Lindo Assembly Programming Sir Joseph Lindo University of the Cordilleras.
INTRODUCTION TO IBM PC ASSEMBLY LANGUAGE
ICS312 Set 4 Program Structure. Outline for a SMALL Model Program Note the quiz at the next lecture will be to reproduce this slide.MODEL SMALL.586 ;
1/2002JNM1 Basic Elements of Assembly Language Integer Constants –If no radix is given, the integer is assumed to be decimal. Int 21h  Int 21 –A hexadecimal.
Chapter 3 Elements of Assembly Language. 3.1 Assembly Language Statements.
ASSEMBLY LANGUAGE. Assembler and Compiler Pascal A Program Compiler Version A Assembly Language Versiion A Machine Code Actual version that will be executed.
1/2002JNM1 Positional Notation (Hex Digits). 1/2002JNM2 Problem The 8086 has a 20-bit address bus. Therefore, it can access 1,048,576 bytes of memory.
Riyadh Philanthropic Society For Science Prince Sultan College For Woman Dept. of Computer & Information Sciences CS 251 Introduction to Computer Organization.
Introduction to 8086 Assembly Language Assembly Language Programming University of Akron Dr. Tim Margush.
Faculty of Engineering, Electrical Department,
The x86 PC Assembly Language, Design, and Interfacing By Muhammad Ali Mazidi, Janice Gillespie Mazidi and Danny Causey © 2010, 2003, 2000, 1998 Pearson.
Overview of Assembly Language Chapter 4 S. Dandamudi.
Chapter Five–80x86 Assembly program development Principles of Microcomputers 2015年11月15日 2015年11月15日 2015年11月15日 2015年11月15日 2015年11月15日 2015年11月15日 1.
Assembly Language. Symbol Table Variables.DATA var DW 0 sum DD 0 array TIMES 10 DW 0 message DB ’ Welcome ’,0 char1 DB ? Symbol Table Name Offset var.
Programming Fundamentals. Overview of Previous Lecture Phases of C++ Environment Program statement Vs Preprocessor directive Whitespaces Comments.
CHAPTER 2 PROBLEM SOLVING USING C++ 1 C++ Programming PEG200/Saidatul Rahah.
Review of Assembly language. Recalling main concepts.
8086/8088 Instruction Set, Machine Codes and Addressing Modes.
B ASIC INSTRUCTIONS. I NTRODUCTION There are over a hundred instructions in the instruction set for the 8086 CPU; there are also instructions designed.
Lecture 2 Chapter 4 –Requirements for coding in Assembly Language 1.
Computer Organization & Assembly Language University of Sargodha, Lahore Campus Prepared by Ali Saeed.
Riyadh Philanthropic Society For Science Prince Sultan College For Woman Dept. of Computer & Information Sciences CS 251 Introduction to Computer Organization.
Assembly Language Lecture 2. Lecture Outline Program Structure Memory models Data Segment Stack Segment Code Segment Input and Output Instructions INT.
Sheet 2 Introduction to Computer Organization and Assembly Language.
Microprocessors CSE- 341 Dr. Jia Uddin Assistant Professor, CSE, BRAC University Dr. Jia Uddin, CSE, BRAC University.
Assembly language programming
Format of Assembly language
Assembly Lab 3.
Assembly Language programming
Additional Assembly Programming Concepts
Microprocessor and Assembly Language
Microprocessor and Assembly Language
INTRODUCTION ABOUT ASSEMBLY
Computer Organization & Assembly Language
(The Stack and Procedures)
Morgan Kaufmann Publishers Computer Organization and Assembly Language
Microprocessor and Assembly Language
Arithmetic Instructions
Defining Types of data expression Dn [name] expression Dn [name]
Symbolic Instruction and Addressing
Introduction to Assembly Language
Morgan Kaufmann Publishers Computer Organization and Assembly Language
Symbolic Instruction and Addressing
(Array and Addressing Modes)
(The Stack and Procedures)
Chapter 4 –Requirements for coding in Assembly Language
Symbolic Instruction and Addressing
(Array and Addressing Modes)
Chapter 4 –Requirements for coding in Assembly Language
Flow Control Instructions
INTRODUCTION ABOUT ASSEMBLY
Lecture 06 Programming language.
Chapter 4 –Requirements for coding in Assembly Language
University of Gujrat Department of Computer Science
Requirements for coding in Assembly Language
8051 ASSEMBLY LANGUAGE PROGRAMMING
Assembler Directives end label end of program, label is entry point
Computer Architecture and System Programming Laboratory
Chapter 6 –Symbolic Instruction and Addressing
(The Stack and Procedures)
Introduction to 8086 Assembly Language
Part I Data Representation and 8086 Microprocessors
(Array and Addressing Modes)
Presentation transcript:

INTRODUCTION TO IBM PC ASSEMBLY LANGUAGE CAP221 4/20/2017

Assembly Language Syntax An assembly language program consists of statements. The syntax of an assembly language program statement obeys the following rules: CAP221 4/20/2017

Only one statement is written per line RULES Only one statement is written per line Each statement is either an instruction or an assembler directive instruction is translated into machine code assembler directive instructs the assembler to perform some specific task CAP221 4/20/2017

Program Statement The general format for an assembly language program statement is as follows: name operation operand’(s) comment Examples: START: MOV CX,5 ; initialize counter MAIN PROC CAP221 4/20/2017

Name Field This field is used for: instruction label: if present, a label must be followed by a colon (:) procedure names variable names. CAP221 4/20/2017

Name Field Assembler translates names into memory addresses. Names can be from 1 to 31 characters long: (letters, digits, and special characters: ?, ., _, $, @, %) Embedded blanks are not allowed, names may not begin with a digit, period (if used) must be the first character CAP221 4/20/2017

Name Field Examples: Legal names Illegal names COUNTER1 2ABC @CHARACTER TWO WORDS $500 A45.26 SUM_OF_DIGITS YOU&ME .TEST DONE? CAP221 4/20/2017

This field consists of a symbolic operation code, known as opcode Operation Field For an instruction This field consists of a symbolic operation code, known as opcode The opcode describes the operation’s function Symbolic opcodes are translated into machine language opcode. CAP221 4/20/2017

This field consists of a pseudo-operation code (pseudo-op) Operation Field For an assembler directive This field consists of a pseudo-operation code (pseudo-op) pseudo-ops tell assembly to do something CAP221 4/20/2017

Operand Field For an instruction This field specifies data to be acted on. It may have one, two or no operands at all. Examples of instructions with different operand fields NOP ; Instruction with no operand field INC AX ; Instruction with one operand field ADD AX, 2 ; Instruction with two operand field If 2 operands: the first is destination, the second is the source operand CAP221 4/20/2017

This field contains more information about the directive Operand Field For an assembler directive This field contains more information about the directive CAP221 4/20/2017

A semicolon marks the beginning of a comment Comment Field A semicolon marks the beginning of a comment A semicolon in the beginning of a line makes it all a comment line Good programming practice dictates the use of a comment on almost every line. CAP221 4/20/2017

Key rules for the use of comments Do not say something that is obvious Put instruction in context of program CAP221 4/20/2017

Comment Field Examples of good and bad Comments MOV CX , 0 ; Move 0 to CX (This is not a good comment.) MOV CX , 0 ; CX counts terms, initially set to 0 (This is a good comment.) CAP221 4/20/2017

Numbers Binary number is written as a bit string followed by the letter `b`. decimal number is written as a string of decimal digits followed by the letter `d`. Hex number is written as a string of hex digits followed by the letter `h`. Hex number must begin with a decimal digit Numbers may have an optional sign CAP221 4/20/2017

Numbers Examples: number type 1010 decimal 1010B binary -2134D decimal ABFFH illegal 0ABFFH hex 1BHH illegal 1BFFH hex 1,23 illegal CAP221 4/20/2017

Assembler translates characters to their ASCII code Characters and character segments must be enclosed in single or double quotes; ‘A' , “hello“. Assembler translates characters to their ASCII code CAP221 4/20/2017

Variables Declaring Integer Variables: An integer is a whole number, such as 4 or 4444. Integers have no fractional part. Integer variables can be initialized in several ways with the data allocation directives. CAP221 4/20/2017

Variables Allocating Memory for Integer Variables: When an integer variable is declared, the assembler allocates memory space for the variable. The variable name becomes a reference to the memory space allocated to that variable. CAP221 4/20/2017

Syntax name directive initializer initial value CAP221 4/20/2017

Variables Pseudo-op type size range DB unsigned 1 byte 0 to 255. DW unsigned 2 bytes 0 to 65,535 (64K). signed 2 bytes -32,768 to +32,767. DD unsigned 4 bytes 0 to 4,294,967,295 (4 Mbytes). signed 4 bytes -2,147,483,648 to +2,147,483,647. DQ 8-byte integer 4 consecutive words DT 10-byte integer 10 consecutive bytes CAP221 4/20/2017

Byte variables Syntax: Name DB initial value Examples: ALPHA DB 4 BYT DB ? CAP221 4/20/2017

Word variables Syntax: Name DW initial value Example: WRD DW -2 The assembler stores integers with the least significant byte in the lowest address of the memory area allocated to the integer WD DW 1234H low byte WD contains 34h, high byte contains 12h CAP221 4/20/2017

Array Declaration  An array is a sequential collection of variables, all of the same size and type Array elements occupy contiguous memory locations. The program references each element relative to the start of the array. An array is declared by giving it a name, a type, and a series of initializing values or placeholders (?). CAP221 4/20/2017

Array Examples B_ARRAY DB 10, 25, 20 If array starts at offset address 0200h, it will look like this: Symbol Address Contents B-ARRAY 0200H 10 B-ARRAY+1 0200H+1 25 B-ARRAY+2 0200H+2 20 CAP221 4/20/2017

Array Examples W_ARRAY DW 0FFFFh, 789Ah, 0BCDEh If array starts at offset address 0100h, it will look like this: Symbol Address Contents W_ARRAY 0100H FFFFH W_ARRAY+2 0102H 789AH W_ARRAY+4 0104H BCDEH CAP221 4/20/2017

An array of characters can be initialized by a string of characters. Character strings An array of characters can be initialized by a string of characters. Inside a string, the assembler differentiates between upper and lower cases (different ASCII codes). It is possible to combine characters and numbers in one definition CAP221 4/20/2017

Character strings Examples: 1) LETTERS DB ‘AaBCbc‘ Is equivalent to LETTERS DB 41H,61H,42H,43H,62H,63H 2) MSG DB ‘ABC‘,0AH,0DH,‘$‘ MSG DB 41H,42H,43H,0AH,0DH,24H CAP221 4/20/2017

Constant Declaration  In an assembly language program, constants are defined through the use of the EQU directive. Syntax: Name EQU constant The EQU directive is used to assign a name to a constant. Use of constant names makes an assembly language easier to understand. No memory is allocated for a constant. The symbol on the right of EQU cab also be a string CAP221 4/20/2017

Constant Declaration Examples: 1) LF EQU 0AH ; LF can be used in place of 0Ah MOV DL LF MOV DL 0AH 2) PMT EQU ‘TYPE YOUR NAME‘ ; instead of MSG DB ‘TYPE YOUR NAME‘ We can use MSG DB PMT Have the same machine code CAP221 4/20/2017

BASIC INSTRUCTIONS MOV and XCHG CAP221 4/20/2017

MOV instruction Is used to transfer data : between registers, between a register & a memory location. Or To move a number directly into a register or memory location. CAP221 4/20/2017

Syntax MOV destination , source Example: MOV AX , WORD1 This reads “ Move WORD1 to AX “ The contents of register AX are replaced by the contents of the memory location WORD1. CAP221 4/20/2017

Mov AX , WORD1 After Before AX AX WORD1 WORD1 0006 0008 0008 0008 CAP221 4/20/2017

AX gets what was previously in BX , BX is unchanged. MOV AX , BX AX gets what was previously in BX , BX is unchanged. CAP221 4/20/2017

MOV AH , ‘A’ This is a move of the 041h ( the ASCII code of “A” ) into register AH. The previous value of AH is overwritten ( replaced by new value ) CAP221 4/20/2017

XCHG instruction (Exchange) operation is used to exchange the contents of two registers, or a register and a memory location CAP221 4/20/2017

Syntax XCHG destination , source CAP221 4/20/2017

Example XCHG AH , BL This instruction swaps the contents of AH and BL. CAP221 4/20/2017

XCHG AH , BL After Before AH AL AH AL BH BL BH BL 1A 00 05 00 00 05 00 CAP221 4/20/2017

Example XCHG AX , WORD1 This swaps the contents of AX and memory location WORD1. CAP221 4/20/2017

Restrictions on MOV & XCHG MOV Destination Operand Source Operand General Register Segment Register Memory Location Constant yes no CAP221 4/20/2017

Restrictions on MOV & XCHG XCHG Destination Operand Source Operand General Register Memory Location yes no CAP221 4/20/2017

Restrictions on MOV & XCHG Example : ILLEGAL : MOV WORD1 , WORD2 LEGAL: MOV AX , WORD2 MOV WORD1 , AX CAP221 4/20/2017

ADD & SUB Are used to add & subtract the contents of two registers, a register & memory location , or add ( subtract ) a number to ( from ) a register or a memory location. CAP221 4/20/2017

Syntax ADD destination , source SUB destination , source CAP221 4/20/2017

Example ADD WORD1 , AX This instruction , “ Add AX to WORD1 “ , causes the contents of AX & memory word WORD1 to be added, and the sum is stored in WORD1. AX is unchanged. CAP221 4/20/2017

ADD WORD1 , AX Before After 01BC 01BC AX AX 06DF 0523 WORD1 WORD1 CAP221 4/20/2017

Example SUB AX , DX This instruction , “ Subtract DX from AX “ , the value of DX is subtracted from the value of AX , with the difference being stored in AX. DX is unchanged. CAP221 4/20/2017

SUB AX , DX Before After 0000 FFFF AX AX 0001 0001 DX DX CAP221 4/20/2017

Example ADD BL , 5 This is an addition of the number 5 to the contents of register BL. CAP221 4/20/2017

Legal combinations of operands for ADD & SUB Destination operand Memory location General Register Source Operand yes no Constant CAP221 4/20/2017

ILLEGAL ADD BYTE1 , BYTE2 Solution : move BYTE2 to a register before adding MOV AL , BYTE2 ; AL gets BYTE2 ADD BYTE1 , AL ; add it to BYTE1 CAP221 4/20/2017

Is used to add 1 to the contents of a Register or Memory location INC ( increment ) Is used to add 1 to the contents of a Register or Memory location CAP221 4/20/2017

Is used to subtract 1 from the contents of a Register or DEC ( decrement ) Is used to subtract 1 from the contents of a Register or Memory location CAP221 4/20/2017

Syntax INC destination DEC destination CAP221 4/20/2017

Example INC WORD1 adds 1 to the contents of WORD1 CAP221 4/20/2017

INC WORD1 Before After 0002 0003 WORD1 WORD1 CAP221 4/20/2017

Example DEC BYTE1 subtracts 1 to the variable BYTE1 CAP221 4/20/2017

DEC BYTE1 Before After FE FD BYTE1 BYTE1 CAP221 4/20/2017

NEG Is used to negate the contents of the destination. It does this by replacing the contents by its two’s complement. CAP221 4/20/2017

Syntax NEG destination The destination may be a register or memory location. CAP221 4/20/2017

NEG BX Before After 0002 FFFE BX BX CAP221 4/20/2017

Type agreement of operands For instruction with 2 operand, the two operands must be of the same type; that is, both words or bytes. Illegal …. MOV AX , BYTE1 …. Is not allowed. Assembler will accept both the following instructions : MOV AH , ‘A’ ….. moves 41h into AH MOV AX , ‘A’ ….. moves 0041h into AX CAP221 4/20/2017

Translation of HLL to Assembly Language Statement Translation B = A MOV AX , A ; moves A into AX MOV B , AX ; and then into B WHY Because direct memory – memory move is illegal we must move the contents of A into a register before moving it to B. CAP221 4/20/2017

Translation of HLL to Assembly Language Statement Translation A = 5 – A MOV AX , 5 ; put 5 in AX SUB AX , A ; AX…. 5 – A MOV A , AX ; put it in A There is another shorter way : CAP221 4/20/2017

NEG A ; A = - A ADD A , 5 ; A = 5 - A CAP221 4/20/2017

Translation of HLL to Assembly Language Statement Translation A = B – 2 * A MOV AX , B ; AX has B SUB AX , A ; AX has B – A SUB AX , A ; AX has B – 2 * A MOV A , AX ; move results to B CAP221 4/20/2017

Codes, Data, and Stack. Program Structure Machine language programs consist of : Codes, Data, and Stack. Each part occupies a memory segment. They are structured as program segments. Each program segment is translated into a memory segment by the assembler. CAP221 4/20/2017

Memory Models The size of the code & data a program can have is determined by specifying a memory model using the . MODEL directive. CAP221 4/20/2017

Syntax . MODEL memory_mode1 LARGE Code in more than one segment Data in more than one segment No array larger than 64K bytes. SMALL MEDUIM COMPACT Code in more than one segment Data in one segment Code in one segment Data in more than one segment Code in one segment Data in one segment CAP221 4/20/2017

Unless there is a lot of code or data, the appropriate model is SMALL. . MODEL directive should come before any segment definition. CAP221 4/20/2017

Data Segment A program’s data segment contains all the variable definitions. Constant definitions are made here as well, but they may be placed elsewhere in the program since no memory allocation is involved. We use the . DATA directive followed by variable & constant declarations. Variable addresses are computed as offsets from the start of this segment CAP221 4/20/2017

Example .DATA WORD1 DW 2 WORD2 DW 5 MSG DB ‘ This is a message ‘ MASK EQU 10010010B CAP221 4/20/2017

Stack Segment Used to set aside storage for the stack Stack addresses are computed as offsets into this segment Use: .stack followed by a value that indicates the size of the stack CAP221 4/20/2017

Declaration Syntax .STACK size An optional number that specifies the stack area size in bytes. CAP221 4/20/2017

Example .STACK 100 H Sets aside 100h bytes for the stack area ( a reasonable size for most applications ) . If size is omitted , 1 KB is set aside for the stack area. CAP221 4/20/2017

It contains a program’s instructions. Code Segment It contains a program’s instructions. CAP221 4/20/2017

Syntax .CODE name Optional name for the segment there is no need for a name in a SMALL program Why?? The assembler will generate an error CAP221 4/20/2017

Inside the code segment Instructions are organized as procedures. The simplest procedure definition is : name PROC ; body of the procedure name ENDP name is the name of the procedure, PROC and ENDP are pseudo-op that delineate the procedure CAP221 4/20/2017

Example .CODE MAIN PROC ; main procedure body MAIN ENDP ; other procedures go here CAP221 4/20/2017

Program Structure A program has always the following general structure: .model small ;Select a memory model .stack 100h ;Define the stack size .data ; Variable and array declarations ; Declare variables at this level .code main proc ; Write the program main code at this level main endp ;Other Procedures ; Always organize your program into procedures end main ; To mark the end of the source file CAP221 4/20/2017