我已經在網上搜索過,但是我找不到明確的例子來理解這條指令做了什麼。所以,如果有人能夠舉一個這樣的例子,那對我來說會很有幫助。movsbl指令做什麼?
17
A
回答
28
移動符號從字節擴展到長字。在Intel語法中,該指令的助記符是MOVSX。
當需要將int8_t
類型的變量轉換爲int
時,C語言編譯器可能會使用該指令,該算法會在算術和其他一些操作(整數提升)上自動發生。由於該指令寫入目標寄存器的所有32位(或64位),因此避免了只寫入寄存器的低8位(或16位)可能導致的性能損失。一組類似的指令允許用零位擴展(英特爾語法中的MOVZX,AT & T語法中的MOVZst(從大小s到大小t))。
1
假設這是ATT彙編語法爲IA32(i386/x86_64),它意味着MOV與Sign-extension從字節到長。那就是相當於MOVSX r32, r/m8
見3-730 Vol. 2A。
14
頂級網頁命中movsbl
是this page,如果你搜索movsbl
它說
MOVSBL and MOVZBL
* MOVSBL sign-extends a single byte, and copies it into a
double-word destination
* MOVZBL expands a single byte to 32 bits with 24 leading
zeros, and copies it into a double-word destination
Example:
%eax = 0x12345678
%edx = 0xAAAABBBB
MOVB %dh, %al %eax = 0x123456BB
MOVSBL %dh, %eax %eax = 0xFFFFFFBB
MOVZBL %dh, %eax %eax = 0x000000BB
看起來像一個非常明顯的例子給我。有關更多示例,請閱讀下一頁。
3
假設你在談論x86,MOVSBL指令擴展了一個字節(8位),表示簽名的號碼爲32位有符號數。剩下的24位依賴於符號爲零或1,因此二進制補碼值保持不變。
含義,如果你有一個負數,高24位將是1s,否則它們將爲零。
無符號數字的等價物是MOVZBL,它總是以0表示。
相關問題
- 1. `test`指令做了什麼?
- 2. lb指令到底做了什麼?
- 3. 的document.getElementsByTagNameNS命令做什麼
- 4. 這個命令做什麼?
- 5. 以下命令做什麼?
- 6. 命令'c ..'做什麼?
- 7. 當使用內聯PTX asm()指令時,'volatile'會做什麼?
- 8. 爲什麼編譯器特定的指令叫做pragmas?
- 9. 8051彙編程序的指令序列是做什麼的?
- 10. 在創建AngularJS指令時有什麼好的做法
- 11. 這些ARM彙編指令做了什麼?
- 12. 3-operand imul指令在ia-32彙編中做了什麼?
- 13. Angular2:指令加載,但什麼都不做
- 14. movl(%eax,%edx,4),%ecx指令是做什麼的?
- 15. 彙編指令轉換是做什麼的?
- 16. 什麼是特權指令?
- 17. 什麼是序言指令?
- 18. 什麼是callq指令?
- 19. 什麼是指令? dojo dstore
- 20. 什麼是版本指令?
- 21. 什麼是每秒指令?
- 22. 這是什麼指令?
- 23. 什麼是ng-app指令
- 24. 什麼爲0x0指示指令
- 25. C指針,我做錯了什麼?
- 26. 函數指針聲明 - __P做什麼?
- 27. 在R中,負指數做什麼?
- 28. .reset對共享指針做了什麼
- 29. JMP做什麼堆棧和幀指針?
- 30. 這個指針做了什麼?
這裏有不止一個彙編指令......你要處理哪一個? 86? MIPS? PPC?臂?等等......等等。? –
我認爲這是ia32。 – sarslanhan
和MOVZBL零擴展:http://stackoverflow.com/questions/9317922/what-does-the-movzbl-instruction-do-in-ia-32-att-syntax?lq=1 –