汇编语言编写子程序时要将那些寄存器中的内容保护?

ax,bx 等需要保护吗

汇编语言写子程序时,一般需要将该子程序中用到的寄存器加以保护,比如最常用到的累加器A。举例说明:
GETDAT:
PUSH ACC ;压栈保护累加器,因为子程序中会改变其值
PUSH DPL ;压栈保护数据指针,子程序中会改变数据指针
PUSH DPH
MOV DPTR,#1000H
MOVX A,@DPTR
MOV 30H,A
INC DPTR
MOVX A,@DPTR
MOV 31H,A
POP DPH ;后进先出,弹出数据指针
POP DPL
POP ACC ;恢复累加器A的值
RET
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-11-01
一般是两种寄存器需保护 一是在子程序中会直接使用的 二是在子程序中会被破坏的本回答被网友采纳
第2个回答  2011-11-02
stack segment
db 64 dup (?)
stack ends

data segment
msg1 db 'There are some empty rows under this row!','$'
msg2 db 'Success!','$'
data ends

code segment
assume cs:code,ds:data,ss:stack
start:
mov ax,data
mov ds,ax

mov ah,09H
mov dx,offset msg1
int 21H

mov ax,4
call WRITE

mov ah,09H
mov dx,offset msg2
int 21H

exit:
mov ah,07H
int 21H
mov ax,4C00H
int 21H

WRITE:
;(插入空行,AX=所空行数)
;(注:AX为0时为重起一行)
mov cx,ax
inc cx
mov ah,02H

WRITE001:
mov dl,0DH
int 21H
mov dl,0AH
int 21H
loop WRITE001
ret

code ends
end start
相似回答