兩個相乘的數,要麼都是8位,要麼都是16位。為什麼呢?
解釋如下:
按照規定,如果是8位相乘,一個預設儲存在AH中,另一個儲存在8位暫存器或者記憶體位元組單元中,計算結果預設放在AX中;
如果是16位相乘,一個預設儲存在AX中,另一個儲存在16位暫存器或者記憶體字單元中,計算結果預設高位放在DX,低位放在AX中。
我們來假設一下,如果是8位和16位相乘,CPU怎麼執行:
如果是8位和16位相乘,那麼假設你的8位儲存在AH中,16位儲存在一個16位的暫存器或者記憶體字單元中(我們假設儲存在BX中),在CPU執行到語句:MUL BX 的時候,那麼此時CPU看到是在與一個16位數相乘(因為BX是16位暫存器,儲存的是16位的數),CPU就會預設將AX中的16位數與BX的數相乘,而不是與AH中的數相乘,這樣不就混亂了嗎?
如果是8位和16位相乘,反之假設你的16位儲存在AX中,8位儲存在一個8位的暫存器或者記憶體位元組單元中,,,,,,,,,,,最後CPU還是會如上一個假設那樣瞎計算,樓主也會很鬱悶啊~
所以,兩個相乘的數,要麼都是8位,要麼都是16位,本質上這是我們人和CPU的一個計算約定,CPU只會按照人定的規則辦事。
兩個相乘的數,要麼都是8位,要麼都是16位。為什麼呢?
解釋如下:
按照規定,如果是8位相乘,一個預設儲存在AH中,另一個儲存在8位暫存器或者記憶體位元組單元中,計算結果預設放在AX中;
如果是16位相乘,一個預設儲存在AX中,另一個儲存在16位暫存器或者記憶體字單元中,計算結果預設高位放在DX,低位放在AX中。
我們來假設一下,如果是8位和16位相乘,CPU怎麼執行:
如果是8位和16位相乘,那麼假設你的8位儲存在AH中,16位儲存在一個16位的暫存器或者記憶體字單元中(我們假設儲存在BX中),在CPU執行到語句:MUL BX 的時候,那麼此時CPU看到是在與一個16位數相乘(因為BX是16位暫存器,儲存的是16位的數),CPU就會預設將AX中的16位數與BX的數相乘,而不是與AH中的數相乘,這樣不就混亂了嗎?
如果是8位和16位相乘,反之假設你的16位儲存在AX中,8位儲存在一個8位的暫存器或者記憶體位元組單元中,,,,,,,,,,,最後CPU還是會如上一個假設那樣瞎計算,樓主也會很鬱悶啊~
所以,兩個相乘的數,要麼都是8位,要麼都是16位,本質上這是我們人和CPU的一個計算約定,CPU只會按照人定的規則辦事。