将data段的字符串改成大写字母,以0标志字符串的结束。
代码如下:
assume cs:code
data segment
db ' word ' , 0
db ' unix ' , 0
db ' wind ' , 0
db ' good ' , 0
data ends
stack segment
dw 8 dup( 0 )
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp, 16
mov bx, 0
mov cx, 4
s:
mov si,bx
call capital
add bx, 5
loop s
data segment
db ' word ' , 0
db ' unix ' , 0
db ' wind ' , 0
db ' good ' , 0
data ends
stack segment
dw 8 dup( 0 )
stack ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp, 16
mov bx, 0
mov cx, 4
s:
mov si,bx
call capital
add bx, 5
loop s
mov ax,4c00h
int 21h
capital:push cx //此处注意,cx寄存器中的值入栈
change: mov cl,[si]
mov ch, 0
jcxz ok
and byte ptr [si],11011111b
inc si
jmp short change
ok: pop cx
ret
code ends
end start
由此我们得到子程序的标准框架如下:
子程序开始:子程序使用的寄存器入栈
子程序内容
子程序使用的寄存器出栈
返回(ret,retf)