汇编程序设计中RET的工作原理
偶抄了一段冒泡法的程序.原程序可以运行,而且能达到目的.但通过单步调试发现程序将运行完了之前在RET处要执行好几条指令
jo 03h
ADD AH,DH
ADD [BX+DI],AL
ADD AH,DH
ADD [BX+DI],AL
ADD AH,DH
ADD [BX+DI],AL
ADD AH,DH
ADD b.[BH+DI],00H
HLT
执行完这几条指令后程序结束.但是buf内存中的第一个值却莫明其妙的被改了.且为一个事先不能预料的值.这是为什么?RET到底是怎么工作的.谢谢!!
源程序
DSEG SEGMENT 'DATA'
BUF DW 10,25,16,17,18,19,20,21,22,23,24 ;10为数组的个数,数组第一个数为25
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
SA DB 100 DUP(?)
SSEG ENDS
CSEG SEGMENT 'CODE'
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START PROC FAR
PUSH DS
MOV AX, 0
PUSH AX
MOV AX, DSEG
MOV DS, AX
MOV AX,SSEG
MOV SS,AX
MOV BX,0
MOV CX,BUF[BX]
DEC CX
L1: MOV DX,CX
MOV BUF[0],0
L2: ADD BX,2
MOV AX,BUF[BX]
CMP AX,BUF[BX+2]
JBE CONT1
XCHG AX,BUF[BX+2]
MOV BUF[BX],AX
MOV BUF[0],1
CONT1: LOOP L2
MOV BX,0
CMP BUF[0],0
JE STOP
MOV CX,DX
LOOP L1
STOP: RET
START ENDP
CSEG ENDS
END START