能把这个结果显示的颜色换成红色吗
时间: 2024-03-20 12:43:46 浏览: 48
可以通过改变 `int 10h` 的调用来改变文本的颜色。下面是一个修改过的代码,可以将结果显示为红色:
```
.model small
.stack 100h
.data
msg1 db 'Enter a string: $'
msg2 db 'Number of letters: $'
msg3 db 'Number of digits: $'
count_letters db 0
count_digits db 0
input_buffer db 100,?,100 dup('$')
.code
main proc
mov ax, @data
mov ds, ax
; 输出提示信息
mov ah, 9
lea dx, msg1
int 21h
; 读取输入的字符串
mov ah, 0ah
lea dx, input_buffer
int 21h
; 统计字母和数字的个数
mov si, offset input_buffer + 2 ; 跳过输入缓冲区的长度和回车符
mov cl, [input_buffer + 1] ; 获取输入字符串的长度
mov count_letters, 0
mov count_digits, 0
cld ; 清除方向标志寄存器
loop_start:
lodsb ; 从si指向的内存地址读取一个字节到al寄存器,并将si自增1
cmp al, 'a'
jb not_letter
cmp al, 'z'
ja not_letter
inc count_letters
jmp continue_loop
not_letter:
cmp al, '0'
jb continue_loop
cmp al, '9'
ja continue_loop
inc count_digits
continue_loop:
loop loop_start
; 输出字母和数字的个数
mov ah, 9
lea dx, msg2
int 21h
mov ah, 2
mov dl, count_letters
add dl, '0'
int 21h
; 将文本颜色设置为红色
mov ah, 10h
mov al, 01h
xor bh, bh
int 10h
; 输出第二行提示信息
mov ah, 9
lea dx, msg3
int 21h
; 输出数字的个数
mov ah, 2
mov dl, count_digits
add dl, '0'
int 21h
; 将文本颜色恢复为白色
mov ah, 10h
mov al, 07h
xor bh, bh
int 10h
mov ah, 4ch
int 21h
main endp
end main
```
这段代码使用了 `int 10h` 中的 `10h` 功能号,将文本颜色设置为红色,然后输出第三行的提示信息和数字的个数。最后,它又使用 `int 10h` 中的 `10h` 功能号将文本颜色恢复为白色。
阅读全文