PCDVD數位科技討論區
PCDVD數位科技討論區   註冊 常見問題 標記討論區為已讀

回到   PCDVD數位科技討論區 > 其他群組 > 疑難雜症區
帳戶
密碼
 

回應
 
主題工具
wkm
Senior Member
 

加入日期: May 2002
文章: 1,043
cmp 指令執行兩次用意?

我下載國外玩家製作的魔界村ct檔
newmem是比較玩家或敵方
如果是1就是玩家跳至player1:,不是就往下行執行,但再比較一次的用意是什麼???

newmem:
cmp byte ptr [rcx+110],01
je player1
cmp byte ptr [rcx+110],01
jne code

player1:
mov [rbx+78],(float)1
movss xmm0,[rbx+78]
jmp return
code:
movss xmm0,[rbx+78]
jmp return

PlayerInvincible:
jmp newmem
     
      
__________________
為了刷存在感,要想這麼多廢文出來發,我真是服了你。
舊 2021-08-09, 08:07 PM #1
回應時引用此文章
wkm離線中  
substar999
Senior Member
 

加入日期: Sep 2001
您的住址: K
文章: 1,446
不負責任猜測...這感覺像是組合語言

cmp byte ptr [rcx+110],01
je player1

這兩行是比對後數值相同,跳往Player1: 區段的程式繼續執行(je就是結果一致時跳躍)
但若比對後數值不同時怎麼辦呢? 再比對一次確認啊! 所以就有後面兩行的出現

cmp byte ptr [rcx+110],01
jne code

這時的jne則是數值不同時跳往code:的程式區段繼續執行下去。
 
舊 2021-08-09, 09:16 PM #2
回應時引用此文章
substar999現在在線上  
dkjfso
Senior Member
 

加入日期: Apr 2005
文章: 1,192
再比一次如果不是的話就跳到code:
大概類似這樣吧
代碼:
if(x==01)
{
	goto player1;
}
if(x!=01)
{
	goto code;
}
player1:
...
return;

code:
...
return;
舊 2021-08-09, 09:25 PM #3
回應時引用此文章
dkjfso離線中  
wkm
Senior Member
 

加入日期: May 2002
文章: 1,043
newmem 那段落執行下來,[rcx+110]並沒有被改變 不是嗎...所以我問為什麼要執行兩次?
而且都是比較相同的數值1
__________________
為了刷存在感,要想這麼多廢文出來發,我真是服了你。
舊 2021-08-09, 10:25 PM #4
回應時引用此文章
wkm離線中  
substar999
Senior Member
 

加入日期: Sep 2001
您的住址: K
文章: 1,446
改變? cmp又不會改變值,只是比較兩個值不是?
只是cmp結果不會儲存...
所以je用過了cmp的結果後,
想要判斷不等於的情況就得再cmp一次,

引用:
作者wkm
newmem 那段落執行下來,[rcx+110]並沒有被改變 不是嗎...所以我問為什麼要執行兩次?
而且都是比較相同的數值1
舊 2021-08-09, 11:38 PM #5
回應時引用此文章
substar999現在在線上  
twu2
Power Member
 

加入日期: Jan 2002
您的住址: Taipei
文章: 659
引用:
作者wkm
newmem 那段落執行下來,[rcx+110]並沒有被改變 不是嗎...所以我問為什麼要執行兩次?
而且都是比較相同的數值1

可能就寫的時候沒想到吧.
後面那個直接用個 jmp 就可以, 是可以不用 cmp 一次.
__________________

Tommy 碎碎念...
舊 2021-08-10, 07:54 AM #6
回應時引用此文章
twu2離線中  
substar999
Senior Member
 

加入日期: Sep 2001
您的住址: K
文章: 1,446
除了可能沒想到,也有可能是慎重起見的作法,
畢竟遊戲還在運行中,存放在記憶體的資料可能隨時發生變動,
慎重一點沒什麼不好,當然您也可以問作者為何要這樣寫,
或許他會有另外的說法也不一定。

引用:
作者wkm
newmem 那段落執行下來,[rcx+110]並沒有被改變 不是嗎...所以我問為什麼要執行兩次?
而且都是比較相同的數值1
舊 2021-08-10, 10:43 AM #7
回應時引用此文章
substar999現在在線上  


回應


POPIN
主題工具

發表文章規則
不可以發起新主題
不可以回應主題
不可以上傳附加檔案
不可以編輯您的文章

vB 代碼打開
[IMG]代碼打開
HTML代碼關閉



所有的時間均為GMT +8。 現在的時間是10:09 PM.


vBulletin Version 3.0.1
powered_by_vbulletin 2024。