8086 print string by writing directly to video memory
Edit
You would be familiar with dos interrupt 21h function 09h to write a string to standard output which is your monitor. In this article, we will write an 8086 assembly language program to write directly to video memory b800h.
To write directly to the screen without using an interrupt you have to write to segment 0xb800h and offset 0. There are two bytes for every character on the screen. Character to display followed by the character attributes.
To display a character 'a' on the screen top, left
0xb800:0x0000 : 0x41 ; 0x41 is hex for ascii character 'a'
0xb800:0x0001 : 0x40 ; Red background, black foreground
check this article for ASCII character set table. 8086 ascii table
8086 code to write 'Hello World' directly to memory
----------------------------------------
Program : Write Directly to Video Memory
FileName : DisplayText.asm
I/P : Nill
O/P : Displays Hello Mem
By : Murugan AD
----------------------------------------
.model tiny ; com program
.code ; code segment
org 100h ; code starts at offset 100h
main proc near
mov ax,b800h
mov es,ax
mov mov ax,offset message ; offset ofMessage string terminating with $
mov si,ax ; Make Si point to string address
mov di,0 ; Make Destination Index point to B800:0000
loop1:
mov al,[si] ; Read First Character
mov es:[di],al ; Write to Video
inc si ; Point to next character
inc di
inc di ; Next Display Area
cmp al,'$'
jne loop1 ; if not '$' jump to loop1
mov ah,4ch ; function to terminate
mov al,00
int 21h ; Dos Interrupt
endp
message db "Hello World $" ; Message to be displayed terminating with a $
end main
Generate executable using
tasm filename.asm
tlink /t filename