将以上代码改为子程序,要求使用call指令和ret指令
时间: 2024-02-29 16:52:35 浏览: 169
Call 和 Return 使用
4星 · 用户满意度95%
下面是将程序改写为子程序的代码,使用了call指令和ret指令来调用和返回子程序:
```
assume cs:code
data segment
db 'welcome to masm!'
db 2,36,113 ;颜色
data ends
code segment
start:
mov ax,data
mov ds,ax
call print_string
mov ax,4c00h
int 21h
print_string:
mov bx,0
mov di,16
mov ax,0b800h
mov es,ax
mov si,16012+352
mov cx,3
print_loop:
mov ah,ds:[di]
push cx
mov cx,16
print_char_loop:
mov al,ds:[bx]
mov es:[si],ax
add si,2
inc bx
loop print_char_loop
pop cx
add si,128
inc di
loop print_loop
ret
code ends
end start
```
在这个版本的程序中,我们将输出字符串的逻辑封装在了一个名为`print_string`的子程序中。在`start`标签下,我们先将数据段的地址存储到DS寄存器中,然后使用call指令调用子程序。子程序执行结束后,使用ret指令返回到调用它的地方。最后,使用int 21h调用DOS中断结束程序的执行。
阅读全文