改写assume cs:code,ds:data data segment db 'welcome to masm!',0 data ends code segment start:mov dh,8 mov dl,3 mov cl,2 mov ax,data mov ds,ax mov si,0 call show_str mov ax,4c00h int 21h show_str: push ax push bx push es push si push cx mov ax,0b800h mov es,ax mov ax,160 mul dh mov bx,ax mov ax,2 mul dl add bx,ax mov al,cl mov cl,0 show0: mov ch,[si] jcxz show1 mov es:[bx],ch mov es:[bx].1,al inc si add bx,2 jmp show0 show1: pop cx pop si pop es pop bx pop ax ret code ends end start使其能在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串‘welcome to masm’。
时间: 2024-02-29 22:53:11 浏览: 18
在代码中添加以下内容即可实现要求:
```
mov ah, 0Ch ; 设置颜色
mov bh, 0 ; 显示页面号
mov cx, 14 ; 字符串长度
mov bl, 2 ; 绿色
mov al, ' '
mov di, 80 ; 水平居中
sub di, cx
shr di, 1 ; 右移一位,相当于除以2
mov si, offset msg ; 字符串地址
rep stosw ; 将字符串写入显存
; 显示绿底红色字符串
mov ah, 0Ch ; 设置颜色
mov bh, 0 ; 显示页面号
mov cx, 14 ; 字符串长度
mov bl, 2 ; 绿底
mov al, ' '
mov di, 80 ; 水平居中
sub di, cx
shr di, 1 ; 右移一位,相当于除以2
mov si, offset msg ; 字符串地址
rep stosw ; 将字符串写入显存
mov ah, 0Ch ; 设置颜色
mov bh, 0 ; 显示页面号
mov cx, 14 ; 字符串长度
mov bl, 4 ; 红色
mov al, ' '
mov di, 80 ; 水平居中
sub di, cx
shr di, 1 ; 右移一位,相当于除以2
mov si, offset msg ; 字符串地址
rep stosw ; 将字符串写入显存
; 显示白底蓝色字符串
mov ah, 0Ch ; 设置颜色
mov bh, 0 ; 显示页面号
mov cx, 14 ; 字符串长度
mov bl, 15 ; 白底
mov al, ' '
mov di, 80 ; 水平居中
sub di, cx
shr di, 1 ; 右移一位,相当于除以2
mov si, offset msg ; 字符串地址
rep stosw ; 将字符串写入显存
mov ah, 0Ch ; 设置颜色
mov bh, 0 ; 显示页面号
mov cx, 14 ; 字符串长度
mov bl, 1 ; 蓝色
mov al, ' '
mov di, 80 ; 水平居中
sub di, cx
shr di, 1 ; 右移一位,相当于除以2
mov si, offset msg ; 字符串地址
rep stosw ; 将字符串写入显存
msg db 'welcome to masm!', 0
```
其中,`msg` 存储字符串,`ah` 存储颜色,`bh` 存储显示页面号,`bl` 存储前景色和背景色,`cx` 存储字符串长度,`al` 存储空格,`di` 存储显存偏移量,`si` 存储字符串地址。