Sei sulla pagina 1di 14

Programming using assembler:

 Arithmetic operations on HEX and BCD numbers

 Sum of series
DATA SEGMENT
ARRAY DB 10H,02H,03H,04H,03H, 05H, 06H,
10H,02H,03H
DATA ENDS
CODE SEGMENT
ASSUME CS: CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV CL, 0AH
MOV AL,00H
MOV SI,OFFSET ARRAY
UP: ADD AL,[SI]
INC SI

LOOP UP
MOV [SI+1], AL
MOV AX, 4C00H
INT 21H
CODE ENDS
END START

 Smallest and Largest numbers from array


Large
DATA SEGMENT
ARRAY DB 15H,45H,08H,78H,56H,02H,04H,12H,23H,09H

LARGEST DB 00H
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START:
MOV DX,DATA
MOV DS,DX

MOV CX,09H
MOV SI ,OFFSET ARRAY
MOV AL,[SI]
UP:INC SI
CMP AL,[SI]
JNC NEXT ;CHANGE
MOV AL,[SI]
NEXT:DEC CX
JNZ UP
MOV LARGEST,AL ; AL=78h

MOV AX,4C00H
INT 21H
CODE ENDS
END START
Small:
DATA SEGMENT

ARRAY DB 15H,45H,08H,56H,78H

SMALLEST DB 00H

DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START:

MOV DX,DATA

MOV DS,DX

CALL SMALLEST_NO

MOV AX,4C00H

INT 21H

SMALLEST_NO PROC

MOV CX,04H

MOV SI ,OFFSET ARRAY

MOV AL,[SI]

UP:INC SI

CMP AL,[SI]

JC NEXT

MOV AL,[SI]

NEXT:DEC CX

JNZ UP

MOV SMALLEST,AL ;AL=08H

RET

SMALLEST_NO ENDP

CODE ENDS

END START

 Sorting numbers in Ascending and Descending order


Descending:
DATA SEGMENT

ARRAY DB 06H,09H,22H,02H,07H,10H,11H,12H,13H,14H
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV BL,0AH

STEP1: MOV SI, OFFSET ARRAY

MOV CL,09H

STEP2: MOV AL,[SI]

CMP AL,[SI+1]

JNC DOWN

XCHG AL, [SI+1]

XCHG AL,[SI]

DOWN: ADD SI, 01

LOOP STEP2

DEC BL

JNZ STEP1

MOV AH,4CH

INT 21H

CODE ENDS

END START

Ascending:
DATA SEGMENT

NUM DB 06H,09H,22H,02H,07H

RESULT DB ?

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV CL,05H
LOOP1: LEA BX,NUM

MOV CH,04H

LOOP2: MOV AL,[BX]

INC BX

CMP AL,[BX]

JC DOWN

MOV DL,[BX]

MOV [BX],AL

DEC BX

MOV [BX],DL

INC BX

DOWN: DEC CH

JNZ LOOP2

DEC DL

JNZ LOOP1

INT 3

CODE ENDS

END START
 Finding ODD, EVEN
DATA SEGMENT

NUM DB 9H

ODD DB 0

EVEN_NO DB 0

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA
MOV DS,AX

MOV BL,NUM

ROR BL,1 ;or RCR

JNC DN ; check ENEN or ODD

ROL BL,1 ; restore number

MOV ODD,BL ; odd

JMP EXIT

DN: ROL BL,1

MOV EVEN_NO,BL ; even no


EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START

 Positive and negative numbers in array


data segment
arr db 04h,34h,89h,74h,25h
data ends
code segment
assume cs:code,ds:data
start:
mov dx,data
mov ds,dx
LEA si,arr
mov cl,05h
mov bl,00h ;neg
mov dl,00h ;pos
up: mov al,[si]
RCL al,01
jc down
inc dl
jmp l2
down:inc bl
l2: inc si
dec cl
jnz up
mov ah,4ch
int 21h
code ends
end start

 Block transfer
DATA SEGMENT

block1 db 10 dup(10h)

block2 db 10 dup(0)

DATA ENDS
CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV DX,DATA ;initialize data seg

MOV DS,DX

LEA SI,BLOCK1

LEA DI,BLOCK2
MOV CX,000AH

CLD

BACK:MOV AL,[SI] ; REP MOVSB

MOV [DI],AL

INC SI

INC DI

DEC CX

JNZ BACK

MOV AH,4CH

INT 21H

CODE ENDS

END START

 String operations-
1. length
DATA SEGMENT
STR1 DB ‘STUDENT$’ LENGTH_STRING DB?

DATA ENDS
CODE SEGMET
ASSUME CS:CODE, DS:DATA
Start:
MOV AX, DATA MOV DS, AX
MOV AL, ‘$’
MOV CX, 00H
MOV SI, OFFSET STR1
BACK: CMP AL, [SI]
JE DOWN
INC CL
INC SI
JMP BACK
DOWN: MOV LENGTH_STRING, CL
MOV AX, 4C00H
INT 21H
CODE ENDS
END START
2. Reverse
DATA SEGMENT

STRING DB 'GOOD MORNING$'

REV DB 0FH DUP(?)

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV DX,DATA

MOV DS,DX

LEA SI,STRING

MOV CL,0FH

LEA DI,REV

ADD DI,0FH

UP:MOV AL,[SI]

MOV [DI],AL

INC SI

DEC DI

LOOP UP

MOV AH,4CH

INT 21H

CODE ENDS

END START
3. Compare
Data segment
sstr db 'Solapur$'
dstr db 'Solapuz$'
slen db 00h
dlen db 00h
Data ends
Code segment
Assume CS:Code,DS:Data
start : mov DX,Data
mov DS,DX
LEA SI,sstr
L1 : mov AL,[SI]
CMP AL,'$'
JZ exit1
INC slen
INC SI
JMP L1
exit1:
LEA DI,dstr
L2 : mov AL,[DI]
CMP AL,'$'
JZ exit2
INC dlen
INC DI
JMP L2
exit2:
mov AL,slen
mov BL,dlen
CMP AL,BL
JNZ exit3
LEA SI,sstr
LEA DI,dstr
L3 : mov AL,[SI]
mov BL,[DI]
CMP AL,BL
JNZ exit3
INC SI
INC DI
DEC slen
JNZ L3
JMP END1
exit3:
mov AH,4CH
INT 21H
End1:Code Ends
End start

4. Concatenation
DATA SEGMENT
ST1 DB " Maharashtra board$"
LEN1 DB 0
ST2 DB " of technical
Education$" LEN2 DB 0
R DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, ,DS:DATA, ES:DATA
START: MOV AX,DATA
MOV DS,AX
MOV ES,AX
MOV SI, OFFSET ST1 ; Length of the first string in LEN1

MOV AL,'$'
NEXT1: CMP AL,[SI]
JE EXIT1
INC LEN1
INC SI
JMP NEXT1
EXIT1: MOV SI, OFFSET ST2 ; Length of the second string in LEN2 NEXT2: CMP
AL,[SI]
JE EXIT2
INC LEN2
INC SI
JMP NEXT2
EXIT2: MOV SI, OFFSET ST1 ; copy first string to R
MOV DI, OFFSET R
MOV CL, LEN1
REP MOVSB
MOV SI, OFFSET ST2 ; Concat second string to R
MOV CL, LEN2
REP MOVSB
MOV AH,4CH
INT 21H
CODE ENDS

END START

5. Copy
Data segment
str1 db 'Mic8086$'
str2 db ?
data ends
code segment
assume cs:code,ds:data
start:
mov dx,data
mov ds,dx
LEA si,str1
LEA di,str2
l1: mov al,[si]
cmp al,'$'
jz exit1
mov [di],al
inc si
inc di
jmp l1
exit1:
mov ah,4ch
int 21h
code ends
end start
 Count numbers of '1' and '0’ in 16 bit number
CODE SEGMENT
ASSUME CS:CODE
START:
MOV AX,1321H
MOV CL,16H
MOV BX,0000H
MOV DX,0000H
L2: RCR AX,01H
JNC L1
INC BL
JMP L3
L1:INC DL
JMP L3
L3: DEC CL
JNZ L2
MOV AH,4CH
INT 21H
CODE ENDS
END START

Potrebbero piacerti anche