Microprocessor-Lab-x86-asm: Name "Hello-World" Org
Microprocessor-Lab-x86-asm: Name "Hello-World" Org
1. Colored HelloWorld.
Code:
name "hello-world"
org 100h
; set video mode
mov ax, 3 ; text mode 80x25, 16 colors, 8 pages (ah=0, al=3)
int 10h ; do it!
; cancel blinking and enable all 16 colors:
mov ax, 1003h
mov bx, 0
int 10h
; set segment register:
mov ax, 0b800h
mov ds, ax
; print "hello world"
; first byte is ascii code, second byte is color code.
mov [02h], 'H'
mov [04h], 'e'
mov [06h], 'l'
mov [08h], 'l'
mov [0ah], 'o'
mov [0ch], ','
mov [0eh], 'W'
mov [10h], 'o'
mov [12h], 'r'
mov [14h], 'l'
mov [16h], 'd'
mov [18h], '!'
; color all characters:
mov cx, 12 ; number of characters.
mov di, 03h ; start from byte after 'h'
c: mov [di], 11101100b ; light red(1100) on yellow(1110)
add di, 2 ; skip over next ascii code in vga memory.
loop c
; wait for any key press:
mov ah, 0
int 16h
ret
2. Division 16bit/8bit.
Code:
data segment
a dw ?
b db ?
c db ?
data ends
code segment
assume ds:data, cs:code
start: mov ax, data
mov ds, ax
mov ax, a
mov bl, b
div bl
mov c, al
mov c+1, ah
mov ah, 4ch
int 21h
code ends
end start
3. Division 32bit/16bit.
Code:
data segment
a0 dw ?
a1 dw ?
b dw ?
c dw ?
data ends
code segment
assume ds:data, cs:code
start: mov ax, data
mov ds, ax
mov ax, a0
mov dx, a1
mov bx, b
div bx
mov c, ax
mov c+2, dx
mov ah, 4ch
int 21h
code ends
end start
4. Multiplication 8bit*8bit.
Code:
data segment
a db 005H
b db 006H
c db ?
data ends
code segment
assume ds:data, cs:code
start: mov ax, data
mov ds, ax
mov al, a
mov bl, b
mul bl
mov c, al
mov c+1, ah
mov ah, 4ch
int 21h
code ends
end start
5. Multiplication 32bit*16bit.
Code:
data segment
a0 dw ?
a1 dw ?
b dw ?
c dw ?
data ends
code segment
assume ds:data, cs:code
start: mov ax, data
mov ds, ax
mov ax, a0
mov bx, b
mul bx
mov c, ax
mov c+2, dx
mov ax, a1
mul bx
add c+2, ax
adc c+4, dx
mov ah, 4ch
int 21h
code ends
end start
6. Display a Char.
Code:
.model small
.stack 100h
.code
main proc
mov ah, 2
mov dl, "A"
int 21h ;display the character A
mov ah, 4ch
int 21h ;return control to os
main endp
end main
.code
main proc
mov ah, 1
int 21h ;read a character
mov bl, al ;store input character into bl
mov ah, 2
mov dl, 0dh
int 21h ;cursor to begining
mov dl, 0ah
int 21h ;new line
mov ah, 2
mov dl, bl
int 21h ;display the character stored in bl
mov ah, 4ch
int 21h ;return control to os
main endp
end main
8. Display String.
Code:
.model small
.stack 100h
.data
str1 db "Welcome to dronegj github repo $"
str2 db "This is a second string $"
.code
main proc
mov ax, @data ;load data
mov ds, ax
lea dx, str1
mov ah, 9
int 21h ;load & display the first string
mov ah, 2
mov dl, 0dh
int 21h ;cursor to begining
mov dl, 0ah
int 21h ;new line
lea dx, str2
mov ah, 9
int 21h ;load & display the second string
mov ah, 4ch
int 21h
main endp ;return control to os
end main
range dw ?
res dw ?
mov dx, offset msg
mov ah, 9
int 21h ;print title
mov dx, offset msg1
mov ah, 9
int 21h ;ask range
call scan_num
mov range, cx ;store range
mov res, 0
mov bx, 1
jmp label
label:
mov dx, offset msg2
mov ah, 9
int 21h ;print ask values
call scan_num ;get values
add res, cx ;add current input with result
inc bx ;increment of bx
cmp range, bx ;compare and substract bx from range
jb exit ;jump if bx is below range
jmp label ;else jump to print result
exit:
mov ax,res
lea si, msg3
call print_string
call print_num
mov ah, 0
int 16h ; wait for any key press to exit
ret
msg db "Addition in Loop $"
msg1 db 13,10, "Enter Total No of Numbers: $"
msg2 db 13,10, "Number to Add : $"
msg3 db 13,10, "Total Sum: ", 0
define_scan_num
define_print_num
define_print_num_uns
define_print_string
exit:
mov ah, 0
int 16h ; wait for any key press:
ret
msg db "Check Number Even/Odd $"
msg1 db 13,10, "Enter your Number: $"
msg2 db 13,10, "Number is Even. ", 0
msg3 db 13,10, "Number is Odd. ", 0
define_scan_num
define_print_num
define_print_num_uns
define_print_string
end