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
Translation of HHL to assembly language Program Structure Memory model Data Segment Stack Segment Code Segment Input and Output Instructions INT instruction Program Structure2
Statement: B = A Translation: MOV AX, A ; move A into AX MOV B, AX ; and then into B 3
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. 4
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 5 ModelDescription SMALL code in 1 segment data in 1 segment MEDIUMcode > 1 segment data in 1 segment COMPACTcode in 1 segment data > 1 segment LARGEcode > 1 segmentdata > 1 segment no array larger than 64k bytes HUGEcode > 1 segmentdata > 1 segment arrays may be larger than 64k bytes
Program Structure The appropriate model is small unless there is a lot of code or data .Model Directive should come before the segment definitions 6
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:.STACKsize ; 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. 7
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 WORD1DW 2 MSGDB ‘this is a message’ MASKEQU B 8
Program Structure The code segment contains a program’s instructions. Syntax:.CODEname ; 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. 9
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 10
Program Structure. MODEL SMALL.STACK 100H.DATA ; data definitions go here.CODE MAIN PROC ; instructions go here MAIN ENDP ; other procedures go here ENDMAIN 11
Program Structure There are two categories of I/O service routines The Basic Input/output System (BIOS) routine The DOS routines 12
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 13
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 14 Function number Routine 1single-key input 2single-character output 9character string output
Program Structure To invoke the routine, the following instructions should be executed MOV AH, 1; input key function INT21h; ASCII code in AL 15 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, 2; display character function MOVDL, ‘?’; character is ‘?’ INT21h; display character 16 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 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 : 17 ASCII code (Hex) Symbol Function 07HBELbeep (sounds a tone) 08HBSbackspace 09HHTtab 0AHLFline feed (new line) 0DHCRcarriage return (start of current line)
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 18
Program Structure To invoke the routine, the following instructions should be executed MOV MOVDS, AX MOVAH,9; display string function LEADX, MSG; get message (already defined string) INT21h; display string 19 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 MOVAH, 4CH; DOS exit function INT21h; exit to DOS 20 Function 4CH: Return the Control to DOS Input: AH = 4CH
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 21
Program Structure22 TITLE P2: PRINT STRING PROGRAM.MODEL SMALL.STACK 100H.DATA MSG DB'HELLO!$'.CODE MAIN PROC ; initialize DS MOV 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