Download lab-06-ca - EduPit.com

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Lab 06
Summary
Items
Description
Course Title
Computer Architecture
Lab Title
To learn how to use Registers , Input /Output, Display Strings in
Assembly
Duration
3 Hours
Operating System
/Tool/Language
Emu8086
Objective
Practice how to Input, Output and Display Characters as well as strings
DIRECTIVES:
Assembler Directives are not assembly language instructions as they do not generate any machine
code
They are special codes placed in the assembly language program to instruct the assembler to
perform a particular task or function
They can be used to define symbol values, reserve and initialize storage space for variables and
control the placement of the program code





Tittle Directive
.MODEL directive
.STACK directive
.DATA directive
.CODE directive
Title Directive:
Maximum 60 characters wide title.
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
For example
TITLE print a Hello Word
MODEL directive
Specify how many code and data segments are necessary for the program.
There are many several types of memory small, compact, medium, large etc.
For example
.model small
Shows that’s no more than 64 k memory for code and 64k for data.
STACK DIRECTIVE:
This directive is optional and is used to define the size of the stack segment.
Syntax: .STACK <size>
.stack 100d (100 bytes stack segment)
.stack 100h (256 bytes stack segment)
.DATA directive
Used to define data segment necessary for our program.
Variables are stored in that segments.
Data can be of different types like byte, word, double word or quad word.
DB – Define Byte
DW – Define Word
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
DD – Define Double Word
DQ – Define Quad Word
DT – Define Ten Bytes
message db “Hello Word”,“$”
count db 20
<variable> <directive> < Value>
.CODE directive:
Indicate the beginning of instructions i.e. the assembly code.
The assembly language program is end with END directive.
INTERRUPTS
An interrupt is an event that causes the processor to suspend its present task and transfer
control to a new program called the interrupt service routine (ISR)
There are three sources of interrupts



Processor interrupts
Hardware interrupts generated by a special chip, for ex: 8259 Interrupt Controller.
Software interrupts
Software Interrupt is just similar to the way the hardware interrupt actually works. The INT
Instruction requests services from the OS, usually for I/O. These services are located in the OS.
INT has a range 0 -> FFh. Before INT is executed AH usually contains a function number that
identifies the subroutine.
The 8086 INT instruction can be used to cause the 8086 to do any one of 256 possible interrupt
types.
The desired type is specified as part of the instruction.
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Software interrupts produced by the INT instructions have many uses.
For example: INT 3 instruction to insert breakpoints in programs for debugging.
Another use of Software interrupt INT is to test various interrupts-service procedures.
For example: INT 0 instruction to send execution to a divide-by-zero interrupt – service
procedure without having to run the actual division program
REGISTERS
Registers are high-speed storage locations directly inside the CPU, designed to be accessed at much
higher speed than conventional memory.
Types of registers
General purpose Registers
8086 CPU has 8 general purpose registers, each register has its own name:
AX - the accumulator register (divided into AH / AL).
BX - the base address register (divided into BH / BL).
CX - the count register (divided into CH / CL).
DX - the data register (divided into DH / DL).
SI - source index register.
DI - destination index register.
BP - base pointer.
SP - stack pointer.
Despite the name of a register, it's the programmer who determines the usage for each general
purpose register.
The main purpose of a register is to keep a number (variable). The size of the above registers is 16
bit, it's something like: 0011000000111001b (in binary form), or 12345 in decimal (human) form.
4 general purpose registers (AX, BX, CX, DX) are made of two separate 8 bit registers, for example
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
if AX= 0011000000111001b, then AH=00110000b and AL=00111001b. Therefore, when
you modify any of the 8 bit registers 16 bit register is also updated, and vice-versa. The same
is for other 3 registers, "H" is for high and "L" is for low part.
Because registers are located inside the CPU, they are much faster than memory. Accessing a
memory location requires the use of a system bus, so it takes much longer. Accessing data in a
register usually takes no time.
Therefore, you should try to keep variables in the registers. Register sets are very small and most
registers have special purposes which limit their use as variables, but they are still an excellent place
to store temporary data of calculations.
SEGMENT REGISTERS
CS - points at the segment containing the current program.
DS - generally points at segment where variables are defined.
ES - extra segment register, it's up to a coder to define its usage.
SS - points at the segment containing the stack.
Although it is possible to store any data in the segment registers, this is never a good idea. The
segment registers have a very special purpose pointing at accessible blocks of memory.
Segment registers work together with general purpose register to access any memory value. For
example if we would like to access memory at the physical address 12345h (hexadecimal), we should
set the DS = 1230h and SI = 0045h. This is good, since this way we can access much more memory
than with a single register that is limited to 16 bit values.
CPU makes a calculation of physical address by multiplying the segment register by 10h and adding
general purpose register to it (1230h * 10h +45h = 12345h):
The address formed with 2 registers is called an effective address.
By default BX, SI and DI registers work with DS segment register;BP and SP work with SS segment
register.
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Other general purpose registers cannot form an effective address! Also, although BX
can form an effective address, BH and BL cannot!
FLAG REGISTERS
STATUS FLAGS


Allow the results of one instruction to influence later instructions.
The arithmetic instructions use OF, SF, ZF, AF, PF, and CF
Zero Flag (ZF)
If the result is zero, zero flag is set
Once a flag is set, it remains in that state until another instruction that affects the flags is
executed
Not all instructions affect all status flags
add and sub affect all six flags
inc and dec affect all but the carry flag
mov, push, and pop do not affect any flags
Example
Initially, assume ZF = 0
MOV AL,55H
; ZF is still zero
SUB AL,55H
; Result is 0
; ZF is set (ZF = 1)
Sign Flag (SF)
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Indicates the sign of the result
Useful only when dealing with signed numbers
 MOV AL,15
 ADD AL,97
Clears the sign flag as sets the sign flag as
the result is 112 (or 0111000 in binary)
 MOV AL,15
 SUB AL,97
sets the sign flag as the result is -82 (or 10101110 in binary)
Carry Flag (CF)
Records the fact that the result of an arithmetic operation on unsigned numbers is out of
range
The carry flag is set in the following example
MOV AL,0FH
ADD AL,0F1H
Overflow Flag
Indicates out-of-range result on signed numbers
Signed number counter part of the carry flag
The following code sets the overflow flag but not the carry flag





MOV AL,72H ; 72H = 114D
MOV AL,0EH ; 0EH = 14D
8 bits
-128 to +127
16 bits
-32,768 to +32,767
32 bits
-2,147,483,648 to +2,147,483,647
Auxiliary flag (AF)
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Indicates whether an operation produced a carry or borrow in the low-order 4 bits
(nibble) of 8, 16,or 32Bit operands (i.e. operand size doesn’t matter)


MOV AL,43 ; 43D = 0010 1011B
ADD AL,94 ; 94D = 0101 1110B
;137D = 1000
1001B
carry from lower 4 bits
MOV INSTRUCTION
Copies the second operand (source) to the first operand (destination).
The source operand can be an immediate value, general-purpose register or
memory location.
The destination register can be a general-purpose register, or memory
location.
Both operands must be the same size, which can be a byte or a word.
These types of operands are supported:
MOV REG, memory
MOV memory, REG
MOV REG, REG
MOV memory, immediate
MOV REG, immediate
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory: [BX], [BX+SI+7], variable, etc...
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
immediate: 5, -24, 3Fh, 10001101b, etc...
For segment registers only these types of MOV are supported:
MOV SREG, memory
MOV memory, SREG
MOV REG, SREG
MOV SREG, REG
SREG: DS, ES, SS, and only as second operand: CS.
REG: AX, BX, CX, DX, AH, AL, BL, BH, CH, CL, DH, DL, DI, SI, BP, SP.
memory: [BX], [BX+SI+7], variable, etc...
The MOV instruction cannot be used to set the value of the CS and IP registers.
Example:
ORG 100h ; directive required for a COM program.
MOV AX, 0B800h ; set AX to hexadecimal value of B800h.
MOV DS, AX ; copy value of AX to DS.
MOV CL, 'A' ; set CL to ASCII code of 'A', it is 41h.
MOV CH, 01011111b ; set CH to binary value.
MOV BX, 15Eh ; set BX to 15Eh.
MOV [BX], CX ; copy contents of CX to memory at B800:015E
RET ; returns to operating system.
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Addition of binary digits
Example # 01
.code
main proc
MOV AL,01001011b
MOV BL,00000011b
ADD AL,BL
MOV DL, AL
CX (Count Register)

MOV AH,2H
INT 21H
Contains the count for certain instructions e,g shift count, rotate the number of bytes and
a counter with loop instruction.

MOV(ECX),
ax,4C00h
Can be accessed as 32 bit
16 bit (CX) or 8 bit (CH or CL) register 32 bit

21H
General Purpose use inINT
ADD,
MUL, DIV, MOV

Special Purpose use
in LOOP
main
endp etc.
Example # 02end
main
.code
main proc
MOV CL,12
MOV BL,65
AGN:INC BL
MOV DL, BL
MOV AH,2H
21H / Output
IntroductionINT
to Input
LOOP AGN

In 8086 assembly language, we use a software interrupt mechanism for I/O.

An interrupt signals the processor to suspend its current activity (i.e. running your
ax,4C00h
program) MOV
and to
pass control to an interrupt service program (i.e. part of the operating
system). INT 21H
main endp
end main
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering

A software interrupt is one generated by a program (as opposed to one
generated by hardware).

The 8086 INT instruction generates a software interrupt.

For I/O and some other operations, the number used is 21h.

A Specific number is placed in the register AH to specify which I/O operation (e.g. read a
character, display a character) you wish to carry out.

When the I/O operation is finished, the interrupt service program terminates and
program will be resumed at the instruction following int.
Example # 03 Write a code fragment to display the character ‘a’
on the screen
;To Display the character 'a'
org 100h
.data
.code
main proc
mov dl, 'a'
movInput
ah,2hfrom User
Character
INT 21H
To get the input from keyboard a subprogram at 1h will be called. First 1h will be placed in
ah and then an interrupt 21h generated to call the subprogram. Finally the character will be
placedmain
in alendp
register.
end main
Example
mov ah,1h
; Keyboard input subprogram
INT 21H
; Call the subprogram to get character input and
stored in al
Note:
Carriage Return ASCII (0DH) is the control character to bring the cursor to the start of a
line.
;display Return
mov dl, 0dh
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
mov ah, 2h
int 21h ; display Carriage Return

Line-feed ASCII (oAh) is the control character that brings the cursor down to the next
line on the screen.
;display Line-feed
mov dl, 0ah
mov ah, 2h
int 21h ; display Line Feed
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
Example # 4: Write a program to read and display a character.
;To read a character from keyboard
org 100h
.data
inMsg db "Enter a character ",'$'
newline db 0dh,0ah,'$'
outMsg db "User enter character ",'$'
.code
main proc
;To display input message
mov ax, @data
mov ds, ax
mov dx, offset inMsg
mov ah, 9
INT 21H
;Get input from keyboard
mov ah,1h
INT 21H
mov bl, al
;Move cursor to new line
String Output
mov ax, @data

A string is a list of characters treated as a unit.

In 8086 assembly language, single or double quotes may be used to denote a string
mov ds, ax
constant.

mov dx, offset newline
mov ah, 9
For Defining String
Variables following 3 definitions are equivalent ways of defining a
string "abc":
INT 21H
var1 db "abc" ; string constant
;To display ouput message
mov ax, @data
mov ds, ax
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
var2 db ‘a’, ‘b’, ‘c’ ; character constants
var3 db 97, 98, 99 ; ASCII codes

The first version simply encloses the string in quotes. (preferred method)

The second version defines a string by specifying a list of the character constants
that make up the string.

The third version defines a string by specifying a list of the ASCII codes that make
up the string

In order to display string using MS-DOS subprogram (number 9h), the string must be
terminated with the ‘$’ character.

In order to display a string we must know where the string begins and ends.

The beginning of string is given by obtaining its address using the offset operator.

The end of a string may be found by either knowing in advance the length of the string or
by storing a special character at the end of the string.
FATIMA JINNAH WOMEN UNIVERSITY
Department Of Software Engineering
TASK # 01
Write a program that input a character from user 2 times. The program will display the character entered by user 2
times on screen in newline(without using a loop).
Sample input vs output:
Please enter the character? A
you have entered the character A
you have entered the character A
Please enter another character? B
you have entered the character B
you have entered the character B
TASK # 02
Write a program that input a character from user is in lowercase, the program will convert it to uppercase and will
display it on console after conversion.
Hint: - The ASCII codes for lowercase letters (a-z) are 97-122. In order to convert a lowercase letter to uppercase
letter, just subtract 32 from its ASCII code.
Sample input vs output:
Please enter an alphabet in lower case? a
Upper case of the input is : A
TASK # 03
Write an Assembly code which take an alphabet from user and print the next and previous alphabets on the screen.
Sample input vs output:
Please enter an alphabet ? d
Previous alphabet in English grammar is : c
You have entered alphabet : d
Next alphabet in English grammar is : e