2.使用过程应注意的问题 在过程体内必须有一条RET指令被执行到。如果在过程内没有执 行到RET或淇它转移指令,程序将继续执行ENDP后的指令。 正确选择过程的类型。通常基于下列原则: 若过程只在同一代码段中被调用,则定义为NEAR。 ·若过程可以在不同代码段中被调用,则定义为FAR 通常要保证RET指令执行前,栈顶内容正好是返回地址。 注意保护相关寄存器的值。通常,除了作为返回参数的寄存器外, 过程不应改变其它寄存器的值。 可以将过程定义放在单独的代码段中。若过程定义与主程序处于 同一代码段,则要保证其只有被调用时,才会执行。 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 2.使用过程应注意的问题 ▪ 在过程体内必须有一条RET指令被执行到。如果在过程内没有执 行到RET或其它转移指令,程序将继续执行ENDP后的指令。 ▪ 正确选择过程的类型。通常基于下列原则: • 若过程只在同一代码段中被调用,则定义为NEAR。 • 若过程可以在不同代码段中被调用,则定义为FAR。 ▪ 通常要保证RET指令执行前,栈顶内容正好是返回地址。 ▪ 注意保护相关寄存器的值。通常,除了作为返回参数的寄存器外, 过程不应改变其它寄存器的值。 ▪ 可以将过程定义放在单独的代码段中。若过程定义与主程序处于 同一代码段,则要保证其只有被调用时,才会执行
3.保存和恢复寄存器 例: SUBT PROC NEAR PUSH AX PUSH BX PUSH CX POP CX POP BX POP AX RET SUBT ENDP 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 3. 保存和恢复寄存器 例: SUBT PROC NEAR PUSH AX PUSH BX PUSH CX …… POP CX POP BX POP AX RET SUBT ENDP
【例6.1】分析下列程序,描述它的功能。 dseg SEGMENT buf db 80,81 DUP(O) dseg ENDS sseg SEGMENT STACK DW 64 DUP(O) sseg ENDS cseg SEGMENT ASSUME CS: cSeg, DS: dseg, SS: sseg 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 【例6.1】分析下列程序,描述它的功能。 dseg SEGMENT buf DB 80,81 DUP(0) dseg ENDS sseg SEGMENT STACK DW 64 DUP(0) sseg ENDS cseg SEGMENT ASSUME CS:cseg,DS:dseg,SS:sseg
cr PROC (NEAr) MOV AH.2 MOV DL 13 INT 21H MOV DL. 10 INT 21H RET cr ENDP 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 cr PROC (NEAR) MOV AH,2 MOV DL,13 INT 21H MOV DL,10 INT 21H RET cr ENDP
main: MOV AX, dseg MOV DS.AX LEA DX.buf MOV AH.10 NT 21H ;输入一个符号串 CALL cr MOV AH. NT 21H 输入一个字符 MOV BLAL 用B保存读入的字符 2021/2/19 80x86汇编语言程序设计
2021/2/19 80x86汇编语言程序设计 main:MOV AX,dseg MOV DS,AX LEA DX,buf MOV AH,10 INT 21H ;输入一个符号串 CALL cr MOV AH,1 INT 21H ;输入一个字符 MOV BL,AL ;用BL保存读入的字符