欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

匯編語(yǔ)言MUL指令無(wú)符號(hào)數(shù)乘法的使用

 更新時(shí)間:2021年02月04日 10:34:03   投稿:zx  
這篇文章主要介紹了匯編語(yǔ)言MUL指令無(wú)符號(hào)數(shù)乘法的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

32 位模式下,MUL(無(wú)符號(hào)數(shù)乘法)指令有三種類(lèi)型:

  • 第一種執(zhí)行 8 位操作數(shù)與 AL 寄存器的乘法;
  • 第二種執(zhí)行 16 位操作數(shù)與 AX 寄存器的乘法;
  • 第三種執(zhí)行 32 位操作數(shù)與 EAX 寄存器的乘法。

乘數(shù)和被乘數(shù)的大小必須保持一致,乘積的大小則是它們的一倍。這三種類(lèi)型都可以使用寄存器和內(nèi)存操作數(shù),但不能使用立即數(shù):

MUL reg/mem8
MUL reg/meml6
MUL reg/mem32

MUL 指令中的單操作數(shù)是乘數(shù)。下表按照乘數(shù)的大小,列出了默認(rèn)的被乘數(shù)和乘積。由于目的操作數(shù)是被乘數(shù)和乘數(shù)大小的兩倍,因此不會(huì)發(fā)生溢岀。

被乘數(shù) 乘數(shù) 乘積
AL reg/mem8 AX
AX reg/mem16 DX:AX
EAX reg/mem32 EDX:EAX

如果乘積的高半部分不為零,則 MUL 會(huì)把進(jìn)位標(biāo)志位和溢出標(biāo)志位置 1。因?yàn)檫M(jìn)位標(biāo)志位常常用于無(wú)符號(hào)數(shù)的算術(shù)運(yùn)算,在此我們也主要說(shuō)明這種情況。例如,當(dāng) AX 乘以一個(gè) 16 位操作數(shù)時(shí),乘積存放在 DX 和 AX 寄存器對(duì)中。其中,乘積的高 16 位存放在 DX,低 16 位存放在 AX。如果 DX 不等于零,則進(jìn)位標(biāo)志位置 1,這就意味著隱含的目的操作數(shù)的低半部分容納不了整個(gè)乘積。

有個(gè)很好的理由要求在執(zhí)行 MUL 后檢查進(jìn)位標(biāo)志位,即,確認(rèn)忽略乘積的高半部分是否安全。

MUL 示例

下述語(yǔ)句實(shí)現(xiàn) AL 乘以 BL,乘積存放在 AX 中。由于 AH(乘積的高半部分)等于零,因此進(jìn)位標(biāo)志位被清除(CF=0):

mov al, 5h
mov bl, 10h
mul bl          ; AX = 0050h, CF = 0

下圖展示了寄存器內(nèi)容的變化:

下述語(yǔ)句實(shí)現(xiàn) 16 位值 2000h 乘以 0100h。由于乘積的高半部分(存放于 DX)不等于零,因此進(jìn)位標(biāo)志位被置 1:

.data
val1 WORD 2000h
val2 WORD 0l00h
.code
mov ax, val1      ; AX = 2000h
mul val2        ; DX:AX = 00200000h, CF = 1

下述語(yǔ)句實(shí)現(xiàn) 12345h 乘以 1000h,產(chǎn)生的 64 位乘積存放在 EDX 和 EAX 寄存器對(duì)中。EDX 中存放的乘積高半部分為零,因此進(jìn)位標(biāo)志位被清除:

mov eax, 12345h
mov ebx, 1000h
mul ebx          ; EDX:EAX = 0000000012345000h, CF = 0

下圖展示了寄存器內(nèi)容的變化:

在 64 位模式下使用 MUL

64 位模式下,MUL 指令可以使用 64 位操作數(shù)。一個(gè) 64 位寄存器或內(nèi)存操作數(shù)與 RAX 相乘,產(chǎn)生的 128 位乘積存放到 RDX:RAX 寄存器中。下例中,RAX 乘以 2,就是將 RAX 中的每一位都左移一位。RAX 的最高位溢出到 RDX 寄存器,使得 RDX 的值為 0000 0000 0000 0001h:

mov rax, 0FFFF0000FFFF0000h
mov rbx, 2
mul rbx           ; RDX:RAX = 0000000000000001FFFE0001FFFE0000

下面的例子中,RAX 乘以一個(gè) 64 位內(nèi)存操作數(shù)。該寄存器的值乘以 16,因此,其中的每個(gè)十六進(jìn)制數(shù)字都左移一位(一次移動(dòng) 4 個(gè)二進(jìn)制位就相當(dāng)于乘以 16)。

.data
multiplier QWORD 10h
.code
mov rax, OAABBBBCCCCDDDDh
mul multiplier    ; RDX:RAX = 00000000000000000AABBBBCCCCDDDDOh

到此這篇關(guān)于匯編語(yǔ)言MUL指令無(wú)符號(hào)數(shù)乘法的使用的文章就介紹到這了,更多相關(guān)匯編語(yǔ)言MUL指令內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • 匯編語(yǔ)言中move指令的使用

    匯編語(yǔ)言中move指令的使用

    MOV指令是在ARM匯編語(yǔ)言中用于將數(shù)據(jù)從一個(gè)位置或寄存器復(fù)制到另一個(gè)位置或寄存器的指令,本文就來(lái)詳細(xì)的介紹一下move指令,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • 匯編語(yǔ)言MIPS指令分類(lèi)及尋址模式原理概念

    匯編語(yǔ)言MIPS指令分類(lèi)及尋址模式原理概念

    這篇文章主要為大家介紹了匯編語(yǔ)言MIPS指令分類(lèi)及尋址模式的原理及概念,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2021-11-11
  • 匯編語(yǔ)言中mov和lea指令的區(qū)別詳解

    匯編語(yǔ)言中mov和lea指令的區(qū)別詳解

    指令(instruction)是一種語(yǔ)句,它在程序匯編編譯時(shí)變得可執(zhí)行。本文給大家總結(jié)一下匯編語(yǔ)言中mov和lea指令的區(qū)別詳解,感興趣的朋友跟隨小編一起看看吧
    2020-01-01
  • Visual Studio-X64匯編編寫(xiě)方法

    Visual Studio-X64匯編編寫(xiě)方法

    本文介紹了在Visual Studio中配置64位匯編環(huán)境和C++與匯編的混合編程的方法,詳細(xì)說(shuō)明了設(shè)置平臺(tái)工具集、生成依賴(lài)項(xiàng)、鏈接器等步驟,并提供了解決可能出現(xiàn)的編譯錯(cuò)誤的方案,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • 匯編實(shí)現(xiàn)的memcpy和memset的方法

    匯編實(shí)現(xiàn)的memcpy和memset的方法

    這篇文章主要介紹了匯編實(shí)現(xiàn)的memcpy和memset的方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例

    匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例

    這篇文章主要介紹了匯編實(shí)現(xiàn)簡(jiǎn)單選擇排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 匯編實(shí)現(xiàn)冒泡排序的方法示例

    匯編實(shí)現(xiàn)冒泡排序的方法示例

    這篇文章主要介紹了匯編實(shí)現(xiàn)冒泡排序的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 匯編語(yǔ)言指令集之串處理指令講解

    匯編語(yǔ)言指令集之串處理指令講解

    這篇文章主要介紹了匯編語(yǔ)言指令集之串處理指令講解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2020-01-01
  • Debug的基本使用()

    Debug的基本使用()

    Debug是一個(gè)通過(guò)操作系統(tǒng)(os)對(duì)cpu寄存器進(jìn)行訪(fǎng)問(wèn)用于學(xué)習(xí)匯編的程序,但是如今的win10(64位)已經(jīng)不支持cmd打開(kāi)debug,但是我們可以通過(guò)DOSBOX模擬器對(duì)其進(jìn)行訪(fǎng)問(wèn)
    2023-08-08
  • 常用的匯編指令與技巧(收藏)

    常用的匯編指令與技巧(收藏)

    這篇文章主要介紹了常用的匯編指令與技巧,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-01-01

最新評(píng)論