九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
MUL、IMUL、DIV
大家好,今天這節(jié)課中我們來深入的學(xué)習(xí)下乘法指令。乘法指令有兩種,一種是有符號整數(shù)乘法另一種是無符號整數(shù)乘法,今天我們來學(xué)習(xí)無符號整數(shù)乘法。
        
         MUL是進(jìn)行無符號乘法的指令。MUL(無符號乘法)指令有三種格式:第一種是將8位的操作數(shù)于al相乘。第二種是將16位的操作數(shù)與ax相乘; 第三種是將32位的操作數(shù)與eax進(jìn)行相乘

         乘數(shù)和被乘數(shù)大小必須相同,乘積的尺寸是乘數(shù)/被乘數(shù)大小的兩倍。 三種格式都既接受寄存器操作數(shù),也接受內(nèi)存操作數(shù)。但是不接受立即操作數(shù)(這點(diǎn)大家注意下)。

         例如:
        
         你想將al寄存器中的值乘上2,那么此時(shí)你需要將立即數(shù)2存放到一個(gè)寄存器中,然后通過mul指令相乘,或者將立即數(shù)放到一個(gè)內(nèi)存地址中,然后通過內(nèi)存單元的形式來進(jìn)行相乘。

         舉例:

         mov bl, 2
         mul bl           ;此刻將bl寄存器中的值乘上al寄存器中的值

         指令中唯一的一個(gè)操作數(shù)是乘數(shù)。
        
         也就是當(dāng)我們的乘數(shù)是8位的時(shí)候,則與al相乘,如果我們的乘數(shù)是16位則與ax相乘,如果我們的乘數(shù)是32位則與eax寄存器相乘。


         那么下面我給出mul乘法的相關(guān)操作數(shù)的實(shí)例

       被乘數(shù)                 乘數(shù)               積
         al                   8位操作數(shù)                 ax
         ax                   16位操作數(shù)         dx:ax
         eax                 32位操作數(shù)               edx:eax

            因?yàn)槿绻覀兊某藬?shù)是一個(gè)8位操作數(shù)的話,我們的結(jié)果存在在ax寄存器中。 如果是16位操作數(shù)的話,我們的結(jié)果存放在dx:ax中。如果dx不為0,則進(jìn)位標(biāo)志置位。
        
             在執(zhí)行完mul指令后,我們一般要檢查下進(jìn)位標(biāo)志。因?yàn)槲覀冃枰莱朔e的高半部分是否可以安全的忽略。
        
         例如:
           mov al, 6h
           mov bl, 10h
           mul bl  
         此刻我們檢查進(jìn)位標(biāo)志cf = 0, 那么ah我們就可以將其忽略了,所以結(jié)果是60h。

       那么我們再來舉一個(gè)例子:

         例如:

           mov ax, 6000
           mov bx, 5000
           mul bx
         我們檢查進(jìn)位標(biāo)志,此時(shí)cf = 1。 那么我們的結(jié)果是dx:ax ,此時(shí)我們的dx = 1E00, ax = 0000 所以 最后我們的積 為 1E000000。

         其實(shí)我們從乘積就可以算出來cf是否置位了。

       1.接下來我們留個(gè)小作業(yè),不要用其他輔助工具來計(jì)算。自己口算下,執(zhí)行完后,積為多少?
        
               mov eax, 00800000
               mov ebx, 00200000
               mul ebx


匯編基礎(chǔ)一日一學(xué)習(xí)31 IMUL

         大家好,今天我們來學(xué)習(xí)下有符號整數(shù)的乘法運(yùn)算,IMUL指令。這個(gè)指令保留了乘積的符號位。IMUL指令,IA - 32指令集中有三種格式: 單操作數(shù)、雙操作數(shù)和三操作數(shù)。 在單操作數(shù)格式中,乘數(shù)和被乘數(shù)尺寸大小相同,乘積的大小是乘數(shù)/被乘數(shù)大小的兩倍。

       單操作數(shù)格式: 單操作數(shù)格式把乘積存儲在累加器( ax, dx:ax, edx:eax)中。imul指令單操作數(shù)格式其實(shí)和我們昨天學(xué)習(xí)的mul指令格式基本一樣。

       1.那么接下來我們來看下IMUL單操作數(shù)的格式:
         imul   8位寄存器/8位內(nèi)存操作數(shù)
         imul 16位寄存器/16位內(nèi)存操作數(shù)
         imul 32位寄存器/32位內(nèi)存操作數(shù)



       2.雙操作數(shù)數(shù)格式:
         imul 16位寄存器/ 16位寄存器-16位內(nèi)存操作數(shù)
         imul 16位寄存器/ 8位立即數(shù)
         imul 16位寄存器/ 16位立即數(shù)

         從上面我們可以看出 雙操作數(shù)格式中,乘積存儲在第一個(gè)操作數(shù)中,第一個(gè)操作數(shù)必須是寄存器,第二個(gè)操作數(shù)可以是寄存器、內(nèi)存操作數(shù)、或立即數(shù)。 上面雙操作數(shù)我是按照16位來給大家舉的一些例子。 它當(dāng)然還可以是32位的。

        
         imul 32位寄存器/ 32位寄存器-32位內(nèi)存操作數(shù)
         imul 32位寄存器/ 8位立即數(shù)
         imul 32位寄存器/ 32位立即數(shù)

       3.三操作數(shù)格式:

         imul 16位寄存器/ 16位寄存器-16位內(nèi)存操作數(shù)/ 8位立即數(shù)
         imul 16位寄存器/ 16位寄存器-16位內(nèi)存操作數(shù)/ 16位立即數(shù)

         三操作數(shù)格式把乘積存儲在第一個(gè)操作數(shù),一個(gè)16位寄存器可以被一個(gè)8位或者16位的立即數(shù)乘。

         imul 32位寄存器/ 32位寄存器 -32位內(nèi)存操作數(shù)/ 8位立即數(shù)
         imul 32位寄存器/ 32位寄存器 -32位內(nèi)存操作數(shù)/ 32位立即數(shù)


         如果有效位丟失,則溢出標(biāo)志和進(jìn)位標(biāo)志置位。 使用三操作數(shù)格式時(shí),一定要在執(zhí)行完imul操作后檢查相關(guān)操作位。
        
         好,光看理論估計(jì)你很迷糊,那么我們就來看幾個(gè)實(shí)例:
        
         1. 例如 mov al, -3
                 mov bl, 6

                 imul bl
           此刻執(zhí)行的時(shí)候(-3*6)的結(jié)果存放到ax寄存器中,由于上面我說了,在執(zhí)行imul進(jìn)行有符號整數(shù)的乘法運(yùn)算時(shí),保留了乘積的符號位,也就是說乘積的高半部分是低半部分的符號擴(kuò)展。   符號擴(kuò)展是什么意思呢? 也就是說 如果我們的乘積是個(gè)負(fù)數(shù)則,高半部分都為1,如果乘積是個(gè)正數(shù)的話,高半部分都為0。很顯然我們(-3*6)是負(fù)數(shù),所以此時(shí)高半部分肯定是1,不信大家來計(jì)算下。

           -3的16進(jìn)制表示形式是0FDh
           好此刻我們將0FD轉(zhuǎn)換成補(bǔ)碼的形式,大家不知道還記得16進(jìn)制整數(shù)轉(zhuǎn)換補(bǔ)碼的方法嗎,用15減去各個(gè)進(jìn)制位,最終結(jié)果+1。

         此刻
             FDh
             15 - F = 0
             15 - D = 2
             +   1   = 03h
          
             03*6h = 12h (注意10進(jìn)制18 = 16進(jìn)制12h)
            
             此刻我們將取12h的補(bǔ)碼則為我們最后的乘積

             12h
             15 - 1 = E
             15 - 2 = D
             + 1 = EEh
             由于EEh的最高符號位是1,所以此時(shí)高半部分將擴(kuò)展為低半部分的符號位,所以此時(shí)高半部分為FF(也就是全是二進(jìn)制位1)。

                最終的結(jié)果是FFEEh,此時(shí)由于已經(jīng)被擴(kuò)展了,所以此時(shí)的of = 0。(也就是說如果沒有擴(kuò)展的話,of = 1)。

    

         2.再來看個(gè)例子
             mov al, 3h
             mov bl, 6h
             imul bl

        
             大家口算就可以算的出來,很顯然3*6=18, 16進(jìn)制 = 12h, 此時(shí)由于結(jié)果為正,因?yàn)榻Y(jié)果是12h,但是我們也并不能通過of 或者是 if來指示乘積的高半部分是否為0,也就是說我們的imul雖然能進(jìn)行無符號整數(shù)運(yùn)算,但是我們不能通過它影響的標(biāo)志位來進(jìn)行判斷。。


         3. 再來看個(gè)例子
           mov al, 48
           mov bl, 3
           imul bl
         很顯然我們的結(jié)果為正數(shù),得到的積+144存放在ax中,由于ah不是al的符號擴(kuò)展,因?yàn)橐绯鰳?biāo)志位置位。 of =1


            
       4. 那么接下來我再來舉個(gè)2操作數(shù)的。
         mov ax, -30h
         mov bx, 10h
         imul ax, bx
        
        
         那么-30 * 10 = -48 * 16 = -768
                                 = -300h
         然后我們求反碼
         300
         15 - 3 = C
         15 - 0 = F
         15 - 0 = F
           + 1 = D00
         因?yàn)槲覀兊慕Y(jié)果是負(fù)數(shù),因?yàn)槲覀兊慕Y(jié)果是存在ax寄存器中的,而由于上面說了有符號數(shù)值的乘積是帶符號位擴(kuò)展的,高4位應(yīng)該全是1填充,所以最終結(jié)果為FD00h


     5.接下來我們來個(gè)3位操作數(shù)的。
         mov ax, -30h
         imul bx, ax, 2h
        
         這三個(gè)操作數(shù)的是將結(jié)果存放在第一個(gè)操作數(shù)中。
         -30 * 2 = -60
        
         這時(shí)候取反碼
         15 - 6 = 9
         15 - 0 = F
         +1 = A0
         乘積 = FFA0h,存放到bx中。

        
        
     留個(gè)作業(yè):
         1.
         mov ax, -60h
         imul bx, ax, 3
    
         問:乘積多少?


匯編基礎(chǔ)一日一學(xué)習(xí)32 DIV

         大家好,今天我們來學(xué)習(xí)下無符號整數(shù)的除法運(yùn)算指令,div(無符號)指令執(zhí)行8位、16位和32位無符號整數(shù)的除法運(yùn)算。指令中必須是唯一的一個(gè)寄存器或內(nèi)存操作數(shù)是除數(shù)。
         div指令格式:
         div 8位寄存器/8位內(nèi)存操作數(shù)
         div 16位寄存器/16位內(nèi)存操作數(shù)
         div 32位寄存器/32位內(nèi)存操作數(shù)


         div指令格式和我們的mul基本可以算作是相反的。那么我們看下被除數(shù) 、 除數(shù)、商、余數(shù)之間的關(guān)系。


         被除數(shù)                         除數(shù)                                 商         余數(shù)
         ax                 8位寄存器/8位內(nèi)存操作數(shù)                 al           ah
         dx:ax                 16位寄存器/16位內(nèi)存操作數(shù)                 ax         dx        
         edx:eax                 32位寄存器/32位內(nèi)存操作數(shù)                 eax           edx
1.
         舉個(gè)例子:
         mov ax, 0060h
         mov bl, 2
         div bl   ;al = 30h , ah = 00h

         那么執(zhí)行完后, 商是30h ,余數(shù)是00h


2.
         在舉個(gè)例子
         執(zhí)行(6005h/100h),由于我們的出示是16位,所以被除數(shù)是放在dx:ax中的。 但是由于被除數(shù)是6005h,所以我們必須將dx清0.
         xor dx, dx
         mov ax, 6005h
         mov bx, 100h
         div bx
        
         那么執(zhí)行后, 我們的ax = 0060h, dx = 0005h。 所以我們的商是60h, 余數(shù)是5h。
         很簡單。

來個(gè)作業(yè):
         1.寫出 執(zhí)行(9003h/50h)后的商和余數(shù),以及相關(guān)寄存器的值。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
8086/8088匯編語言指令集
【8086匯編基礎(chǔ)】06--算術(shù)運(yùn)算與邏輯指令
匯編語言之?dāng)?shù)據(jù)處理的2個(gè)基本問題
80X86匯編語言程序設(shè)計(jì)教程(楊季文)習(xí)題答案二
跟電師傅學(xué)單片機(jī)(13):單片機(jī)算術(shù)運(yùn)算類指令圖文講解
lea指令與mov指令
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服