好吧,我知道CLD清除方向標誌和STD設置方向標誌。 但是在設置和清除方向標誌方面有什麼意義?在x86彙編語言中CLD和STD是什麼? DF做什麼?
回答
方向標誌用於影響字符串指令偏移指針寄存器的方向。這些說明可以使用with the REP
prefix來重複操作。 (儘管lods
對rep
不是很有用)。
字符串指令是:MOVS
(複製MEM到MEM),STOS
(存儲AL/AX/EAX/RAX),SCAS
(掃描字符串),CMPS
(比較字符串),並LODS
(負載字符串)。內存和IO端口之間的複製也有ins
/outs
。每個指令都有字節,字,雙字和qword操作數大小。
概括地說,當方向標誌是0,該指令通過遞增的指針數據每一次迭代之後(直到ECX
是零或一些其它條件,這取決於REP
前綴的香味)工作,而如果該標誌是1,指針遞減。
例如,movsd
副本(在64位模式或RDI)一個雙字從[ds:esi]
到[es:edi]
,並執行此:(參見鏈接ISA參考手冊條目中的「操作」部分從英特爾的PDF文件中提取)
dword [es:edi] = dword [ds:esi] // 4-byte copy memory to memory
if (DF == 0)
esi += 4;
edi += 4;
else // DF == 1
esi -= 4;
edi -= 4;
fi
隨着REP前綴,它這樣做ECX次,現代x86 CPU的具有優化的「快速字符串」微碼與16字節或32字節的內部操作做複製(或stos
存儲)。另見this Q&A about memory bandwidth and the ERMSB feature。 (注意只有rep stos
和rep movs
這樣優化,而不是repne/repe scas
或cmps
)。
如果使用的是Windows,然後按stdcall調用 -
在STDCALL,方向標誌是進入明確的,並且必須是 返回明確。
因此,如果您設置了DF,那麼在調用API之前,您必須將其清除。
依賴操作系統。 – amanuel2 2016-10-04 20:02:34
這在大多數32位/ 64位調用約定中很常見,包括i386 System V和x86-64 System V.它可以讓您(或編譯器)在沒有CLD指令的情況下有效地內嵌'rep movsd' /'rep stosd'。 (在現代x86上,它們往往只是快速向上,DF = 0) – 2017-12-03 19:51:16
CLD CLears方向標誌,數據向前。 STD設置方向標誌,數據向後。
CLD:明確的方向標誌,以便每個字符串操作之後該字符串指針 自動遞增
STD: STD用於將方向標誌設置爲1,使得Si和/或DI將自動遞減到當其中一個字符串指令執行時指向下一個字符串元素。如果方向標誌被設置,SI/DI對於字節字符串將減1,對於字符串將減2。
此答案可能對您有所幫助。
- 1. 什麼是一些好的x86彙編語言資源?
- 2. 這是什麼彙編語言?
- 3. x86彙編語言
- 4. bx lr在ARM彙編語言中做了什麼?
- 5. 什麼是GCC內聯彙編語言中的r()和double%%%?
- 6. 「ccout」在彙編語言中的含義是什麼?
- 7. 彙編語言x86 Irvine32
- 8. 彙編X86語言問題
- 9. x86彙編語言和啓動
- 10. 彙編語言和機器語言之間的關係是什麼?
- 11. 彙編語言不能做什麼,但只有機器語言可以嗎?
- 12. 這些彙編語言語句的含義是什麼?
- 13. C代碼在Visual Studio中編譯成什麼彙編語言?
- 14. 彙編語言中的「MOV AH,4CH」是什麼意思?
- 15. 彙編語言中的「短」跳是什麼意思?
- 16. 在Intel x86彙編手冊中,00+是什麼意思?
- 17. 爲什麼語言是不是裝的?我做錯了什麼?
- 18. std :: thread.join()是做什麼的?
- 19. 是做什麼用回用JavaScript語言
- 20. ds:esi + ecx + 7 - >它在彙編語言中意味着什麼?
- 21. 什麼是DUP的彙編語言的含義( '#')
- 22. 什麼是8086系統日期彙編語言程序
- 23. 「set_w」和「set_sw」彙編語言命令有什麼作用?
- 24. 什麼是雙美元符號在x86彙編(NASM)
- 25. 「leal 0x10(%ebx),%eax」x86彙編指令中的0x10是什麼?
- 26. 彙編語言的x86歐文
- 27. Windows:什麼編程語言?
- 28. 一些x86彙編語言問題
- 29. 彙編語言x86 JL指令
- 30. 這是什麼編程語言?
呃,這個位引起的錯誤數量。我的Turbo Pascal代碼使用內聯彙編來重置它。 – 2012-03-10 22:49:25