色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 8086指令系統(tǒng)---算術(shù)指令(二)

          8086指令系統(tǒng)---算術(shù)指令(二)

          作者: 時(shí)間:2016-11-27 來(lái)源:網(wǎng)絡(luò) 收藏
           4 除法指令


           DIV  src無(wú)符號(hào)數(shù)除法(unsigned divide)
           IDIV src帶符號(hào)數(shù)除法(signed divide)
           字節(jié)操作: (AL) ← (AX) / src 的商
                (AH) ← (AX) / src 的余數(shù)
           字操作: (AX) ← (DX, AX) / src 的商
               (DX) ← (DX, AX) / src 的余數(shù)

          本文引用地址:http://cafeforensic.com/article/201611/322191.htm

           參加運(yùn)算的除數(shù)和被除數(shù)是無(wú)符號(hào)數(shù)時(shí),使用DIV指令,其商和余數(shù)也均為無(wú)符號(hào)數(shù)。IDIV指令執(zhí)行的操作與DIV相同,但操作數(shù)必須是帶符號(hào)數(shù),商和余數(shù)也均為帶符號(hào)數(shù),而且余數(shù)的符號(hào)與被除數(shù)的符號(hào)相同。

            這兩條除法指令的被除數(shù)必須存放在AX或DX,AX中,源操作數(shù)src作為除數(shù),可用除立即數(shù)以外的任一種尋址方式來(lái)取得。

            除法指令對(duì)所有條件碼均無(wú)定義,因此對(duì)除法指令產(chǎn)生的錯(cuò)誤,如除數(shù)為0或商溢出等錯(cuò)誤,程序員都不能用條件碼進(jìn)行判斷,而是由系統(tǒng)直接轉(zhuǎn)入0型中斷來(lái)處理。所謂商溢出,是指被除數(shù)高一半的絕對(duì)值大于除數(shù)的絕對(duì)值時(shí),商超出了16位的表示范圍(字操作)或8位的表示范圍(字節(jié)操作)。

            由于使用除法指令的需要,經(jīng)常要將字節(jié)數(shù)據(jù)擴(kuò)展為字?jǐn)?shù)據(jù),或者將字?jǐn)?shù)據(jù)擴(kuò)展為雙字?jǐn)?shù)據(jù),所以我們先介紹下面的符號(hào)擴(kuò)展指令,然后再對(duì)除法指令舉例。

           3.3.2.5 符號(hào)擴(kuò)展指令

           CBW字節(jié)擴(kuò)展為字(convert byte to word)
           
           執(zhí)行操作:
           (AH)= 00H 當(dāng)(AL)的最高有效位為0時(shí)
          ?。ˋH)= FFH 當(dāng)(AL)的最高有效位為1時(shí)

           CWD字?jǐn)U展為雙字(convert word to double word)
           
           執(zhí)行操作:
          ?。―X)=0000H當(dāng)(AX)的最高有效位為0時(shí)
          ?。ˋH)=FFFFH當(dāng)(AX)的最高有效位為1時(shí)

           這是兩條無(wú)操作數(shù)指令,進(jìn)行符號(hào)擴(kuò)展的操作數(shù)必須存放在AL寄存器或AX寄存器中。這兩條符號(hào)擴(kuò)展指令都不影響條件碼。

           注意:
           除法指令要求字操作時(shí),被除數(shù)必須為32位,除數(shù)是16位,商和余數(shù)是16位的;
           字節(jié)操作時(shí),被除數(shù)必須為16位,除數(shù)是8位,得到的商和余數(shù)是8位的。

           例假設(shè)(AX)= 0BA45H,下列指令分別執(zhí)行后的結(jié)果是什么?
                    CBW   ; 執(zhí)行后,(AH)=00, (AL)=45H, 或 (AX)=0045H
                    CWD   ; 執(zhí)行后,(DX)=0FFFFH, (AX)=0BA45H

           例編寫(xiě)程序,分別實(shí)現(xiàn)下列數(shù)據(jù)的無(wú)符號(hào)除法和帶符號(hào)除法。
                 DATA7  DW 9400H  ; numerator
                 DATA8  DW 0060H  ; denominator
                 QUOT   DW ?    ; quotient
                 REMAIN DW ?    ; remainder
                 ; unsigned divide
                  MOV  AX,DATA7  ; AX holds numerator
                  MOV  DX,0    ; (DX,AX)= 0000 9400H
                  DIV  DATA8    ; unsigned divide
                  MOV  QUOT,AX   ; quotient is in AX,(AX)=018AH
                  MOV  REMAIN,DX ; remainder is in DX,(DX)=0040H
                 ; signed divide
                  MOV  AX,DATA7  ; (AX)=9400H
                  CWD        ; (DX,AX)=0FFFF, 9400H
                  IDIV DATA8   ; signed divide
                  MOV  QUOT,AX  ; quotient is in AX,(AX)=0FEE0HH
                  MOV  REMAIN,DX ; remainder is in DX,(DX)=0

           3.3.2.6 十進(jìn)制調(diào)整指令

            80x86微型機(jī)提供了一組十進(jìn)制調(diào)整指令,用來(lái)處理ASCII碼和BCD碼表示的數(shù)。
           
            BCD碼:
            BCD(Binary Coded Decimal)是用二進(jìn)制編碼表示的十進(jìn)制數(shù)(見(jiàn)表3.3),十進(jìn)制數(shù)采用0~9十個(gè)數(shù)字,是人們最常用的。在計(jì)算機(jī)中,同一個(gè)數(shù)可以用兩種BCD格式來(lái)表示:①壓縮的BCD碼 ②非壓縮的BCD碼

            壓縮的BCD碼:
            壓縮的BCD碼用4位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位,整個(gè)十進(jìn)制數(shù)用一串BCD碼來(lái)表示。例如,十進(jìn)制數(shù)59表示成壓縮的BCD碼為0101 1001,十進(jìn)制數(shù)1946表示成壓縮的BCD碼為0001 1001 0100 0110。

            非壓縮的BCD碼:
            非壓縮的BCD碼用8位二進(jìn)制數(shù)表示一個(gè)十進(jìn)制數(shù)位,其中低4位是BCD碼,高4位是0。例如,十進(jìn)制數(shù)78表示成壓縮的BCD碼為0000 0111 0000 1000。

           從鍵盤(pán)輸入數(shù)據(jù)時(shí),計(jì)算機(jī)接收的是ASCII碼,要將ASCII碼表示的數(shù)轉(zhuǎn)換成BCD碼是很簡(jiǎn)單的,只要把ASCII碼的高4位清零即可。

            壓縮的BCD碼調(diào)整指令
            DAA和DAS指令完成加法和減法的調(diào)整功能。

            DAA加法的十進(jìn)制調(diào)整(decimal adjust for addition)
            執(zhí)行操作:(AL)← 把AL中的和調(diào)整為壓縮的BCD格式

            DAS減法的十進(jìn)制調(diào)整(decimal adjust for subtraction)
            執(zhí)行操作:(AL)← 把AL中的差調(diào)整為壓縮的BCD格式

            DAA和DAS指令的調(diào)整方法如下:
            執(zhí)行加法指令(ADD、ADC)或減法指令(SUB、SBB)后,
            1.如果結(jié)果的低4位 (AL)0~3>9或AF=1,則(AL)←(AL)±06H,且AF置1;
            2.如果結(jié)果的高4位 (AL)4~7>9或CF=1,則(AL)←(AL)±60H,且CF置1。

            對(duì)上述方法,加法調(diào)整作+06H和+60H,減法調(diào)整作-06H和-60H。這兩個(gè)調(diào)整的條件,如果滿足其一,則±06H或±60H;如果同時(shí)滿足,則±06H后,再±60H。

            非壓縮的BCD碼調(diào)整指令
            AAA加法的ASCII調(diào)整(ASCII adjust for add)
            執(zhí)行操作:
           ?。ˋL)← 把AL中的和調(diào)整為非壓縮的BCD格式
           ?。ˋH)←(AH)+ 調(diào)整產(chǎn)生的進(jìn)位值

            AAS減法的ASCII調(diào)整(ASCII adjust for sub)
            執(zhí)行操作:
           ?。ˋL)← 把AL中的差調(diào)整為非壓縮的BCD格式
            (AH)←(AH)- 調(diào)整產(chǎn)生的借位值

            加法和減法的操作數(shù)可以直接使用ASCII碼,而不必把高位0011清為0000,AAA和AAS指令就是專(zhuān)門(mén)為ASCII碼操作數(shù)或非壓縮BCD碼操作數(shù)的加減法而設(shè)計(jì)的。

            AAA和AAS的調(diào)整方法如下:
            執(zhí)行加法指令(ADD、ADC)或減法指令(SUB、SBB)后,結(jié)果存放在AL寄存器中:
           ?。?)如果(AL)0~3= 0~9,且AF=0,則(AL)4~7= 0,AF的值送CF;
           ?。?)如果(AL)0~3=A~F,或AF=1,則(AL)←(AL)±06H,(AL)4~7= 0,(AH)←(AH)±1,AF的值送CF。
            AAA和AAS指令除影響AF和CF標(biāo)志外,其余標(biāo)志位均無(wú)定義。

            AAM乘法的ASCII調(diào)整(ASCII adjust for mul)
            執(zhí)行操作:(AX)← 把AX中的積調(diào)整為非壓縮的BCD格式

            AAD除法的ASCII調(diào)整(ASCII adjust for div)
            執(zhí)行操作:(AX)← AX中的被除數(shù)(非壓縮的BCD格式)轉(zhuǎn)化為二進(jìn)制數(shù)

            以上兩條指令是專(zhuān)為非壓縮的BCD碼的乘除法而設(shè)計(jì)的,它們將乘法和除法的結(jié)果轉(zhuǎn)換為非壓縮的BCD碼。
            
            注意:AAM和AAD都只對(duì)AX寄存器中的數(shù)進(jìn)行調(diào)整,它們只影響SF、ZF和PF標(biāo)志位,其它標(biāo)志位無(wú)定義。

            AAM的調(diào)整方法為:
            執(zhí)行乘法指令(MUL)后,調(diào)整存放在AL寄存器中的乘積:
            ?。ˋH)←(AL)/ 0AH的商
             (AL)←(AL)/ 0AH的余數(shù)

            AAM實(shí)際上是將兩個(gè)一位數(shù)的非壓縮BCD碼相乘后得到的乘積進(jìn)行二化十的轉(zhuǎn)換,十位數(shù)放在AH中,個(gè)位數(shù)放在AL中,那么AX中就是乘積的非壓縮BCD碼。


          上一頁(yè) 1 2 下一頁(yè)

          評(píng)論


          技術(shù)專(zhuān)區(qū)

          關(guān)閉