簡體   English   中英

匯編語言中的32位除法

[英]32 bit division in assembly language

我正在大學課程(80386編程)中學習匯編語言編程。 目前,我正在使用EDX和EAX寄存器分別存儲余數和商來學習32位除法的來龍去脈。 我想知道,為什么不包括在內時為什么我沒有得到正確的輸出

mov edx, 00000000h

在我的程序中。 程序不運行或輸出錯誤。

相關源代碼:

mov edx, 00000000h
mov eax, 1234567Ah
div 11111111h ; now EDX=remainder, EAX=quotient

如果需要,我將發布完整代碼。

當使用DIV與一個32位操作數,它將分在64位值EDX:EAX (高DWORD在EDX ,低DWORD在EAX由操作數),並把在商數EAX和在其余EDX

因此,如果要除法的值是32位(僅適用於EAX ),則應在除法之前清除EDX 否則將導致錯誤的結果,或者如果商不適合EAX則除法溢出。

32位div實際上將edx:eax除以指定值。 如果edx中包含隨機垃圾,您將獲得垃圾結果。 沒有選擇用eax划分JUST ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM