In the 8051 microcontroller, the function of 02h
of int 21h
is to output a character to the standard output device, typically the serial port. When this interrupt is called, it takes a character from the accumulator (register A) and sends it to the output. This is commonly used for displaying characters on a terminal or for debugging purposes.
In assembly language programming for DOS, "int 21h" refers to a software interrupt that provides access to various DOS services. The "21h" indicates the hexadecimal value of the interrupt, which allows programs to perform functions such as file management, input/output operations, and other system-level tasks. Each function is specified by setting a register (typically AH) to a specific value before calling the interrupt. This mechanism is essential for interacting with the operating system at a low level.
start: jmp main option1 db 0ah, 0dh, "1. OPTION 1 $" option2 db 0ah, 0dh, "2. OPTION 2 $" exit db 0ah, 0dh, "3. EXIT $" str1 db 0ah, 0dh, "Press Key: $" x db 0ah, 0dh, "You Pressed option 1 $" y db 0ah, 0dh, "You Pressed option 2 $" z db 0ah, 0dh, "End $" nvl db 0ah, 0dh, "Invalid Option $" one db "1" two db "2" tre db "3" main proc mov ah,09h lea dx,option1 int 21h lea dx,option2 int 21h lea dx,exit int 21h again: mov ah,09h lea dx,str1 int 21h mov ah,01 int 21h mov bl,al cmp bl,"1" je disp1 cmp bl,"2" je disp2 cmp bl,"3" je dispexit cmp al,one jne n cmp al,two jne n cmp al,tre jne n n: mov ah,09h lea dx,nvl int 21h jmp again disp1: mov ah,09h lea dx,x int 21h jmp again disp2: mov ah,09h lea dx,y int 21h jmp again dispexit: mov ah,09h lea dx,z int 21h int 20h main endp end start
There are more than one of them, the most important DOS interrupt is 21H. Consult the related link.
In 8086 assembly language, you can accept two input digits by using interrupts to read from the keyboard. You would typically use the INT 21h service with function 01h to read a character, storing each digit in a register or memory location. After reading both digits, you can convert them from ASCII to their numeric values by subtracting 30h from each character. This allows you to perform arithmetic operations on the input digits as needed.
.model small .stack .data .code main proc mov al,10 mov bl,15 add al, bl start: mov cx,8 mov bl,'1' test bl,10000000b mov ah,09h int 21h next: shl bl,1 mov dl,1 mov ah,09h int 21h mov ah,4ch int 21h main endp end start end
The function of 4Ch of interrupt 21h in DOS is to terminate a program and return control to the operating system. When called, it can also optionally provide an exit code that indicates the program's termination status. This function is commonly used to gracefully exit a program and clean up resources. It effectively signals to the OS that the program has finished executing.
The INT 21H instruction in the 8086 is a software interrupt to vector 21H. In order for it to be used for input/output, the programming that responds to INT 21H must be present. This is part of the Operating System.
Read the manual, please. If you don't know where the manual is, Ralph Brown's famous interrupt-list might help.
In assembly language programming for DOS, "int 21h" refers to a software interrupt that provides access to various DOS services. The "21h" indicates the hexadecimal value of the interrupt, which allows programs to perform functions such as file management, input/output operations, and other system-level tasks. Each function is specified by setting a register (typically AH) to a specific value before calling the interrupt. This mechanism is essential for interacting with the operating system at a low level.
.model small .stack .data m db 'the no is odd $' m1 db 'the no is even $' a db 04h b db 02h .code mov ax,@data mov ds,ax mov ah,0 mov al,a mov bl,b div bl cmp ah,00h je l1 mov dx,offset m jmp l l1: mov dx,offset m1 jmp l l: mov ah,09 int 21h mov ah,4ch int 21h end
21H is a radioactive isotope of hydrogen known as tritium. It has two neutrons in addition to the single proton found in regular hydrogen atoms.
21h 35m
.Model small .data num db 47h,58h,14h,b4h.89h .code .start: mov ax,@data mov ds,ax back: add bl,[si] inc si dec dh inz back mov ch,02h mov dh,4bh mov cl,04l up: rol dh,cl mov bl,dh and bl,0fh cmp bl,09h jbe next add bl,07h next: add bl,30h mov ah,02h mov dl,bl int 21h dec ch jnz up end start end
.code main proc mov ax,@data mov ds,ax lea dx,msg ;printing msg mov ah,09h int 21h mov ax,x ;ax=x mov bx,y ;bx=y cmp ax,0 ;jump to l3 if ax is negtive jb l3 cmp bx,0 ;jump to l6 if bx is negative jb l6 cmp ax,bx ;if ax<bx,then jump to l1 jl l1 sub ax,bx ;else normal sub mov diff,ax ;diff=result is stored jmp l2 l1: ;iff (+)ax<(+)bx neg bx ;bx=-bx clc add ax,bx neg ax ;-ans=ans mov diff,ax mov dx,2dh ;print '-' mov ah,02h int 21h jmp l2 l3: ;iff (-)ax neg ax ;-ax=ax cmp bx,0 ;jump to l4 if bx is negative jb l4 clc add ax,bx ;ax=(+)ax+(+)bx mov ax,diff mov dx,2dh ;print '-' mov ah,02h int 21h jmp l2 l4: ;if (-)ax & (-)bx neg bx ;-bx=bx cmp ax,bx ;if ax>bx then jump to l5 jg l5 sub ax,bx ;else ax-bx mov diff,ax mov dx,2dh ;print '-' mov ah,02h int 21h jmp l3 l5: ;if(-)ax>(-)bx xchg ax,bx ;exchange ax and bx sub ax,bx ;ax-bx mov diff,ax ;ans is positive jmp l2 l6: ;iff (-)bx neg bx ;-bx=bx add ax,bx ;ax-(-)bx mov diff,ax ;ans will be positive mov ah,4ch int 21h main endp
mov ax, @data ; Initialize data section mov ds, ax mov bx, offset lookup ; Load offset of lookup in bx mov al, key ; key no. in al xlat ; translate byte in al mov bh, al ; al = lookup(key) mov ch, 02h ; Count of digits to be displayed mov cl, 04h ; Count to roll by 4 bits l2: rol bh, cl ; roll bl so that msb comes to lsb mov dl, bh ; load dl with data to be displayed and dl, 0fH ; get only lsb cmp dl, 09 ; check if digit is 0-9 or letter A-F jbe l4 add dl, 07 ; if letter add 37H else only add 30H l4: add dl, 30H mov ah, 02 ; Function 2 under INT 21H (Display character) int 21H dec ch ; Decrement Count jnz l2 mov ah, 4cH ; Terminate Program int 21H end
yes and tom rules
I have a code for 16 bit subtraction.. just replace ax by al,bx by bl etc... .code main proc mov ax,@data mov ds,ax lea dx,msg ;printing msg mov ah,09h int 21h mov ax,x ;ax=x(any number) mov bx,y ;bx=y( " ") cmp ax,0 ;jump to l3 if ax is negtive jb l3 cmp bx,0 ;jump to l6 if bx is negative jb l6 cmp ax,bx ;if ax<bx,then jump to l1 jl l1 sub ax,bx ;else normal sub mov diff,ax ;diff=result is stored jmp l2 l1: ;iff (+)ax<(+)bx neg bx ;bx=-bx clc add ax,bx neg ax ;-ans=ans mov diff,ax mov dx,2dh ;print '-' mov ah,02h int 21h jmp l2 l3: ;iff (-)ax neg ax ;-ax=ax cmp bx,0 ;jump to l4 if bx is negative jb l4 clc add ax,bx ;ax=(+)ax+(+)bx mov ax,diff mov dx,2dh ;print '-' mov ah,02h int 21h jmp l2 l4: ;if (-)ax & (-)bx neg bx ;-bx=bx cmp ax,bx ;if ax>bx then jump to l5 jg l5 sub ax,bx ;else ax-bx mov diff,ax mov dx,2dh ;print '-' mov ah,02h int 21h jmp l3 l5: ;if(-)ax>(-)bx xchg ax,bx ;exchange ax and bx sub ax,bx ;ax-bx mov diff,ax ;ans is positive jmp l2 l6: ;iff (-)bx neg bx ;-bx=bx add ax,bx ;ax-(-)bx mov diff,ax ;ans will be positive mov ah,4ch int 21h main endp