请你以子程序的形式完善一下assume cs:code data segment db 'welcome to masm!' db 2,36,113 data ends code segment start: mov ax,data mov ds,ax mov bx,0 mov di,16 mov ax,0b800h mov es,ax mov si,16012+352 mov cx,3 s: mov ah,ds:[di] push cx mov cx,16 s1: mov al,ds:[bx] mov es:[si],ax add si,2 inc bx loop s1 pop cx add si,128 inc di mov bx,0 loop s mov ax,4c00h int 21h code ends end start,使其能够正确在屏幕中间分别显示绿色、绿底红色、白底蓝色的‘welcome to masm’。
时间: 2024-02-29 11:53:20 浏览: 64
下面是完善后的子程序:
```
assume cs:code, ds:data
data segment
db 'welcome to masm!'
db 2, 36, 113
data ends
code segment
start:
mov ax, data
mov ds, ax
mov bx, 0
mov di, 16
mov ax, 0b800h
mov es, ax
mov cx, 3
call display_text_green
call display_text_green_red
call display_text_white_blue
mov ax, 4c00h
int 21h
display_text_green:
push bp
mov bp, sp
mov ah, 2 ; 绿色
push cx
mov cx, 16
s1:
mov al, ds:[bx]
mov es:[si], ax
add si, 2
inc bx
loop s1
pop cx
add si, 128
inc di
mov bx, 0
loop display_text_green
pop bp
ret
display_text_green_red:
push bp
mov bp, sp
mov ah, 2 ; 绿色
mov bh, 4 ; 绿底红色
push cx
mov cx, 16
s2:
mov al, ds:[bx]
mov es:[si], ax
add si, 2
inc bx
loop s2
pop cx
add si, 128
inc di
mov bx, 0
loop display_text_green_red
pop bp
ret
display_text_white_blue:
push bp
mov bp, sp
mov ah, 7 ; 白色
mov bh, 1 ; 白底蓝色
push cx
mov cx, 16
s3:
mov al, ds:[bx]
mov es:[si], ax
add si, 2
inc bx
loop s3
pop cx
add si, 128
inc di
mov bx, 0
loop display_text_white_blue
pop bp
ret
code ends
end start
```
主要的改动在于增加了三个名为 `display_text_green`、`display_text_green_red` 和 `display_text_white_blue` 的子程序,分别用于显示绿色、绿底红色和白底蓝色的文本。在这些子程序中,使用 `mov ah, <属性>` 来设置文本显示属性,其中 `<属性>` 为属性字节的高四位。在最后的 `start` 中依次调用这三个子程序即可。
阅读全文