优质解答
首先指出一点:此子程序有错,少了RET指令,实际调用后无法正确返回.
此子程序中代码实现的功能,是将AX与BX中的内容互换(前提是两数求和运算以及入口AX中的数求补运算不发生溢出).
假设 入口AX中的数是x,BX中的数是y,那么:
ADD AX,BX ; AX = x+y
SUB BX,AX ; BX = y-(x+y)= -x
ADD AX,BX ; AX = (x+y) + (-x) = y
NEG BX ; BX = - ( - x ) = x
至此,x和y的存放位置正好互换了一次.
所以,若入口AX=1234H,BX=0ABCDH,则出口 AX=_0ABCDH_, BX=_1234H_.
首先指出一点:此子程序有错,少了RET指令,实际调用后无法正确返回.
此子程序中代码实现的功能,是将AX与BX中的内容互换(前提是两数求和运算以及入口AX中的数求补运算不发生溢出).
假设 入口AX中的数是x,BX中的数是y,那么:
ADD AX,BX ; AX = x+y
SUB BX,AX ; BX = y-(x+y)= -x
ADD AX,BX ; AX = (x+y) + (-x) = y
NEG BX ; BX = - ( - x ) = x
至此,x和y的存放位置正好互换了一次.
所以,若入口AX=1234H,BX=0ABCDH,则出口 AX=_0ABCDH_, BX=_1234H_.