1、LJMP、JNB和CJNE都是跳轉語句。跳轉後程序指針PC指向跳轉位置,但不影響SP棧的值。
2.LCALL,ACALL等。都是子程序調用指令。執行前需要將下壹條指令的地址(PC指針)推入堆棧(2字節),所以SP+2,然後PC指針移動到子程序開始執行子程序的位置;子程序執行後,PC指針恢復到RET指令調用前CALL語句的下壹條指令,SP-2也恢復。
因為程序中很多地方都用到LCALL,但是對應的子程序體中沒有RET返回指令,所以SP是遞增的,例如:
。。。。。。。。。
組織30H
WXL:jnbp 2.5 SCL
LJMPWXL
SCL:lcally 1
JNBP2.5,WXL100
LCALLWXL這句話有問題。執行完後,SP+2,再回到上面的WXL,再回到這個,SP又會是+2,永遠不會結束。
。。。。。。。。。。
因為這樣的錯誤太多了,而且我也不懂軟件功能,就不壹壹列舉了。我建議樓主再收拾壹下自己的心態。