Presentation is loading. Please wait.

Presentation is loading. Please wait.

Overview of Assembly Language Chapter 4 S. Dandamudi.

Similar presentations


Presentation on theme: "Overview of Assembly Language Chapter 4 S. Dandamudi."— Presentation transcript:

1 Overview of Assembly Language Chapter 4 S. Dandamudi

2 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 2 Outline Assembly language statements Data allocation Where are the operands?  Addressing modes »Register »Immediate »Direct »Indirect Data transfer instructions  mov, xchg, and xlat  Ambiguous moves Overview of assembly language instructions  Arithmetic  Conditional  Iteration  Logical  Shift/Rotate Defining constants  EQU, %assign, %define Macros Illustrative examples Performance: When to use the xlat instruction

3 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 3 Assembly Language Statements Three different classes  Instructions »Tell CPU what to do »Executable instructions with an op-code  Directives (or pseudo-ops) »Provide information to assembler on various aspects of the assembly process »Non-executable –Do not generate machine language instructions  Macros »A shorthand notation for a group of statements »A sophisticated text substitution mechanism with parameters

4 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 4 Assembly Language Statements (cont’d) Assembly language statement format: [label] mnemonic [operands] [;comment]  Typically one statement per line  Fields in [ ] are optional  label serves two distinct purposes: »To label an instruction –Can transfer program execution to the labeled instruction »To label an identifier or constant  mnemonic identifies the operation (e.g. add, or )  operands specify the data required by the operation »Executable instructions can have zero to three operands

5 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 5 Assembly Language Statements (cont’d)  comments »Begin with a semicolon (;) and extend to the end of the line Examples repeat: inc [result] ; increment result CR EQU 0DH ; carriage return character White space can be used to improve readability repeat: inc [result] ; increment result

6 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 6 Data Allocation Variable declaration in a high-level language such as C char response int value float total double average_value specifies »Amount storage required (1 byte, 2 bytes, …) »Label to identify the storage allocated (response, value, …) »Interpretation of the bits stored (signed, floating point, …) –Bit pattern 1000 1101 1011 1001 is interpreted as   29,255 as a signed number  36,281 as an unsigned number

7 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 7 Data Allocation (cont’d) In assembly language, we use the define directive  Define directive can be used »To reserve storage space »To label the storage space »To initialize »But no interpretation is attached to the bits stored –Interpretation is up to the program code  Define directive goes into the.DATA part of the assembly language program Define directive format for initialized data [var-name] D? init-value [,init-value],...

8 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 8 Data Allocation (cont’d) Five define directives for initialized data DB Define Byte ;allocates 1 byte DW Define Word ;allocates 2 bytes DD Define Doubleword ;allocates 4 bytes DQ Define Quadword ;allocates 8 bytes DT Define Ten bytes ;allocates 10 bytes Examples sorted DB ’y’ value DW 25159 Total DD 542803535 float1 DD 1.234

9 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 9 Data Allocation (cont’d) Directives for uninitialized data Five reserve directives RESB Reserve a Byte ;allocates 1 byte RESW Reserve a Word ;allocates 2 bytes RESD Reserve a Doubleword ;allocates 4 bytes RESQ Reserve a Quadword ;allocates 8 bytes REST Reserve a Ten bytes ;allocates 10 bytes Examples response resb 1 buffer resw 100 Total resd 1

10 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 10 Data Allocation (cont’d) Multiple definitions can be abbreviated Example message DB ’B’ DB ’y’ DB ’e’ DB 0DH DB 0AH can be written as message DB ’B’,’y’,’e’,0DH,0AH More compactly as message DB ’Bye’,0DH,0AH

11 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 11 Data Allocation (cont’d) Multiple definitions can be cumbersome to initialize data structures such as arrays Example To declare and initialize an integer array of 8 elements marks DW 0,0,0,0,0,0,0,0 What if we want to declare and initialize to zero an array of 200 elements?  There is a better way of doing this than repeating zero 200 times in the above statement »Assembler provides a directive to do this (DUP directive) marks DW 200 DUP (0)

12 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 12 Data Allocation (cont’d) Multiple initializations  The TIMES assembler directive allows multiple initializations to the same value  Examples »Previous marks array marks DW 0,0,0,0,0,0,0,0 can be compactly declared as marks TIMES 8 DW 0

13 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 13 Data Allocation (cont’d) Symbol Table  Assembler builds a symbol table so we can refer to the allocated storage space by the associated label Example.DATA name offset value DW 0value 0 sum DD 0sum 2 marks DW 10 DUP (?)marks 6 message DB ‘The grade is:’,0message 26 char1 DB ?char1 40

14 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 14 Data Allocation (cont’d) Correspondence to C Data Types DirectiveC data type DBchar DWint, unsigned DDfloat, long DQdouble DTinternal intermediate float value

15 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 15 Data Allocation (cont’d) Example: Assembly Program ; Assembly program to print 5 + 4 on screen.586 ; allow to use Pentium’s code option segment:use16 ; it’s a mixed mode.model small ; near code and data models.data ; start of the data segment x db 5 ; declare x = 5 y db 4 ; declare y = 4

16 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 16 Data Allocation (cont’d) Example: Assembly Program.code ; start of the code segment start: mov ax,@data mov ds,ax ; points DS to the data segment ; or you can type.startup mov dl,x ; dl = x add dl,y ; dl = dl + y add dl,'0' ; convert the result from hex. ; to ASCII code mov ah,2h ; DOS print character function int 21h ; print the character mov ah,4ch ; DOS end program function int 21h ; end the program end start

17 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 17 Where Are the Operands? Operands required by an operation can be specified in a variety of ways A few basic ways are:  operand is in a register –register addressing mode  operand is in the instruction itself –immediate addressing mode  operand is in the memory –variety of addressing modes  direct and indirect addressing modes  operand is at an I/O port

18 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 18 Where Are the Operands? (cont’d) Register Addressing Mode  Most efficient way of specifying an operand »operand is in an internal register Examples mov EAX,EBX mov BX,CX  The mov instruction mov destination,source copies data from source to destination

19 The register addressing mode is the most efficient way of specifying operands for two reasons: The operands are in the registers and no memory access is required. Instructions using the register mode tend to be shorter, as only 3 bits are needed to identify a register. In contrast, we need at least 16 bits to identify a memory location. As a consequence, good compilers attempt to place frequently accessed data items in registers. 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 19 Register Addressing Mode

20 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 20 As an example, consider the following pseudo code: total := 0 for (i = 1 to 400) total = total + marks[i] end for Even if the compiler allocates memory for variables i and total, it should move these variables to registers for the duration of the for loop. At the end of the loop, we can copy the values of these registers to memory. This arrangement is more efficient than accessing variables i and total directly from memory during each iteration. Register Addressing Mode

21 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 21 Where Are the Operands? (cont’d) Immediate Addressing Mode  Data is part of the instruction »operand is located in the code segment along with the instruction »Efficient as no separate operand fetch is needed »Typically used to specify a constant Example mov AL,75 This instruction uses register addressing mode for specifying the destination and immediate addressing mode to specify the source. Such instructions are said to use mixed mode addressing.

22 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 22 Where Are the Operands? (cont’d) Direct Addressing Mode  Data is in the data segment »Need a logical address to access data –Two components: segment:offset »Various addressing modes to specify the offset component –offset part is referred to as the effective address  The offset is specified directly as part of the instruction  We write assembly language programs using memory labels (e.g., declared using DB, DW,...) »Assembler computes the offset value for the label –Uses symbol table to compute the offset of a label

23 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 23 Where Are the Operands? (cont’d) Direct Addressing Mode (cont’d) Examples mov AL,[response] »Assembler replaces response by its effective address (i.e., its offset value from the symbol table) mov [table1],56 »table1 is declared as table1 TIMES 20 DW 0 »Since the assembler replaces table1 by its effective address, this instruction refers to the first element of table1 –In C, it is equivalent to table1[0] = 56

24 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 24 Where Are the Operands? (cont’d) Direct Addressing Mode (cont’d) Problem with direct addressing  Useful only to specify simple variables  Causes serious problems in addressing data types such as arrays »As an example, consider adding elements of an array –Direct addressing does not facilitate using a loop structure to iterate through the array –We have to write an instruction to add each element of the array Indirect addressing mode remedies this problem

25 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 25 Where Are the Operands? (cont’d) Indirect Addressing Mode The offset is specified indirectly via a register  Sometimes called register indirect addressing mode  For 16-bit addressing, the offset value can be in one of the three registers: BX, SI, or DI  For 32-bit addressing, all 32-bit registers can be used Example mov AX,[BX]  Square brackets [ ] are used to indicate that BX is holding an offset value »BX contains a pointer to the operand, not the operand itself

26 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 26 Where Are the Operands? (cont’d) Using indirect addressing mode, we can process arrays using loops Example: Summing array elements  Load the starting address (i.e., offset) of the array into BX  Loop for each element in the array »Get the value using the offset in BX –Use indirect addressing »Add the value to the running total »Update the offset in BX to point to the next element of the array

27 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 27 Where Are the Operands? (cont’d) Loading offset value into a register Suppose we want to load EBX with the offset value of table1 We can simply write mov EBX,table1  It resolves offset at the assembly time Another way of loading offset value »Using the lea instruction –This is a processor instruction –Resolves offset at run time

28 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 28 Where Are the Operands? (cont’d) Loading offset value into a register Using lea (load effective address) instruction  The format of lea instruction is lea register,source  The previous example can be written as lea BX,[table1]  May have to use lea in some instances »When the needed data is available at run time only –An index passed as a parameter to a procedure »We can write lea BX,[table1+SI] to load BX with the address of an element of table1 whose index is in the SI register –We cannot use the mov instruction to do this

29 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 29 Data Transfer Instructions We will look at three instructions  mov (move) »Actually copy  xchg (exchange) »Exchanges two operands  xlat (translate) »Translates byte values using a translation table Other data transfer instructions such as  movsx (move sign extended)  movzx (move zero extended) are discussed in Chapter 7

30 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 30 Data Transfer Instructions (cont’d) The mov instruction  The format is mov destination,source »Copies the value from source to destination »source is not altered as a result of copying »Both operands should be of same size »source and destination cannot both be in memory –Most Pentium instructions do not allow both operands to be located in memory –Pentium provides special instructions to facilitate memory-to-memory block copying of data

31 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 31 Data Transfer Instructions (cont’d) The mov instruction  Five types of operand combinations are allowed: Instruction type Example mov register,register mov DX,CX mov register,immediate mov BX,100 mov register,memory mov EBX,[count] mov memory,register mov [count],ESI mov memory,immediate mov [count],23  The operand combinations are valid for all instructions that require two operands

32 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 32 Assembly Example (1) ; Assembly program to print 3 + 8 - 6 on screen ; using immediate and register addressing modes.586 ; allow to use Pentium’s code option segment:use16 ; it’s a mixed mode.model small ; near code and data models.code ; start of the code segment start: mov bl,3h ; bl = 3 immediate mode add bl,8h ; bl = bl + 8 immediate

33 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 33 Assembly Example (1) sub bl,6h ; bl = bl - 6 add bl,30h ; convert hex. to decimal number mov dl,bl ; dl = bl register mode mov ah,2h ; DOS print character function int 21h ; print the character mov ah,4ch ; DOS end program function int 21h ; end the program end start

34 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 34 Assembly Example (2) ; Assembly program to print 3+8-6 on screen ; using direct addressing modes.586 ; allow to use Pentium’s code option segment:use16 ; it’s a mixed mode.model small ; near code and data models.data numbers db 3,8,6

35 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 35 Assembly Example (2).code ; start of the code segment start:.startup mov dl,[numbers] ; dl = numbers[0] add dl,[numbers+1] ; dl = dl + numbers[1] sub dl,[numbers+2] ; dl = dl - numbers[2] add dl,'0' ; convert result mov ah,2h ; DOS print character function int 21h ; print the character mov ah,4ch ; DOS end program function int 21h ; end the program end start

36 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 36 Assembly Example (3) ; Assembly program to print 3+8-6 on screen ; using indirect addressing modes.586 ; allow to use Pentium’s code option segment:use16 ; it’s a mixed mode.model small ; near code and data models.data numbers db 3,8,6.code ; start of the code segment start:.startup mov bx, offset numbers ;point to numbers[0] address

37 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 37 Assembly Example (3) mov dl,[bx] ; dl = numbers[0] inc bx ;point to next location in numbers-add 1 to bx add dl,[bx] ; dl = dl + numbers[1] inc bx ;point to next location in numbers sub dl,[bx] ; dl = dl - numbers[2] add dl,'0' ; convert result mov ah,2h ; DOS print character function int 21h ; print the character mov ah,4ch ; DOS end program function int 21h ; end the program end start

38 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 38 Assembly Example (4) ; Assembly program to print a text in reverse order ; using lea instruction instead of mov.586 ; allow to use Pentium’s code option segment:use16 ; it’s a mixed mode.model small ; near code and data models.data text db 'HELLO‘ ; declare text variable.code ; start of the code segment start: mov ax,@data mov ds,ax ; point to DS base address

39 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 39 Assembly Example (4) mov si,4 ; store the offset 4 in si register lea bx,[text+si] ;point to text[4] address mov dl,[bx] ; dl = text[4] mov ah,2h ; DOS print character function int 21h ; print the character dec bx ; bx point to previous location in text (bx = bx-1) mov dl,[bx] ; dl = text[3] mov ah,2h ; DOS print character function int 21h ; print the character dec bx ; bx point to previous location in text mov dl,[bx] ; dl = text[2] mov ah,2h ; DOS print character function int 21h ; print the character

40 2005 To be used with S. Dandamudi, “Introduction to Assembly Language Programming,” Second Edition, Springer, 2005.  S. Dandamudi Chapter 4: Page 40 Assembly Example (4) dec bx ; bx point to previous location in text mov dl,[bx] ; dl = text[1] mov ah,2h ; DOS print character function int 21h ; print the character dec bx ; bx now point to first location in text mov dl,[bx] ; dl = text[0] mov ah,2h ; DOS print character function int 21h ; print the character mov ah,4ch ; DOS end program function int 21h ; end the program end start


Download ppt "Overview of Assembly Language Chapter 4 S. Dandamudi."

Similar presentations


Ads by Google