220 likes | 331 Views
Riyadh Philanthropic Society For Science Prince Sultan College For Woman Dept. of Computer & Information Sciences CS 251 Introduction to Computer Organization & Assembly Language Lecture 13 Program Structure. Outline. Translation of HHL to assembly language Program Structure
E N D
Riyadh Philanthropic Society For Science Prince Sultan College For Woman Dept. of Computer & Information Sciences CS 251 Introduction to Computer Organization & Assembly Language Lecture 13 Program Structure
Outline • Translation of HHL to assembly language • Program Structure • Memory model • Data Segment • Stack Segment • Code Segment • Input and Output Instructions • INT instruction Program Structure
Translation of HHL to Assembly Program Structure • Statement: B = A • Translation: MOV AX, A ; move A into AX MOV B, AX ; and then into B
Program Structure Program Structure • Assembly language programs consists of the following program segments: • Code. • Data. • Stack. • Each program segment is translated into a memory segment by the assembler.
Program Structure – Memory Model Model Description SMALL code in 1 segment data in 1 segment MEDIUM code > 1 segment data in 1 segment COMPACT code in 1 segment data > 1 segment LARGE code > 1 segment data > 1 segment no array larger than 64k bytes HUGE code > 1 segment data > 1 segment arrays may be larger than 64k bytes Program Structure • The size of code and data a program can have is determined by specifying a memory model using the .MODEL directive. • Syntax: .MODEL memory_model
Memory Model (Cont.) Program Structure • The appropriate model is small unless there is a lot of code or data • .Model Directive should come before the segment definitions
Program Structure – Stack Segment Program Structure • The purpose of the stack segment declaration is to set aside a block of memory (the stack area) to store the stack. • The stack area should be big enough to contain the stack at its maximum size. • Syntax: .STACK size ; where size is an optional number that specifies ; the stack area size in bytes. • Example: .STACK 100H ; sets aside 100H bytes for the stack area. ; (reasonable size for most applications). • If size is omitted, 1KB is set aside for the stack area.
Data Segment Program Structure • A program’s data segment contains all the variable definitions. • Constant definitions are often made here as well. (they may be placed elsewhere in the program since no memory allocation is involved). • To declare a data segment, we use the directive .DATA, followed by variable and constant declarations. • Example: .DATA WORD1 DW 2 MSG DB ‘this is a message’ MASK EQU 10010010B
Code Segment Program Structure • The code segment contains a program’s instructions. • Syntax: .CODE name ; where name is an optional name of segment. • There is no need for a name in a SMALL program, However, the assembler will generate an error. • Inside a code segment, instructions are organized as procedures.
Code Segment (Cont.) Program Structure • The simplest procedure definition is: name PROC ; name: is the name of the procedure. ; body of the procedure ; PROC & ENDP: are pseudo-ops that name ENDP ; delineate the procedure • Example of a code segment definition: .CODE MAIN PROC ; main procedure instructions MAIN ENDP ; other procedures go here
Program Structure – General model Program Structure .MODEL SMALL .STACK 100H .DATA ; data definitions go here .CODE MAIN PROC ; instructions go here MAIN ENDP ; other procedures go here END MAIN
Input and Output Instructions Program Structure • There are two categories of I/O service routines • The Basic Input/output System (BIOS) routine • The DOS routines
INT Instruction Program Structure • To invoke the DOS or BIOS routine, the INT (interrupt) instruction is used • Format INT interrupt_number • The interrupt_number is a number that specifies a routine
INT 21h Function number Routine 1single-key input 2 single-character output 9 character string output Program Structure • INT 21h may be used to invoke a large number of DOS functions • A particular function could be requested by placing a function number in AH & invoking INT 21h • Some of the functions are • INT 21h functions expect input values to be in certain registers and return output values in other registers
INT 21h – Function 1 Function 1: Single-Key Input Input: AH = 1 Output: AL = ASCII code if character key is pressed = 0 if non-character key is pressed Program Structure • To invoke the routine, the following instructions should be executed MOV AH, 1 ; input key function INT 21h ; ASCII code in AL
INT 21h – Function 2 Function 2: Display a character or execute a control function Input: AH = 2 DL = ASCII code of the display character Output: AL = ASCII code of the display character Program Structure • To invoke the routine, the following instructions should be executed MOV AH, 2 ; display character function MOV DL, ‘?’ ; character is ‘?’ INT 21h ; display character
INT 21h – Function 2 (Cont.) ASCII code (Hex) Symbol Function 07H BEL beep (sounds a tone) 08H BS backspace 09H HT tab 0AH LF line feed (new line) 0DH CR carriage return (start of current line) Program Structure • Function 2 may be used to perform control functions. • If DL contains the ASCII code of a control character, INT 21h causes the control function to be performed. • The principal control characters are :
LEA Instruction Program Structure • LEA (Load Effective Address) puts a copy of the source offset address into the destination. • Syntax: LEA destination, source Where destination is a general register and source is a memory location • Example: MSG DB 41H, 42H, 43H LEA DX, MSG puts the offset address of the variable MSG into DX
INT 21h – Function 9 Function 9: Display a string Input: AH = 9 DX = offset address of the string The string must end with a ‘$’ character A program containing a data segment should begins with these two instructions (initialize DS) Program Structure • To invoke the routine, the following instructions should be executed MOV AX, @Data MOV DS, AX MOV AH,9 ; display string function LEA DX, MSG ; get message (already defined string) INT 21h ; display string
INT 21h – DOS Function 4CH: Return the Control to DOS Input: AH = 4CH Program Structure • To invoke the routine, the following instructions should be executed MOV AH, 4CH ; DOS exit function INT 21h ; exit to DOS
ECHO Program Program Structure TITLE P1: ECHO PROGRAM .MODEL SMALL .STACK 100H .CODE MAIN PROC ; display prompt MOV AH,2 ; display character function MOV DL,'?' ; character is '?' INT 21H ; display it ; input a character MOV AH,1 ; read character function INT 21H ; character in AL MOV BL,AL ; save it in BL ; go to new line MOV AH,2 ; display character function MOV DL, 0DH ; carriage return INT 21H ; execute carriage return MOV DL, 0AH ; line feed INT 21H ; execute line feed ; display character MOV DL, BL ; retrieve character INT 21H ; and display it ; return to DOS MOV AH, 4CH ; DOS exit function INT 21H ; exit to DOS MAIN ENDP END MAIN
Print String Program TITLE P2: PRINT STRING PROGRAM .MODEL SMALL .STACK 100H .DATA MSG DB 'HELLO!$' .CODE MAIN PROC ; initialize DS MOV AX,@DATA ; get data segment MOV DS,AX ; initialize DS ; display message LEA DX,MSG ; get message MOV AH,9 ; display string function INT 21H ; display message ; return to DOS MOV AH, 4CH ; DOS exit function INT 21H ; exit to DOS MAIN ENDP END MAIN Program Structure