Я пытаюсь создать простую программу сборки x86 (я использую NASM в качестве моего ассемблера), которая использует коды ANSI, чтобы изменить цвет текста терминала на красный, а затем распечатать что-то, что затем будет напечатано с красным передним планом.Код выглядит следующим образом:
; This macro is equivalent to printf(message)
%macro print 1
lea rdi, [rel %1]
call _printf
%endmacro
; Example call:
; print prompt
; Where prompt is something like:
; prompt:
; db "Hiya dude! What's your name?", 0
; These are the terminal colors, they are ANSI codes that, when printed, will change the color of the text.
section .data
COLOR_FORE_RED:
db "\033[31m",0 ; ANSI Fore Red code
%define SetColor_FRed print COLOR_FORE_RED
Но когда я пытаюсь использовать эти макросы, используя что-то вроде:
SetColorFRed ; Set text color
print Hello ; Print "Hello!:
section .data
Hello:
db "Hello!",0
Вывод:
\033[31mHello! <- Output color is plain old black, not red
Почемуэто не меняет цвет текста на красный?Насколько я могу судить, этот код эквивалентен использованию printf("\033[31m Hiya!")
в C, который прекрасно работает на моем компьютере и меняет цвет вывода на красный.Моя платформа - Mac OSX, я программирую на 64-битной x86 и использую процессор Intel Core i7.