请你以子程序的形式完善一下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 20:53:17 浏览: 101
masm.zip_masm
下面是完善后的子程序:
```
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 si, 16012+352
mov cx, 3
call display_text
mov ax, 4c00h
int 21h
display_text:
push bp
mov bp, sp
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 display_text
pop bp
ret
code ends
end start
```
主要的改动在于增加了一个名为 `display_text` 的子程序,用于显示文本。这个子程序的实现与原程序中的代码基本相同,只是加入了一些栈操作以保存和恢复寄存器的值。在 `start` 中,将 `mov ah, ds:[di]` 的语句移动到了 `display_text` 中,以便在每次循环开始时都能更新 `ah` 的值。最后在 `start` 中调用 `display_text` 子程序显示文本即可。
阅读全文