1

I have a problem in NASM. I want to change the background colour, but only for one string.

These are my macros:

%macro SetBackGroundColour 0
    mov dx, 0
    mov bh, 0
    mov ah, 0x2
    int 0x10
    mov cx, 2000 
    mov bh, 0
    mov bl, 0x21 
    mov al, 0x20 
    mov ah, 0x9
    int 0x10     
%endmacro

%macro printOnTheScreen 1
    xor dx,dx 
    mov ah, 09h 
    mov dx, %1 
    int 21h 
    xor dx, dx
%endmacro

I tried other changes, but nothing worked.

Axalo
  • 2,823
  • 4
  • 23
  • 38
Ola214
  • 11
  • 5

1 Answers1

1

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.