2012-03-20 34 views
5

Tôi cố gắng để chạy đoạn mã sau vào lắp ráp:Bắt nổi điểm ngoại lệ trong khi cố gắng sử dụng div trong lắp ráp

mov  %si, %ax 
    mov  $15, %si 
    div  %si 
    mov  %eax, %esi 

Khi tôi thực hiện chương trình của tôi, nó biên dịch, nhưng khi chạy nó mang lại cho tôi một điểm nổi ngoại lệ. Tôi đã cố thay thế các thông số của dòng cuối cùng bằng %ah%si.

Tóm lại, tôi đang cố gắng chia %esi theo 15. Tôi chỉ muốn một số int và không cần số double.

Cảm ơn bạn

Trả lời

13

Các hướng dẫn div chia tham số hai từ dx/ax bởi các toán hạng. Nếu thương quá lớn để vừa với một từ, nó sẽ ném ngoại lệ đó.

tham khảo: http://siyobik.info.gf/main/reference/instruction/DIV

Những gì bạn có trong dx đăng ký? Nhiều khả năng dx/ax được chia cho 15 không vừa với từ 16 bit.

+0

Không có gì (hoặc công cụ ngẫu nhiên), tôi nghĩ hoạt động của tôi là% si /% rìu, được lưu vào% ax – juliensaad

+1

Sau đó, bạn cần xóa (đặt thành 0) thanh ghi 'dx'. Bởi vì nó đại diện cho 16 bit hàng đầu của cổ tức đầu vào. – Mysticial

+0

Đã hoạt động! Cảm ơn rất nhiều, tôi sẽ trả lời câu trả lời sau 7 phút – juliensaad

Các vấn đề liên quan