Transcript
Page 1: Assembly Language Lecture  2

Assembly Language

Lecture 2

Page 2: Assembly Language Lecture  2

Lecture Outline

• Program Structure• Memory models• Data Segment• Stack Segment• Code Segment

• Input and Output Instructions• INT Instruction

Page 3: Assembly Language Lecture  2

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.

Page 4: Assembly Language Lecture  2

Program Structure - Memory Models

• 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

Model DescriptionSMALL code in 1 segment data in 1 segmentMEDIUM code > 1 segment data in 1 segmentCOMPACT code in 1 segment data > 1 segmentLARGE code > 1 segment data > 1 segment

no array larger than 64k bytesHUGE code > 1 segment data > 1 segment

arrays may be larger than 64k bytes

Page 5: Assembly Language Lecture  2

Program Structure - Memory Models

• The appropriate model is SMALL, unless there is a lot of code or data.

• .MODEL directive should come before segment definitions.•A segment is 216 (64 k)

Page 6: Assembly Language Lecture  2

Program Structure - Stack Segment

• 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.

Page 7: Assembly Language Lecture  2

Program Structure - Data Segment

• 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’

Page 8: Assembly Language Lecture  2

Program Structure - Code Segment

•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.

Page 9: Assembly Language Lecture  2

Program Structure - Code Segment

• 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

Page 10: Assembly Language Lecture  2

Program Structure - A General Form of a .SMALL model program

.MODEL SMALL

.STACK 100H

.DATA; data definitions go here.CODEMAIN PROC; instructions go hereMAIN ENDP; other procedures go hereEND MAIN

Page 11: Assembly Language Lecture  2

Input and Output Instructions

• There are two categories of I/O service routines:• The Basic Input/Output System (BIOS) routines.• The DOS routines.

Page 12: Assembly Language Lecture  2

INT Instruction

• To invoke a DOS or BIOS routine, the INT (interrupt) instruction is used.

• Format: INT interrupt_number

where interrupt_number is a number that specifies a routine.

Page 13: Assembly Language Lecture  2

INT 21h

• INT 21h may be used to invoke a large number of DOS functions.

• A particular function is requested by placing a function number in the AH register and invoking INT 21h.

• Some of the functions are:

• INT21h functions expect input values to be in certain registers and return output values in other registers.

Function number Routine1 single-key input2 single-character output9 character string output

Page 14: Assembly Language Lecture  2

INT 21h

• To invoke the routine, the following instructions should be executed: MOV AH,1 ; input key function INT 21H ; ASCII code in AL

Function 1: Single-Key InputInput: AH = 1Output: AL = ASCII code if character key is pressed = 0 if non-character key is pressed

Page 15: Assembly Language Lecture  2

INT 21h

• To invoke the routine, the following instructions should be executed: MOV AH, 2 ; display character function MOV DL, '?' ; character is '?' (or any other character) INT 21H ; display character

Function 2: Display a character or execute a control functionInput: AH = 2

DL = ASCII code of the characterOutput AL = ASCII code of the character

Page 16: Assembly Language Lecture  2

INT 21h

• 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 :

ASCII code (Hex) Symbol Function07H BEL beep (sounds a tone)08H BS backspace09H HT tab0AH LF line feed (new line)0DH CR carriage return (start of current line)

Page 17: Assembly Language Lecture  2

INT 21h

• 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 (Load Effective Address) INT 21H ; display string

Function 9: Display a stringInput: AH = 9 DX = offset address of string.

The string must end with a '$' character

A program containing a data segment should begins with these two instructions

Page 18: Assembly Language Lecture  2

INT 21h

• To invoke the routine, the following instructions should be executed: MOV AH, 4CH ; DOS exit function INT 21H ; exit to DOS

Function 4CH: Returning control to DOSInput: AH = 4CH

Page 19: Assembly Language Lecture  2

TITLE P1: ECHO PROGRAM .MODEL SMALL.STACK 100H.CODEMAIN PROC; display prompt

MOV AH,2 ; display character functionMOV DL,'?' ; character is '?'INT 21H ; display it

; input a characterMOV AH,1 ; read character functionINT 21H ; character in ALMOV BL,AL ; save it in BL

; go to new lineMOV AH,2 ; display character functionMOV DL, 0DH ; carriage returnINT 21H ; execute carriage returnMOV DL, 0AH ; line feedINT 21H ; execute line feed

; display characterMOV DL, BL ; retrieve characterINT 21H ; and display it

; return to DOSMOV AH, 4CH ; DOS exit functionINT 21H ; exit to DOS

MAIN ENDP END MAIN

Echo Program

Page 20: Assembly Language Lecture  2

Print String Program

TITLE P2: PRINT STRING PROGRAM.MODEL SMALL.STACK 100H.DATAMSG DB 'HELLO!$'.CODEMAIN PROC; initialize DS

MOV AX,@DATA; get data segmentMOV DS,AX ; initialize DS

; display messageLEA DX,MSG ; get messageMOV AH,9 ; display string functionINT 21H ; display message

; return to DOSMOV AH, 4CH ; DOS exit functionINT 21H ; exit to DOS

MAIN ENDPEND MAIN


Top Related