-
當 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不為零,就絕對不會有溢位。
根據這個想法,支付給紅利的位元組數可以繼續增加,僅受記憶體大小的限制。
也就是說:分紅的數量可以被認為是無限的。
-
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
這是合法的。
-
我也輟學了,所以我不知道我是否正確。 我想知道你es:[bx]。
0ah,如果是8位,那就錯了,用16位被除數。 建議大家先用儲存空間儲存資料,然後再用暫存器知道儲存空間,不要用基址來換位址,這樣看起來很亂,一開始沒看懂。
凡事都有兩面性,有好有壞,這是相對的,所以,善良是一種絕對的品質存在,被欺騙可以是一種享受,嚐嚐它是多麼寶貴。 平凡生活中的不平凡。 >>>More
只要您是註冊使用者,您就有權建立條目。 創作不成功的原因是它一定不符合百科全書的規範:可能是詞條名稱不正確,可能是使用了主觀語言,可能是內容太少,詞條內涵沒有得到充分解釋, 或者可能有廣告內容......等等 >>>More