Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 100h
- .data
- ret_msg db 'Process returned 0 (0x0)$'
- ip_msg db 'n = $'
- inv db 'Invalid Input!$'
- new_line db 0ah,0dh,"$"
- space db ' $'
- i db 1
- j db 1
- char db 1 ; for storing input char
- n db 1 ; pre-process input char into numeric
- type db 1 ; type = 1 denotes number, type = 2 denotes upper case, type = 3 denotes lower case
- val db 1 ; for printing a character
- cnt_sp db 1 ; for storing number of spaces
- .code
- main proc
- mov ax, @data
- mov ds, ax
- INPUT:
- mov ah, 9
- lea dx, ip_msg
- int 21h
- mov ah, 1
- int 21h
- mov char, al
- ; new line
- mov ah, 9
- lea dx, new_line
- int 21h
- ; check if it is '$'
- cmp char, '$'
- je EXIT
- ; check if input character is a number
- cmp char, '9'
- jg Alphabet
- cmp char, '0'
- jle Invalid
- ; assigning input type and pre-process n for number
- mov type, 1
- mov bl, char
- mov n, bl
- sub n, 48
- jmp Display
- ; check if it is an Alphabet
- Alphabet:
- cmp char, 'A'
- jl Invalid
- cmp char, 'Z'
- jg Lower_Case
- ; assigning input type and pre-process n for Upper Case Alphabet
- mov type, 2
- mov bl, char
- mov n, bl
- sub n, 64
- jmp Display
- ; check for valid lower case alphabet
- Lower_Case:
- cmp char, 'a'
- jl Invalid
- cmp char, 'z'
- jg Invalid
- ; assigning input type and pre-process n for Lower Case Alphabet
- mov type, 3
- mov bl, char
- mov n, bl
- sub n, 96
- jmp Display
- Invalid:
- mov ah, 9
- lea dx, inv
- int 21h
- ; new line
- mov ah, 9
- lea dx, new_line
- int 21h
- int 21h
- jmp INPUT
- Display:
- ; Outer for loop
- mov i, 1
- mov bl, n
- OUTER_FOR:
- cmp i, bl
- jg OUTER_FOR_EXIT
- ; Inside Outer for
- mov cl, n
- sub cl, i
- mov cnt_sp, cl
- add cnt_sp, cl
- ; Loop for printing spaces
- mov j, 1
- mov cl, cnt_sp
- SPACE_FOR:
- cmp j, cl
- jg SPACE_FOR_EXIT
- ; inside space printing loop
- mov ah, 9
- lea dx, space
- int 21h
- inc j
- jmp SPACE_FOR
- SPACE_FOR_EXIT:
- ; First half
- mov j, 1
- mov cl, i
- FIRST_HALF_FOR:
- cmp j, cl
- jg FIRST_HALF_FOR_EXIT
- ; inside printing first half
- mov ch, j
- mov val, ch
- cmp type, 1
- je generate_number_first
- cmp type, 2
- je generate_upper_first
- jmp generate_lower_first
- generate_number_first:
- add val, 48
- jmp print_char_first
- generate_upper_first:
- add val, 64
- jmp print_char_first
- generate_lower_first:
- add val, 96
- jmp print_char_first
- print_char_first:
- mov ah, 2
- mov dl, val
- int 21h
- mov ah, 9
- lea dx, space
- int 21h
- inc j
- jmp FIRST_HALF_FOR
- FIRST_HALF_FOR_EXIT:
- ; Second half
- mov cl, i
- mov j, cl
- sub j, 1
- SECOND_HALF_FOR:
- cmp j, 1
- jl SECOND_HALF_FOR_EXIT
- ; inside printing second half
- mov ch, j
- mov val, ch
- cmp type, 1
- je generate_number_second
- cmp type, 2
- je generate_upper_second
- jmp generate_lower_second
- generate_number_second:
- add val, 48
- jmp print_char_second
- generate_upper_second:
- add val, 64
- jmp print_char_second
- generate_lower_second:
- add val, 96
- jmp print_char_second
- print_char_second:
- mov ah, 2
- mov dl, val
- int 21h
- mov ah, 9
- lea dx, space
- int 21h
- dec j
- jmp SECOND_HALF_FOR
- SECOND_HALF_FOR_EXIT:
- mov ah, 9
- lea dx, new_line
- int 21h
- inc i
- jmp OUTER_FOR
- OUTER_FOR_EXIT:
- mov ah, 9
- lea dx, new_line
- int 21h
- jmp INPUT
- ; exit
- EXIT:
- mov ah, 9
- lea dx, new_line
- int 21h
- lea dx, ret_msg
- int 21h
- main endp
- end main
Add Comment
Please, Sign In to add comment