Microprocessors LAB
1. Write ALP to print aAbBcC...
start:
mov cl, 26
mov dl, 'a'
l:
mov ah, 02h
int 21h
mov bl, dl
sub dl,20h;
mov ah, 02h
int 21h
mov dl, bl;
inc dl
loop l
end start
2. Write ALP to print abcd...
start:
mov cl,26d;
mov dl,'a'
l:
mov ah,02h
int 21h
inc dl;
loop l
end start
3. Write ALP to print 0123...
start:
mov cl,10
mov dl,'0'
l:
mov ah,02h
int 21h
inc dl
loop l
end start
4. Write ALP to print string(8-bit).
.model small
.data
a db "HELLO WORLD!$"
.code
start:
mov cl,0
mov ax,@data
mov ds,ax
mov dl, offset a
mov ah, 09h
int 21h
end start
5. Write ALP to print string(16-bit).
.model small
.data
a dw "HELLO WORLD welcome to 8086 emulation ttttttt!$"
.code
start:
mov cl,0
mov ax,@data
mov ds,ax
lea dx, a
mov ah,09h
int 21h
end start
6. Write ALP to print string character by character(8-bit).
.model small
.data
a db "HELLO WORLD!$"
.code
start:
mov cl,0
mov ax,@data
mov ds,ax
mov si, offset a
l:
mov dl,[si]
mov ah,02h
int 21h
inc si
cmp [si],'$'
jnz l
end start
7. Write ALP to print string character by character(16-bit).
.model small
.data
a dw "HELLO WORLD welcome to 8086 emulation ttttttt!$"
.code
start:
mov cl,0
mov ax,@data
mov ds,ax
lea si, a
l:
mov dx,[si]
mov ah,02h
int 21h
inc si
cmp [si],'$'
jne l
end start
8. Write ALP to print reverse of a string.
.model small
.data
a dw "HELLO WORLD!$"
.code
start:
mov ax,@data
mov ds,ax
lea si, a
mov cx, 0
l:
inc cx
inc si
cmp [si],'$'
jne l
mov ah, 02h
l2:
dec si
mov dl, [si]
int 21h
loop l2
end start
9. Write ALP to add two numbers(and store result in register).
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
OPR1 DW 1234H
OPR2 DW 0006H
RESULT DW 01 DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, OPR1
MOV BX, OPR2
CLC
ADD AX, BX
MOV DI, OFFSET RESULT
MOV [DI], AX
CODE ENDS
END START
10. Write ALP to subtract two numbers(and store result in register).
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
OPR1 DW 2339h
OPR2 DW 1238h
RESULT DW 01 DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AX, OPR1
MOV BX, OPR2
CLC
SUB AX, BX
MOV DI, OFFSET RESULT
MOV [DI], AX
CODE ENDS
END START
11. Write ALP to add two digits.
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
NUM1 DB "First no$"
NUM2 DB ,0DH,0AH, "Second no$"
RES DB ,0DH,0AH, "Result is$"
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV DX,OFFSET NUM1
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
MOV BL,AL
MOV DX,OFFSET NUM2
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
ADD AL, BL
MOV AH,0
AAA
MOV BX,AX
ADD BX,3030H
MOV DX, OFFSET RES
MOV AH,09H
INT 21H
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
END START
CODE ENDS
12. Write ALP to subtract two digits.
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
NUM1 DB "First no$"
NUM2 DB ,0DH,0AH, "Second no$"
RES DB ,0DH,0AH, "Result is$"
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV DX,OFFSET NUM1
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
MOV BL,AL
MOV DX,OFFSET NUM2
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
SUB BL, AL
MOV AL,BL
MOV AH,0
AAs
MOV BX,AX
ADD BX,3030H
MOV DX, OFFSET RES
MOV AH,09H
INT 21H
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
END START
CODE ENDS
13. Write ALP to multiply two digits.
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
NUM1 DB "First no$"
NUM2 DB ,0DH,0AH, "Second no$"
RES DB ,0DH,0AH, "Result is$"
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV DX,OFFSET NUM1
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
SUB AL,30H
MOV BL,AL
MOV DX,OFFSET NUM2
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
SUB AL,30H
MUL BL
MOV AH,0
AAM
MOV BX,AX
ADD BX,3030H
MOV DX, OFFSET RES
MOV AH,09H
INT 21H
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
END START
CODE ENDS
14. Write ALP to input 10 numbers and find out whether each is
even or odd.
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
NUM1 DB "Enter no $"
EVENMSG DB 10,13, "No. is EVEN$"
ODDMSG DB 10,13, "No. is ODD$"
COUNT EQU 10
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV CX, COUNT
AGAIN:
MOV DX,OFFSET NUM1
MOV AH,09H
INT 21H
MOV AH, 01H
INT 21H
ROR AL,01H
ODD:
JNC EVEN
LEA DX,ODDMSG
MOV AH,09H
INT 21H
DEC CX
JNZ AGAIN
EVEN:
LEA DX,EVENMSG
MOV AH,09H
INT 21H
DEC CX
JNZ AGAIN
CODE ENDS
END START
15. Write ALP to check if number is positive or negative.
DATA SEGMENT
NUM DB -12d
MES1 DB 10,13,'DATA IS POSITIVE $'
MES2 DB 10,13,'DATA IS NEGATIVE $'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV AL,NUM
ROL AL,1
JC NEGA
MOV DX,OFFSET MES1
JMP EXIT
NEGA: MOV DX,OFFSET MES2
EXIT: MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
16. Write ALP to calculate factorial of a number
ASSUME CS:CODE, DS:DATA
DATA SEGMENT
NUM DB 4
F DB 01H DUP(?)
DATA ENDS
CODE SEGMENT
START:
MOV AX, DATA
MOV DS, AX
MOV AH, 0
MOV AL, NUM
AGAIN:
DEC NUM
MUL NUM
MOV CL, NUM
CMP CL, 01
JNZ AGAIN
MOV DX,AL
MOV BX,OFFSET F
MOV [BX],AL
MOV AH,02H
INT 21H
CODE ENDS
END START