彙編程式sbb指令,彙編程式SBB指令

2021-03-10 21:25:59 字數 6424 閱讀 1177

1樓:陽光上的橋

學校畢業後就沒用過彙編了,sbb指令

,一看還以為是sb的暱稱呢:)

sbb指令

sbb是帶借位減法專指令,它利用

屬了cf位上記錄的借位值。

指令格式:sbb 操作物件1,操作物件2

功能:操作物件1=操作物件1-操作物件2-cf若ax=1020h,bx=1200h,cf=1,則sbb ax,bx的執行後ax的結果為:

1020-1200-1

=fe1f

正確答案為c

2樓:傻教授

sbb指令在彙編程式中屬於算術運算的帶借位減法指令

sbb:帶借位減法,

指令格式:sbb 操作對專象1,操作物件2功能:操屬作物件1=操作物件1-操作物件2-cf 其中cf為進位的值

若ax=1020h,bx=1200h,cf=1,則sbb ax,bx的執行後ax的結果為:

1020-1200-1

=fe1f

3樓:匿名使用者

提問者對回bai答的評價du

:十分感謝~~

但是還zhi是沒搞明dao白-181是怎麼轉化成fe1f滴~回~呵呵~~我是菜鳥

回答的答挺對的。我再來說你的問題。

上個回答者說的1020-1200-1是十六進位制的。

其實是1020h-1200h-1

減出來的結果就是0fe1fh....沒有轉化。

組合語言指令大全,要詳細的 !!!!

4樓:匿名使用者

最佳答案ibm-pc組合語言指令集

資料傳送指令集

mov功能: 把源運算元送給目的運算元

5樓:蟹蟹沒有蟹黃堡

一、資料位傳送指令:

1、mov   c,  bit     ;bit  可直接定址位 c←(bit)

2、mov   bit,c     ;c    進位位 (bit) ← c

二、位變數修改指令:

1、clr    c          ; 將c=0

2、clr    bit

3、cpl    c           ; 將c求反再存入c

4、cpl    bit          ; 將bit求反再存入bit

5、setb   c          ; 將c=1

6、setb   bit          ; (bit) ← 1

三、位變數邏輯指令:

anl   c,   bit    anl   c,   bit    orl   c,   bit   orl   c,   bit

延展閱讀:

彙編指令是組合語言中使用的一些操作符和助記符,還包括一些偽指令(如assume,end)。用於告訴彙編程式如何進行彙編的指令,它既不控制機器的操作也不被彙編成機器**,只能為彙編程式所識別並指導彙編如何進行。

通用資料傳送指令:

1、mov 傳送字或位元組;

2、movsx 先符號擴充套件,再傳送;

3、movzx 先零擴充套件,再傳送;

4、push 把字壓入堆疊;

5、pop 把字彈出堆疊;

6、pusha 把ax,cx,dx,bx,sp,bp,si,di依次壓入堆疊;

7、popa 把di,si,bp,sp,bx,dx,cx,ax依次彈出堆疊;

8、pushad 把eax,ecx,edx,ebx,esp,ebp,esi,edi依次壓入堆疊;

9、popad 把edi,esi,ebp,esp,ebx,edx,ecx,eax依次彈出堆疊;

10、bswap 交換32位暫存器裡位元組的順序;

11、xchg 交換字或位元組( 至少有一個運算元為暫存器,段暫存器不可作為運算元);

12、cmpxchg 比較並交換運算元( 第二個運算元必須為累加器al/ax/eax );

13、xadd 先交換再累加( 結果在第一個運算元裡 );

14、xlat 位元組查錶轉換;

15、bx 指向一張 256 位元組的表的起點, al 為表的索引值 (0-255,即0-ffh);

16、返回 al 為查表結果。( [bx+al]->al )

關於王爽的組合語言的加減乘除指令

6樓:匿名使用者

王爽組合語言加減乘除指令分述如下:

1、 加法指令

指令格式: 加法 add dst, src; (dst)←(src)+(dst)

帶進位加法 adc dst, src; (dst)←(src)+(dst)+cf

加1 inc opr; (opr)←(opr)+1

2、 減法指令

指令格式:

減法 sub dst,src ; (dst)←(dst)-(src)

帶進位減法 sbb dst,src ; (dst)←(dst)-(src)-cf

減1 dec opr ; (opr)←(opr)-1

求補 neg opr ; (opr)←0ffffh-(0pr)+1

比較 cmp opr1, opr2 ; (opr1)-(opr2)

3、 乘法指令

乘法運算分為無符號數運算和有符號數運算,各有相應的指令,並使用雙運算元。兩個8位二進位制數相乘,積為16位二進位制數;兩個16位二進位制數相乘,積為32位二進位制數。

指令格式:

無符號數乘法 mul src;(ax)←(al)×(src)8位數乘法

(dx,ax)←(ax)×(src)16位數乘法

帶符號數乘法 imul src; 操作同上,但是運算元為帶符號數

4、 除法指令

除法運算分為無符號數運算和有符號數運算,各有相應的指令,並使用雙運算元。當除數是8位或16位二進位制數時,要求被除數是16位或32位的二進位制數。

指令格式:

無符號數除法 div src;(al)←(ax)/(src)8位二進位制數除法的商

(ah)←(ax)/(src)8位二進位制數除法的餘數

或(ax)←(dx,ax)/(src) 16位二進位制數除法的商

(dx)←(dx,ax)/(src) 16位二進位制數除法的餘數

帶符號數除法 idiv src; 操作同上,但是運算元為帶符號數

7樓:匿名使用者

彙編算術運算指令

8086的算術運算類指令能夠對二進位制或十進位制(bcd碼)數進行加、減、乘、除運算,運算元的資料形式可以是8位或16位的無符號數或帶符號數。對於單運算元指令,不允許使用立即數形式;對於雙運算元指令,只有源操作可以使用立即數,兩個運算元中必須有一個在暫存器中。

1. 加法指令指令格式: 加法 add dst, src; (dst)←(src)+(dst)

帶進位加法 adc dst, src; (dst)←(src)+(dst)+cf

加1 inc opr; (opr)←(opr)+1

注意: 這三條指令運算結果將影響狀態標誌位,但是inc指令不影響標誌cf。下面以8位數加法運算為例作簡要說明。

[例4.20]因為運算結果沒有超出單位元組無符號數範圍,所以cf=0;運算結果超出單位元組有符號數範圍,所以of=1;其他標誌 zf=0,sf=1。 以上運算可以用兩條指令實現:

mov ah,01 add ah,7fh

adc指令主要用於多位元組或多精度資料相加的運算。 例如進行二組四位元組(雙精度)數1122 3344h和5566 7788h的相加運算時,使用單位元組加法指令需要執行4次加法運算,運算過程中,通過adc指令將低位元組運算產生的進位加到高位位元組,而使用字加法指令,只需要執行兩次加法運算,當然也必須通過adc指令處理低字運算產生的進位。使用adc指令,必須先將cf標誌置0。

2. 減法指令

指令格式:

減法 sub dst,src ; (dst)←(dst)-(src)

帶進位減法 sbb dst,src ; (dst)←(dst)-(src)-cf

減1 dec opr ; (opr)←(opr)-1

求補 neg opr ; (opr)←0ffffh-(0pr)+1

比較 cmp opr1, opr2 ; (opr1)-(opr2)

sbb指令主要用於多位元組或多精度資料相減的運算;neg指令對運算元進行取反加1的操作;cmp指令類似sub指令執行減法操作,但不產生運算結果,對標誌位影響見表4.3。 這幾條指令的運算結果都影響狀態標誌位,只是dec指令不影響標誌cf。

[例4.22]

直接相減算式結果為: (4006ah)=520fh,sf=0,zf=0,cf=0,of=0

補碼加法算式結果為: (4006ah)=520fh,sf=0,zf=0,cf=1,of=0

算式中fecah是(-0136h)的補碼。

可見,兩種算式中運算結果是相同的,但是對標誌cf的影響不同,因為是減法運算,正確結果應是cf=0。用補碼加法得到運算結果cf=1,應求反後送入cf。 表4-3 cmp指令對狀態標誌位的影響

3. 乘法指令 乘法運算分為無符號數運算和有符號數運算,各有相應的指令,並使用雙運算元。兩個8位二進位制數相乘,積為16位二進位制數;兩個16位二進位制數相乘,積為32位二進位制數。

指令格式:

無符號數乘法 mul src;(ax)←(al)×(src)8位數乘法

(dx,ax)←(ax)×(src)16位數乘法

帶符號數乘法 imul src; 操作同上,但是運算元為帶符號數

注意:進行位元組運算時,目的運算元必須是累加器al,乘積在暫存器ax中;進行字運算時,目的運算元必須是累加器ax,乘積在暫存器dx、ax中。源運算元不允許使用立即數定址方式。

乘法指令運算結果隻影響狀態標誌cf、of,對其他狀態標誌位無影響(狀態不定)。

對於 mul 指令,如果位元組型資料相乘之積(ah)=0或字資料相乘之積(dx)=0,則cf=of=0,否則cf=of=1;對於imul指令,如果位元組資料相乘之積ah或字資料相乘之積dx的內容是低一半的符號擴充套件,則cf=of=0,否則cf=of=1。

4. 除法指令 除法運算分為無符號數運算和有符號數運算,各有相應的指令,並使用雙運算元。當除數是8位或16位二進位制數時,要求被除數是16位或32位的二進位制數。指令格式:

無符號數除法 div src;(al)←(ax)/(src)8位二進位制數除法的商

(ah)←(ax)/(src)8位二進位制數除法的餘數

或(ax)←(dx,ax)/(src) 16位二進位制數除法的商

(dx)←(dx,ax)/(src) 16位二進位制數除法的餘數

帶符號數除法 idiv src; 操作同上,但是運算元為帶符號數

注意:當除數是位元組資料時,被除數必須放在ax中,當除數是字資料時,被除數必須放在dx,ax中。

除法指令運算結果對狀態標誌無定義(狀態不定)。但是,若除數為0或帶符號數,則當除法運算結果超出規定的範圍時,將產生0號中斷,與溢位標誌of無關。

8086/8088 規定 idiv 指令運算結果餘數的符號與被除數相同。

帶符號數除法運算中,當被除數位數不夠時,則需將被除數擴充套件到所需的位數。8086/8088設有帶符號數擴充套件指令。

指令格式:

位元組擴充套件到字cbw;將暫存器al中的符號位擴充套件到暫存器ah

字擴充套件到雙字cwd;將暫存器ax中的符號位擴充套件到暫存器dx

這兩條指令不影響標誌位。

5. 十進位制調整指令 bcd碼是一種用二進位制編碼的十進位制數,又稱為二—十進位制數。8086/8088中bcd碼分為兩種形式:

其一是用四位二進位制數表示一位十進位制數,稱為壓縮的bcd碼;其二是用八位二進位制數表示一位十進位制數,稱為非壓縮的bcd碼,它的低四位是bcd碼,高四位沒有意義。由於bcd碼是四位二進位制編碼,四位二進位制數共有16個編碼,bcd碼只用其中的10個,其餘沒用的編碼稱為無效碼。bcd碼運算結果進入或跳過無效碼區時,都會出現錯誤。

為了得到正確結果,必須進行調整。8086/8088針對壓縮bcd碼和非壓縮bcd碼,分別設有兩組十進位制調整指令,其調整方法略有不同。

(1) 壓縮bcd碼十進位制調整指令指令格式:

加法十進位制調整daa;(al)←把al中的和調整到壓縮bcd碼格式

減法十進位制調整das;(al)←把al中的差調整到壓縮bcd碼格式

調整方法是:

累加器al低4位大於9或輔助進位標誌位af=1,則累加器al加06h修正。累加器al高4位大於9或進位標誌位cy=1,則累加器al加60h修正。累加器al高4位大於等於9,低4位大於9,則累加器al進行加66h修正。

[例4.26]進行bcd碼加法運算59+68=127

此例中,bcd碼加法結果的低四位使af=1,高四位大於9,所以加66h進行修正。

注意: 壓縮bcd碼加法或減法十進位制調整指令必須用在add(adc)或sub(sbb)指令之後,調整結果對標誌of無影響,對其他狀態標誌位均有影響。

減法十進位制調整方法與加法十進位制調整類同,只是將加6變為減6操作。

彙編程式1 2 3 99 ? 的程式

sseg segment stack stk db 50 dup 0 sseg ends dseg segment count equ 99 result dw dseg ends cseg segment assume ds dseg,cs cseg,ss ssegstart mov ax,dse...

微控制器彙編程式,微控制器(組合語言)程式

這個是外部擴充套件的ram,fef0h是存資料的地址,mov dptr 0fef0h是給資料指標賦值,movx dptr,a是間接定址,將a中資料送到外部ram的fef0h中,中斷服務程式後面應該有reti,挺容易的,看看書,這例題允許了中斷,給出了中斷處理程式,自己看書學得較為深刻。ofefoh指...

求彙編程式,從1累加到100,並逐步顯示的程式。第一行顯示

code segment assume cs code org 100h start jmp begin begin push cs pop ds push cs pop es mov cx,100 mov ax,0 mov bx,1 again add ax,bx call dispaxs pus...