Microprocessor Programming (22415) Unit 4: Assembly Language Hours: 16 Marks: 20
Microprocessor Programming (22415) Unit 4: Assembly Language Hours: 16 Marks: 20
Prepared by:
Mrs. Kousar Ayub A.
Lecturer(Selection Grade)
Computer Engg. Dept
M. H. Saboo Siddik Polytechnic
Mrs. Kousar Ayub Akumalla
1
Learning Outcomes
The learners will be able to:
• Writing Assembly language program for
given problem.
• Develop t he relevant program for given
problem.
• Apply the relevant control loop in the
program for given problem.
• Use of string instruction for strings/block
manipulate its elements.
Mrs. Kousar Ayub Akumalla 2
Structure of assembly language
program of 8086
Using segment directives
My_data segment
…… ;data declaration (data segment of program)
My_data ends
My_code segment
Assume cs:my_code, ds:my_data
…….. ; program code
(code segment of program)
INT 3
CODE ENDS
END START
Descending
DATA SEGMENT
order
x DW 42H,34H,26H,17H,09H
LEN EQU 05
ASCD DB 10 DUP(0)
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV BX,LEN-1
MOV CX,BX
UP1: MOV BX,CX
LEA SI,X
UP: MOV AX,[SI]
Descending order
MOV DX,[SI+2]
CMP AX,DX
JA DOWN
MOV [SI],DX
MOV [SI+2],AX
DOWN: INC SI
INC SI
DEC BX
JNZ UP
DEC CX
JNZ UP1
MOV AH,4CH
INT 21H
CODE ENDS
END START
Program to count even and/or odd nos in an array
.model small
.data
array dw 13H, 65H, 87H, 97H, 23H, 20H, 2H, 8H, 10H, 18H
even_nodw 00H
odd_nodw 00H
.code
Mov ax, @data
mov ds, ax
mov cx, 000AH
Mov si, offset array
next: movax, [si]
Ror a x, 1
Jc dn
Inc even_no
....to count even and/or odd nos in an
array
jmp down
dn: inc odd_no
down: add si, 2
loop next
Mov ax, even_no
Mov bx, odd_no
ends
end
Program to count number of 1’s in a
.model small given number.
.data
Num db 0FFH
ones db 00H
.code
Mov ax, @data
mov ds, ax
mov cx, 0008H
mov al, num
up: ror al, 1
Jnc dn
inc ones
dn: loop up
mov al, ones
mov ah, 4CH
int 21H
ends
end
Program to count number of 0’s in a
.model small
.data given number
numdb 0AAH
zeros db 00H
.code
movax, @data
mov ds, ax
mov cx, 0008H
mov al, num
up: ror al, 1
jcdn
inc zeros
dn: loop up
mov al, zeros
mov ah, 4CH
int 21H
ends
end
Program to count positive as well as
negative numbers in array
.model small
.data
array dw -0009H, 0010H, -0008H, 0001H, 0002H
posdw 00H
neg1 dw 00H
.code
movax, @data
mov ds, ax
mov cx, 0005H
lea si, array
up: mov al, [si]
rol al, 1
.......count positive as well as negative
numbers in array
Jc nev
Inc pos
Jmp dn
nev: inc neg1
dn: add si, 2
loop up
exit: movax, pos
Mov bx, neg1
mov ah, 4CH
int 21H
ends
end
. Program to add all positive numbers
.model small
.data
in array of 10 numbers
array dw -0009H, 0010H, -0008H, 0001H, 0002H, 0006H, 0008H,
0005H, -0001H, -0044H
posdw 0000H
sum dw 0000H
.code
movax, @data
mov ds, ax
mov cx, 000AH
lea si, array
up: mov al, [si]
rol al, 1
jcdn
incpos
movbx, [si]
add sum, bx
........add all positive numbers in array
of 10 numbers
movbx, sum
dn: add si, 2
loop up
exit:
movax, pos
movbx, sum
mov ah, 4CH
int 21H
ends
end
Convert
.model small
lowercase to upper case
.data
s1 db 'computer$'
s2 db 20 dup(‘$’)
.code
movax, @data
mov ds, ax
Mov si, offset s1
Mov di, offset s2
next: mov al, [si]
cmp al, '$'
je exit
Sub al,20h ; convert to upper case
Mov [di],al
Inc si
Inc di
Jmp next
Exit : ends
end
Convert upper case to lowercase
.model small
.data
s1 db 'COMPUTER$'
s2 db 20 dup(‘$’)
.code
movax, @data
mov ds, ax
Mov si, offset s1
Mov di, offset s2
next: mov al, [si]
cmp al, '$'
je exit
add al,20h ; convert to lower case
Mov [di],al
Inc si
Inc di
Jmp next
Exit : ends
end
Thank you…..
60