|
2鱼币
想问一下,小甲鱼在实验10,这个push cx还有push si的作用的什么,我省略了这一步,依然可以正常达到目的,很疑惑,请大家解答一下
下边是代码;push的指令被我注释了
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:
;push cx
;push si
mov al,0a0h
dec dh
mul dh
mov bx,ax
mov al,2
mul dl
sub ax,2
add bx,ax
mov ax,0b800h
mov es,ax
mov di,0
mov al,cl
mov ch,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx+di],cl
mov es:[bx+di+1],al
inc si
add di,2
jmp short s
ok:
;pop si
;pop cx
ret
code ends
end start
本帖最后由 jackz007 于 2022-3-20 00:15 编辑
要看怎么说了,就本例而言,在调用过子程序以后,程序就直接结束了,属于特殊情况,确实没必要在子程序中利用堆栈保护那两个寄存器。
但是,我们在编写汇编语言子程序(或中断服务程序)的时候,通常应该遵守 "绿色环保" 的原则,就是要确保调用子程序(或中断服务程序)前后,所有的寄存器内容不会发生意外的改变,这就要求在子程序(或中断服务程序)内,对所有需要用到的寄存器必须做到先保存再使用,在退出前进行恢复的原则。本例应该是想这么做,但是,做的不彻底而已。
|
最佳答案
查看完整内容
要看怎么说了,就本例而言,在调用过子程序以后,程序就直接结束了,属于特殊情况,确实没必要在子程序中利用堆栈保护那两个寄存器。
但是,我们在编写汇编语言子程序(或中断服务程序)的时候,通常应该遵守 "绿色环保" 的原则,就是要确保调用子程序(或中断服务程序)前后,所有的寄存器内容不会发生意外的改变,这就要求在子程序(或中断服务程序)内,对所有需要用到的寄存器必须做到先保存再使用,在退出前进行 ...
|