Next is a procedure in (almost) NASM to display string with color, notice how parameters are set before the CALL :
SECTION .data
text: db "Just some text" ;LENGTH = 14.
color: db 181
x: db 0
y: db 0
SECTION .text
global main
main:
mov bp, text ;STRING TO DISPLAY.
mov cx, 14 ;STRING LENGTH.
mov [x], byte 50
mov [y], byte 20
call color_string
;FINISH PROGRAM.
mov ax,4c00h
int 21h
;----------------------------------------------
;PARAMETERS : BP = OFFSET OF STRING TO DISPLAY.
; CX = STRING LENGTH.
; COLOR = VARIABLE WITH COLOR (0..255).
; X,Y = VARIABLES WITH COORDINATES.
color_string:
mov ax, ds
mov es, ax ;ES SEGMENT MUST POINT TO DATA SEGMENT.
mov ah, 13h ;SERVICE TO DISPLAY STRING WITH COLOR.
mov bh, 0 ;PAGE (ALWAYS ZERO).
mov bl, color
mov dl, x ;X (SCREEN COORDINATE).
mov dh, y ;Y (SCREEN COORDINATE).
int 10h ;BIOS SCREEN SERVICES.
ret
The code to set cursor position is this :
mov ah, 2 ;SERVICE TO SET CURSOR POSITION.
mov bh, 0 ;PAGE NUMBER (ALWAYS ZERO).
mov dl, x ;X COORDINATE 0..79.
mov dh, y ;Y COORDINATE 0..24.
int 10h ;BIOS VIDEO SERVICES.