亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

“ rep ret”是什么意思?

“ rep ret”是什么意思?

MMTTMM 2019-11-02 11:03:42
我在Visual Studio 2008上測試了一些代碼,并注意到security_cookie。我可以理解它的要點,但是我不明白此指令的目的是什么。    rep ret /* REP to avoid AMD branch prediction penalty */當然我可以理解注釋:),但是前綴前綴在和的上下文中是做ret什么的,如果ecx!= 0 會發生什么呢?顯然,ecx在調試時將忽略來自的循環計數,這是可以預期的。我在此處找到此代碼(出于安全考慮,由編譯器注入):void __declspec(naked) __fastcall __security_check_cookie(UINT_PTR cookie){    /* x86 version written in asm to preserve all regs */    __asm {        cmp ecx, __security_cookie        jne failure        rep ret /* REP to avoid AMD branch prediction penalty */failure:        jmp __report_gsfailure    }}
查看完整描述

3 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

顯然,某些AMD處理器的分支預測器在分支的目標或穿透是ret指令時表現不佳,并且添加rep前綴可以避免這種情況。


關于的含義rep ret,《英特爾指令集參考》中沒有提及此指令序列,并且的文檔rep不是很有幫助:


當與非字符串指令一起使用時,REP前綴的行為是不確定的。


這意味著至少rep不必重復操作。


現在,從AMD指令集參考(1.2.6重復前綴)中:


前綴僅應與此類字符串指令一起使用。


通常,僅在上面表1-6、1-7和1-8中列出的字符串指令(不包含ret)中使用重復前綴。


因此,實際上似乎是未定義的行為,但是可以假設,實際上,處理器只是忽略指令的rep前綴ret。


查看完整回答
反對 回復 2019-11-02
  • 3 回答
  • 0 關注
  • 2215 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號