為什麼編譯總是除以溢位!! 編譯大師,請輸入

發布 科技 2024-05-26
3個回答
  1. 匿名使用者2024-02-11

    當 CPU 執行除法指令(例如 div cx、div bl)時,它可能會溢位。

    如果分紅大,或者分紅小,商可能會超過預倉位,在這種情況下,就會溢位。

    特別是當除數為零時,必然會出現:除以溢位。

    直接使用 div 指令有一定的風險,一不小心就會溢位。

    尤其是當數字不清楚時。

    因此,在執行div指令之前,應判斷避免溢位。

    一般來說,當股息的高點小於除數時,就沒有“溢位”。

    如果高位為零,即 dx = 0 或 ah = 0,這肯定不會溢位。

    更好的方法是編寫乙個“不會溢位”的除法程式。

    方法思路如下:

    左圖顯示了 CPU 在執行 16 位數字除以 8 位數字時的作用。

    在右圖中,被除數:1a 2b 3c 4dh 有 32 位數字。

    除數是:BL,只有 8 位數字。

    商,是:32 位數字。

    按照圖中的步驟,您需要執行四次 div bl。

    只要BL不為零,就絕對不會有溢位。

    根據這個想法,支付給紅利的位元組數可以繼續增加,僅受記憶體大小的限制。

    也就是說:分紅的數量可以被認為是無限的。

  2. 匿名使用者2024-02-10

    1.指出幾個錯誤:

    1.堆疊頂部指標 sp 未初始化。 堆疊已定義,但頂部指標 sp 未初始化。

    2.堆疊操作(push、pop)的順序是相反的。 在推送任何進入操作之前退出堆疊彈出將導致超越堆疊的危險。 它應該先推,然後彈出。

    3.如果表段沒有宣告,如何獲取表段的位址來操作 mov ax 和 table?

    4.返回指令不正確,int 改為 int 21h

    2. 對問題的補充:

    語法是錯誤的。 無法直接在儲存單元之間傳輸資料。 它應該通過暫存器中繼,所以。

    mov word ptr [bx].0ah, es: [di].118h是非法操作,應改為:

    mov ax,[bx].0AH 或 MOV AX,[BX+0AH]。

    mov es:[di].118h,ax 或 mov es:[di+118h],ax

    您可能會對執行即時資料傳輸操作的儲存單元的概念感到困惑,例如:

    mov word ptr [bx+0ah],2

    mov byte ptr [bx+0ah],2

    這是合法的。

  3. 匿名使用者2024-02-09

    我也輟學了,所以我不知道我是否正確。 我想知道你es:[bx]。

    0ah,如果是8位,那就錯了,用16位被除數。 建議大家先用儲存空間儲存資料,然後再用暫存器知道儲存空間,不要用基址來換位址,這樣看起來很亂,一開始沒看懂。

相關回答
27個回答2024-05-26

因為你太在乎他了,害怕失去他,你不是很自信。 >>>More

13個回答2024-05-26

凡事都有兩面性,有好有壞,這是相對的,所以,善良是一種絕對的品質存在,被欺騙可以是一種享受,嚐嚐它是多麼寶貴。 平凡生活中的不平凡。 >>>More

14個回答2024-05-26

失眠的原因有很多,如果你因為噪音而失眠,你可以嘗試使用噪音掩蔽耳塞。

11個回答2024-05-26

呵呵。 看完這個標題,我就知道房東是個男人,不是因為看到了“她”這個詞。 >>>More

15個回答2024-05-26

只要您是註冊使用者,您就有權建立條目。 創作不成功的原因是它一定不符合百科全書的規範:可能是詞條名稱不正確,可能是使用了主觀語言,可能是內容太少,詞條內涵沒有得到充分解釋, 或者可能有廣告內容......等等 >>>More