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,160*12+35*2 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改写成子程序
时间: 2024-02-29 10:52:36 浏览: 56
以下是将该段代码改写为子程序的示例:
```assembly
; 定义数据段
data segment
db 'welcome to masm!'
db 2,36,113 ;颜色
data ends
; 定义代码段
code segment
assume cs:code, ds:data
; 定义子程序
print_string proc
push ax bx cx dx si di bp
mov si, 0
mov di, 16
mov ax, 0b800h
mov es, ax
mov si, 160*12+35*2
mov cx, 3
outer_loop:
mov ah, [string+di-16] ; 从数据段中读取颜色
push cx
mov cx, 16
inner_loop:
mov al, [string+bx] ; 从数据段中读取字符
mov es:[si], ax
add si, 2
inc bx
loop inner_loop
pop cx
add si, 128
inc di
mov bx, 0
loop outer_loop
pop bp di si dx cx bx ax
ret
print_string endp
start:
mov ax, data
mov ds, ax
call print_string ; 调用子程序输出字符串
mov ax, 4c00h
int 21h
code ends
end start
```
该程序使用了一个名为`print_string`的子程序,该子程序会将数据段中的字符串以及颜色输出到屏幕上。在主程序中,通过调用该子程序实现字符串的输出。
阅读全文