8086 assembly language program to split the screen into two colors left green right blue Edit
Write an assembly language program to color the entire screen into two halves. upon running the program the left half of the screen will become green when the space bar key is pressed. when the space bar key is released the right side becomes blue. The program terminates when enter key is pressed.
8086 Assembly Language Program
.model tiny ; com program .code ; code segment org 100h ; code starts at offset 100h main proc near loopmain: mov ah,00h ; function to Read character from keyboard int 16h ; keyboard interrupt 16h, output stored in al cmp al,0dh ; check if enter key is pressed je exit cmp al,20h ; check if space bar is pressed jne loopmain cmp leftright,0 je left mov leftcolor,0 mov rightcolor,1 call splitscreen mov leftright,0 jmp loopmain left: mov leftcolor,2 mov rightcolor,0 call splitscreen inc leftright jmp loopmain exit: mov ah,4ch ; function to terminate mov al,00 int 21h ; Dos Interrupt endp splitscreen proc near mov ax,0xb800h mov es,ax mov di,0 ; Make Destination Index point to B800:0000 mov cx,50 mov bx,0 loop1: mov al,0xdbh mov es:[di],al ; Write to Video inc di cmp bx,39d jg right mov dl,leftcolor mov es:[di],dl jmp next right: mov dl,rightcolor mov es:[di],dl cmp bx,79d jl next: mov bx,00h jmp next2: next: inc bx next2: inc di ; Next Display Area loop loop1 ret endp leftcolor db 0 rightcolor db 0 leftright db 0 end main
The program works by writing the character 0xdbh which is the full white block from the character table to the memory. Here we write directly to the video memory b800h. when you write to b800h the first is the character to write the second is the color code of the character. Try this sample code
.model tiny ; com program .code ; code segment org 100h ; code starts at offset 100h main proc near mov ax,0xb800h mov es,ax mov es:00,'A' mov es:01,3 mov es:02,'B' mov es:03,4 mov ah,4ch mov al,00 int 21h endp end main
In the above sample code we are displaying only two characters A followed by B. We are doing this by directly writing to the video segment 0xb800h. offset 00 we are writing character A, then 01 we are writing the color of the character. followed by B and color or B. This is the same technique I am using in the above code.