8086 Assembly Language Programs (TASM)
1■■ ALP for Uppercase to Lowercase and Lowercase to
Uppercase
; Program: Convert Uppercase to Lowercase and vice versa
; Model: Small | Assembler: TASM
DATA SEGMENT
STR DB 'A','b','C','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV SI, OFFSET STR
NEXT:
MOV AL, [SI]
CMP AL, '$'
JE EXIT
CMP AL, 'A'
JB SKIP
CMP AL, 'Z'
JBE TOLOWER
CMP AL, 'a'
JB SKIP
CMP AL, 'z'
JBE TOUPPER
JMP SKIP
TOLOWER:
ADD AL, 32
JMP STORE
TOUPPER:
SUB AL, 32
STORE:
MOV [SI], AL
SKIP:
INC SI
JMP NEXT
EXIT:
MOV AH, 4CH
INT 21H
CODE ENDS
END START
2■■ ALP for Addition, Subtraction, Multiplication, Division (8-bit
and 16-bit)
; 8-bit Arithmetic Operations
DATA SEGMENT
A DB 25H
B DB 05H
SUM DB ?
DIFF DB ?
PROD DW ?
QUOT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; Addition
MOV AL, A
ADD AL, B
MOV SUM, AL
; Subtraction
MOV AL, A
SUB AL, B
MOV DIFF, AL
; Multiplication
MOV AL, A
MOV BL, B
MUL BL
MOV PROD, AX
; Division
MOV AL, A
MOV BL, B
DIV BL
MOV QUOT, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
3■■ ALP to Find Largest and Smallest in an Array
DATA SEGMENT
ARR DB 05H,09H,02H,0AH,04H
N DB 05
MAX DB ?
MIN DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV CL, N
MOV SI, OFFSET ARR
MOV AL, [SI]
MOV BL, AL
DEC CL
INC SI
NEXT:
MOV AL, [SI]
CMP AL, BL
JG UPDATE_MAX
CMP AL, MAX
JL UPDATE_MIN
CONT:
INC SI
LOOP NEXT
JMP ENDPROG
UPDATE_MAX:
MOV BL, AL
JMP CONT
UPDATE_MIN:
MOV MAX, AL
JMP CONT
ENDPROG:
MOV MAX, BL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
4■■ ALP to Find Occurrence of a Given Number in Array
DATA SEGMENT
ARR DB 5,3,2,3,1,3
N DB 6
NUM DB 3
COUNT DB 0
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV CL, N
MOV SI, OFFSET ARR
MOV BL, NUM
MOV AL, 0
AGAIN:
CMP [SI], BL
JNE SKIP
INC AL
SKIP:
INC SI
LOOP AGAIN
MOV COUNT, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
5■■ ALP for Addition, Subtraction, Multiplication, Division of
BCD Numbers
DATA SEGMENT
A DB 25H
B DB 35H
SUM DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
; ADDITION OF BCD NUMBERS
MOV AL, A
ADD AL, B
DAA
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
6■■ ALP to Add 10 Numbers in a Series of Array
DATA SEGMENT
ARR DB 1,2,3,4,5,6,7,8,9,10
SUM DB 0
N DB 10
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV CL, N
MOV SI, OFFSET ARR
MOV AL, 0
AGAIN:
ADD AL, [SI]
INC SI
LOOP AGAIN
MOV SUM, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
7■■ Block Transfer Program (Using String Instructions)
DATA SEGMENT
SRC DB 'HELLO'
DEST DB 5 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, ES:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV ES, AX
LEA SI, SRC
LEA DI, DEST
MOV CX, 5
CLD
REP MOVSB
MOV AH, 4CH
INT 21H
CODE ENDS
END START
8■■ Program for Concatenation of Two Strings
DATA SEGMENT
STR1 DB 'HELLO ', '$'
STR2 DB 'WORLD$'
RESULT DB 20 DUP('$')
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
LEA SI, STR1
LEA DI, RESULT
COPY1:
LODSB
CMP AL, '$'
JE COPY2
STOSB
JMP COPY1
COPY2:
LEA SI, STR2
NEXT2:
LODSB
STOSB
CMP AL, '$'
JNE NEXT2
MOV AH, 4CH
INT 21H
CODE ENDS
END START
9■■ Program for Shift and Rotate Instructions
DATA SEGMENT
NUM DB 0F2H
RESULT DB ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV AL, NUM
ROL AL, 1
MOV RESULT, AL
MOV AH, 4CH
INT 21H
CODE ENDS
END START
■ Sorting Array in Ascending and Descending Order
DATA SEGMENT
ARR DB 5,3,8,1,2
N DB 5
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE, DS:DATA
START:
MOV AX, DATA
MOV DS, AX
MOV CL, N
OUTER:
MOV SI, OFFSET ARR
MOV CH, N
DEC CH
INNER:
MOV AL, [SI]
CMP AL, [SI+1]
JBE SKIP
XCHG AL, [SI+1]
MOV [SI], AL
SKIP:
INC SI
DEC CH
JNZ INNER
DEC CL
JNZ OUTER
MOV AH, 4CH
INT 21H
CODE ENDS
END START
; For Descending: replace JBE with JAE