Average of The Array Elements
Average of The Array Elements
data segment
array db 9 dup(?) ; Array of numbers (uninitialized)
msg db "AVERAGE = $" ; Result message
input_msg db "Enter 9 numbers (0-9), one at a time: $"
newline db 0Dh, 0Ah, '$' ; Carriage return + line feed
result db '00', '$' ; Store final result
result1 db '00', '$' ; Store intermediate result
data ends
stack segment
dw 128 dup(?) ; Allocate stack space
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
; Initialize data segment
mov ax, data
mov ds, ax
input_loop:
; Get single character input
mov ah, 01h ; Function to read character
int 21h
; Print newline
; Save dx
lea dx, newline
mov ah, 09h
int 21h
; Restore dx
inc si ; Move to next array position
loop input_loop ; Repeat until 9 numbers are entered
sum_loop:
add al, array[si] ; Add current element
inc si ; Move to next element
loop sum_loop ; Repeat until done
; Calculate average
div bl ; Divide sum by array size
; Convert to ASCII
mov bl, al ; Save result
add bl, '0' ; Convert to ASCII
mov result1[0], bl ; Store first digit
mov result1[1], '$' ; End string
; Display result
lea dx, result1
mov ah, 09h
int 21h
; Exit program
mov ah, 4Ch
int 21h
code ends
end start
Factorial Calculator
data segment
prompt_msg db 'Enter a number (0-5): $'
result_msg db 13,10,'Factorial = $'
num db ?
result dw ?
newline db 13,10,'$'
data ends
stack segment
dw 128 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
; Initialize data segment
mov ax, data
mov ds, ax
; Display prompt
lea dx, prompt_msg
mov ah, 09h
int 21h
; Get input
mov ah, 01h
int 21h
sub al, '0' ; Convert from ASCII to number
mov num, al ; Store input number
; Calculate factorial
mov al, num
call factorial ; Result will be in AX
mov result, ax ; Store result
; Exit program
mov ah, 4ch
int 21h
; Factorial procedure
factorial proc
push bx ; Save registers
fact_done:
pop bx ; Restore registers
ret
factorial endp
convert_loop:
mov dx, 0 ; Clear DX for division
div bx ; Divide AX by 10
push dx ; Save remainder (digit)
inc cx ; Increment digit counter
test ax, ax ; Check if quotient is 0
jnz convert_loop
display_loop:
pop dx ; Get digit
add dl, '0' ; Convert to ASCII
mov ah, 02h ; Display character function
int 21h
loop display_loop
pop dx
pop cx
pop bx
pop ax
ret
display_num endp
code ends
end start
GCD
data segment
prompt1 db 'Enter first number: $'
prompt2 db 0Dh,0Ah,'Enter second number: $'
result_msg db 0Dh,0Ah,'GCD = $'
num1 db ?
num2 db ?
newline db 0Dh,0Ah,'$'
data ends
stack segment
dw 128 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
; Initialize data segment
mov ax, data
mov ds, ax
; Calculate GCD
mov al, num1
mov bl, num2
call gcd ; Result will be in AL
; Exit program
mov ah, 4ch
int 21h
gcd_loop:
cmp bl, 0 ; Check if second number is 0
je gcd_done ; If yes, first number is GCD
gcd_done:
pop dx ; Restore registers
pop bx
ret
gcd endp
code ends
end start
Prime
data segment
prompt_msg db 'Enter a number (1-9): $'
prime_msg db 0Dh,0Ah,'Number is PRIME$'
not_prime_msg db 0Dh,0Ah,'Number is NOT PRIME$'
num db ?
newline db 0Dh,0Ah,'$'
data ends
stack segment
dw 128 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
; Initialize data segment
mov ax, data
mov ds, ax
; Display prompt
lea dx, prompt_msg
mov ah, 09h
int 21h
; Get input
mov ah, 01h
int 21h
sub al, '0' ; Convert from ASCII to number
mov num, al
; Display result
cmp al, 1
je is_prime
is_prime:
lea dx, prime_msg
display_result:
mov ah, 09h
int 21h
; Exit program
mov ah, 4ch
int 21h
; Check if number is 1 or 2
cmp bl, 1
je not_prime
cmp bl, 2
je prime
check_loop:
cmp cl, bl ; Compare divisor with number
jae prime ; If divisor >= number, it's prime
mov ah, 0
mov al, bl
div cl ; Divide number by current divisor
cmp ah, 0 ; Check remainder
je not_prime ; If divisible, not prime
prime:
mov al, 1 ; Return 1 for prime
jmp check_done
not_prime:
mov al, 0 ; Return 0 for not prime
check_done:
pop dx
pop cx
pop bx
ret
check_prime endp
code ends
end start
Fibonacci Series
data segment
prompt_msg db 'Enter number of terms (1-9): $'
result_msg db 0Dh,0Ah,'Fibonacci Series: $'
space db ' $'
num db ?
first dw 0
second dw 1
newline db 0Dh,0Ah,'$'
data ends
stack segment
dw 128 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
; Initialize data segment
mov ax, data
mov ds, ax
; Display prompt
lea dx, prompt_msg
mov ah, 09h
int 21h
; Get input
mov ah, 01h
int 21h
sub al, '0' ; Convert from ASCII to number
mov num, al
cmp cl, 2
jb exit_prog ; If count < 2, exit
fib_loop:
cmp cl, 0
je exit_prog ; If counter is 0, exit
; Display number
push ax ; Save sum
push bx ; Save second number
push cx ; Save counter
call display_num
exit_prog:
mov ah, 4ch
int 21h
convert_loop:
mov dx, 0 ; Clear DX for division
div bx ; Divide AX by 10
push dx ; Save remainder (digit)
inc cx ; Increment digit counter
test ax, ax ; Check if quotient is 0
jnz convert_loop
display_loop:
pop dx ; Get digit
add dl, '0' ; Convert to ASCII
mov ah, 02h ; Display character function
int 21h
loop display_loop
pop dx
pop cx
pop bx
pop ax
ret
display_num endp
code ends
end start
REVERSE ARRAY
data segment
array db 100 dup(?)
n db ?
msg1 db "Enter array size (1-9): $"
msg2 db "Enter numbers (0-9): $"
msg3 db "Reversed array: $"
newline db 0Dh, 0Ah, '$'
data ends
stack segment
dw 128 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
mov ax, data
mov ds, ax
inc si
loop input_loop
; Reverse array
lea si, array
lea di, array
xor ax, ax ; Clear AX
mov al, n
dec al
add di, ax ; Point to last element
; Print result
lea dx, msg3
mov ah, 09h
int 21h
inc si
loop print_loop
data segment
array db 100 dup(?)
freq db 10 dup(0)
n db ?
msg1 db "Enter array size (1-9): $"
msg2 db "Enter numbers (0-9): $"
msg3 db "Frequency count:$"
newline db 0Dh, 0Ah, '$'
data ends
stack segment
dw 128 dup(?)
stack ends
code segment
assume cs:code, ds:data, ss:stack
start:
mov ax, data
mov ds, ax
; Get size
lea dx, msg1
mov ah, 09h
int 21h
; Input array
lea dx, msg2
mov ah, 09h
int 21h
xor cx, cx
mov cl, n
lea si, array
input_loop:
mov ah, 01h
int 21h
inc si
loop input_loop
; Count frequencies
xor cx, cx
mov cl, n
lea si, array
count_loop:
xor bx, bx
mov bl, [si]
inc freq[bx]
inc si
loop count_loop
; Display results
lea dx, msg3
mov ah, 09h
int 21h
mov cx, 10
xor bx, bx
print_freq:
mov dl, bl
add dl, '0'
mov ah, 02h
int 21h
inc bx
loop print_freq