Có cái gì đó giống như một toán tử modulo trong x86 Assembler?Ngôn ngữ lắp ráp - Cách thực hiện Modulo?
Trả lời
Hướng dẫn DIV
(và đối số IDIV
cho các số đã ký) cung cấp cả thương và số dư (modulo). DIV r16
chia số 32 bit trong DX:AX
bởi toán hạng 16 bit và lưu lại thương số trong AX
và số còn lại trong DX
.
Ví dụ:
mov dx, 0
mov ax, 1234
mov bx, 10
div bx ; Divides 1234 by 10. DX = 4 and AX = 123
Trong 32-bit lắp ráp bạn có thể làm div ebx
để chia một toán hạng 64-bit trong EDX:EAX
bởi EBX
. Xem Intels Architectures Software Developer’s Manuals để biết thêm thông tin.
Nhưng GCC không sử dụng div vì nó chậm: http://stackoverflow.com/questions/4361979/how-does- the-gcc-implementation-of-module-work-và-why-does-it-not-use-the –
Nếu bạn tính modulo công suất của hai, sử dụng bitwise AND đơn giản hơn và thường nhanh hơn so với thực hiện phân chia. Nếu b
là sức mạnh của hai, a % b == a & (b - 1)
.
Ví dụ: hãy lấy một giá trị trong sổ đăng ký EAX, modulo 64.
Cách đơn giản nhất là AND EAX, 63
, bởi vì 63 là 111111 ở dạng nhị phân.
Chữ số đeo mặt nạ, chữ số cao hơn không được chúng tôi quan tâm. Hãy thử nó!
Tương tự, thay vì sử dụng MUL hoặc DIV với quyền hạn hai, bit dịch chuyển là cách để thực hiện. Hãy coi chừng số nguyên đã ký, mặc dù!
- 1. Ngôn ngữ lắp ráp - Máy xếp
- 2. Ngôn ngữ lắp ráp - Nhiều loại?
- 3. Ngôn ngữ lắp ráp thành C
- 4. ngôn ngữ lắp ráp trong os x
- 5. làm thế nào lisp được thực hiện trong ngôn ngữ lắp ráp?
- 6. Là CIL một ngôn ngữ lắp ráp và JIT là một bộ lắp ráp
- 7. In ra một số trong ngôn ngữ lắp ráp?
- 8. Ngôn ngữ lắp ráp LLVM ổn định như thế nào?
- 9. x86 thành ngữ lắp ráp
- 10. Linux 64 bit, Ngôn ngữ lắp ráp, Sự cố?
- 11. Có ngôn ngữ lắp ráp cho CUDA không?
- 12. Người mới bắt đầu Ngôn ngữ lắp ráp
- 13. Tăng từ 0 lên 100 trong ngôn ngữ lắp ráp
- 14. Ngôn ngữ lắp ráp nào để tìm hiểu
- 15. Bạn có bao giờ cần viết mã thực trong ngôn ngữ lắp ráp không?
- 16. Grub và vào Chế độ thực (lập trình ngôn ngữ lắp ráp cấp thấp)
- 17. Lắp ráp Maven: lắp ráp
- 18. Làm thế nào để kiểm tra giá trị EIP với ngôn ngữ lắp ráp?
- 19. Tại sao có sự khác biệt giữa các ngôn ngữ lắp ráp như Windows, Linux?
- 20. Tài liệu để đọc các ngôn ngữ lắp ráp khác nhau?
- 21. R() và %% %% trong ngôn ngữ lắp ráp nội tuyến GCC là gì?
- 22. CLD và STD cho ngôn ngữ lắp ráp x86 là gì? DF làm gì?
- 23. Học lắp ráp ARM
- 24. Lấy tên lắp ráp ứng dụng web, bất kể lắp ráp hiện tại là
- 25. Phát hiện ngôn ngữ
- 26. Các cách khác để thực hiện thao tác modulo
- 27. Lắp ráp đường vòng và lắp ráp GCC (Linux)
- 28. Có thể thực hiện một ngôn ngữ lập trình thứ hai bằng ngôn ngữ đó không?
- 29. Làm cách nào để thực hiện lắp ráp nội tuyến trên iPhone?
- 30. Lắp ráp theo Byte
http://stackoverflow.com/questions/4361979/calculating-modulo-in-assembly –