以assume开头,以子程序的形式在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm’。
时间: 2024-02-29 14:52:05 浏览: 71
向串口发送一组字符串,“welcome"
5星 · 资源好评率100%
下面是一个可能的实现方案:
```assembly
assume cs:code, ds:data
data segment
msg1 db 'welcome to masm', 0
msg2 db 'welcome to masm', 0
msg3 db 'welcome to masm', 0
data ends
code segment
start:
mov ax, data
mov ds, ax
; 显示绿色字符串
call show_green_msg
; 显示绿底红色字符串
call show_green_bg_red_msg
; 显示白底蓝色字符串
call show_white_bg_blue_msg
mov ah, 4ch
int 21h ; 程序退出
; 显示绿色字符串的子程序
show_green_msg:
push ax ; 保护现场
push bx
push cx
mov ah, 9 ; 选择显示字符串的功能
mov al, 2 ; 选择绿色显示
lea dx, msg1 ; 将字符串的地址存储到dx寄存器中
int 21h ; 调用21h中断显示字符串
pop cx ; 恢复现场
pop bx
pop ax
ret ; 返回到调用者处
; 显示绿底红色字符串的子程序
show_green_bg_red_msg:
push ax ; 保护现场
push bx
push cx
mov ah, 9 ; 选择显示字符串的功能
mov al, 3 ; 选择绿底红色显示
lea dx, msg2 ; 将字符串的地址存储到dx寄存器中
int 21h ; 调用21h中断显示字符串
pop cx ; 恢复现场
pop bx
pop ax
ret ; 返回到调用者处
; 显示白底蓝色字符串的子程序
show_white_bg_blue_msg:
push ax ; 保护现场
push bx
push cx
mov ah, 9 ; 选择显示字符串的功能
mov al, 1 ; 选择白底蓝色显示
lea dx, msg3 ; 将字符串的地址存储到dx寄存器中
int 21h ; 调用21h中断显示字符串
pop cx ; 恢复现场
pop bx
pop ax
ret ; 返回到调用者处
code ends
end start
```
在这个程序中,使用了三个子程序分别用于显示绿色、绿底红色、白底蓝色的字符串。每个子程序的实现都相似,首先设置显示字符串的功能码和颜色,然后将字符串的地址存储到dx寄存器中,最后调用21h中断显示字符串。
在主程序中,首先将ds寄存器设置为数据段的基地址,然后调用三个子程序分别显示不同颜色的字符串。最后调用21h中断退出程序。
需要注意的是,颜色的选择是通过al寄存器传递给21h中断的,具体的颜色码可以参考MS-DOS的文本模式颜色表。
阅读全文