→ easypro:ret才會從stack拉出 jmp不會 jmp是位直直接跳的 06/20 14:18
→ lalawul:那用Jmp之後,在副程式最後硬是RET會怎樣 ? 06/20 21:53
→ jason12308:應該是位址會亂跳...回不到正確 06/20 22:02
→ kikiqqp:硬要RET不是不行,這時候要看你STACK裡有啥 06/21 00:56
→ kikiqqp:有位址就會跳到那位址,沒位址就Stack Under Flow 06/21 00:57
→ kikiqqp:至於Stack Under Flow硬體如何處理看IC類型和編譯器設定 06/21 00:58
推 ruemann:可以的,在某些特別的應用上會用到這些技巧 06/21 00:58
→ ruemann:具體的方法是在JMP前先把你要RET回來的address先push進 06/21 00:59
→ ruemann:stack,這樣就會在ret時跳回來 06/21 00:59
→ ruemann:一定要手動push address ,所以會比call還花時間 06/21 01:00
→ lalawul:rue大所說的方式是指先把PC值讀出來,然後push進stack嗎 ? 06/21 01:31
推 WolfLord:也不一定,如果是個多重入口的FUNCTION就可以利用JMP 06/21 01:47
→ WolfLord:做函式串接,不過這算是高階技巧而且是結構化程式大忌 06/21 01:48
推 WolfLord:像五隻尼克寫得Apple2的Monitor(BIOS)就很多這種技巧 06/21 07:08
→ james732:工作上的code常看到 a call b, b jmp c, c ret 這種 06/21 21:02
→ kikiqqp:空間不夠用時會常常這樣做,更甚一堆程式同用一個RET XDDD 06/22 15:19
推 WolfLord:因為return前需要些重複的工作,這樣寫可以省很多事 06/22 22:06
→ WolfLord:另一種情況是,一個function有多重入口一個出口 06/22 22:07
→ WolfLord:還有另一種比較罕見的用途是:查表法 06/22 22:08
→ jason12308:話說……用查表法來建立一個SIN波XDDDDD 06/22 22:26
→ kikiqqp:查表在小容量單晶片很常用PC+RETL 尤其是複雜數學運算 06/22 22:41
推 WolfLord:在CISC(8051是一種CISC)上用這種方法查表並不常見 ^^; 06/23 01:24
→ lalawul:收穫良多~~~thx all 06/25 09:14