将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改写成子程序
时间: 2024-02-29 07:53:44 浏览: 28
好的,将这段代码改写成子程序的话可以这样写:
; 定义数据段
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
; 设置段寄存器
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, [di]
push cx
mov cx, 16
s1:
; 读取数据段中的字符
mov al, [bx]
mov es:[si], ax
add si, 2
inc bx
loop s1
pop cx
add si, 128
inc di
mov bx, 0
loop s
; 退出子程序
pop di si dx cx bx ax
ret
start:
; 调用子程序
call print_string
; 退出程序
mov ax, 4c00h
int 21h
code ends
end start
这样,我们将主程序中的逻辑代码提取成了一个子程序,可以提高代码的重用性和可读性。在主程序中,我们只需要调用print_string子程序即可输出字符串。