我已經在網上搜索過,但是我找不到明確的例子來理解這條指令做了什麼。所以,如果有人能夠舉一個這樣的例子,那對我來說會很有幫助。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. 這是什麼movsbl指令?
- 2. `test`指令做了什麼?
- 3. tst.b或tst.w指令具體做什麼?
- 4. cmpq指令是做什麼的?
- 5. lb指令到底做了什麼?
- 6. 這個JQuery指令做了什麼$(function(){...})
- 7. 這個命令做什麼?
- 8. 命令'c ..'做什麼?
- 9. 的document.getElementsByTagNameNS命令做什麼
- 10. 以下命令做什麼?
- 11. 彙編指令'db'實際上做了什麼?
- 12. Angular2:指令加載,但什麼都不做
- 13. 下面的彙編指令做了什麼添加-8(%rbp),%xmm0?
- 14. 爲什麼編譯器特定的指令叫做pragmas?
- 15. 這些ARM彙編指令做了什麼?
- 16. 8051彙編程序的指令序列是做什麼的?
- 17. 當使用內聯PTX asm()指令時,'volatile'會做什麼?
- 18. 程序集:指令/屬性是做什麼的?
- 19. 「nop dword ptr [rax + rax]」x64彙編指令是做什麼的?
- 20. 這條指令在彙編中做了什麼?
- 21. 我不明白什麼指令「和斧頭,1111111100000000b」在做
- 22. 這個apache rewrite指令是做什麼的?
- 23. movl(%eax,%edx,4),%ecx指令是做什麼的?
- 24. 彙編指令轉換是做什麼的?
- 25. 當只有位移被使用時,LEA指令會做什麼?
- 26. 「.align」x86彙編程序指令是做什麼的?
- 27. @Route指令不起作用 - 我做錯了什麼?
- 28. 3-operand imul指令在ia-32彙編中做了什麼?
- 29. ARM7 IT(如果有)指令真的在做什麼?
- 30. 這條指令是做什麼的?: - mov%gs:0x14,%eax
這裏有不止一個彙編指令......你要處理哪一個? 86? MIPS? PPC?臂?等等......等等。? –
我認爲這是ia32。 – sarslanhan
和MOVZBL零擴展:http://stackoverflow.com/questions/9317922/what-does-the-movzbl-instruction-do-in-ia-32-att-syntax?lq=1 –