16位彙編第六講 8086指令集(2)

2021-07-25 05:11:37 字數 3925 閱讀 9000

掌握:add/adc/inc、sub/sbb/dec/ neg/cmp

熟悉:mul/imul、div/idiv

理解:cbw/cwd、daa/das、 aaa/ aas/aam/aad

add reg,imm/reg/mem

;reg←reg+imm/reg/mem

add mem,imm/reg

;mem←mem+imm/reg

adc指令將源與目的運算元相加,再加上進製cf標誌,

結果送到目的運算元 adc指令按狀態標誌的定義相應設定

adc指令主要與add配合,實現多精度加法運算

adc reg,imm/reg/mem

;reg←reg+imm/reg/mem+cf

adc mem,imm/reg

;mem←mem+imm/reg+cf

作用:

mov ax,4652h    ;ax=4652h

add ax,0f0f0h ;ax=3742h,cf=1

mov dx,0234h ;dx=0234h

adc dx,0f0f0h ;dx=f325h,cf=0

;dx.ax=0234

4652h

+f0f0 f0f0h

=f325 3742h

inc reg/mem

;reg/mem←reg/mem+1

例子:

inc bx

inc byte ptr [bx]

sub reg,imm/reg/mem

;reg←reg-imm/reg/mem

sub mem,imm/reg

;mem←mem-imm/reg

例子:

mov al,0fbh ;al=0fbh

sub al,07h ;al=0f4h,cf=0

sbb reg,imm/reg/mem

;reg←(reg-(imm/reg/mem)-cf)

sbb mem,imm/reg

;mem←mem-imm/reg-cf

例子:

mov ax,4652h    ;ax=4652h

sub ax,0f0f0h ;ax=5562h,cf=1

mov dx,0234h ;dx=0234h

sbb dx,0f0f0h ;dx=1143h,cf=1

;dx.ax=0234

4652h

-f0f0 f0f0h

=1143

5562h

dec reg/mem

;reg/mem←reg/mem-1

inc指令和dec指令都是單運算元指令主要用於對計數器和位址指標的調整

作用:

neg指令對運算元執行求補運算:用零減去運算元,然後結果返回運算元

求補運算也可以表達成:將運算元按位取反後加1

neg指令對標誌的影響與用零作減法的sub指令一樣

neg reg/mem

;reg/mem←0-reg/mem

neg的妙用

判斷if(ax == 0) ax==0 else ax==1

neg ax

mov ax,0

adc ax,0

以上語句就可以作為乙個簡單的三目運算

cmp reg,imm/reg/mem

;reg-imm/reg/mem

cmp mem,imm/reg

;mem-imm/reg

例子:

cmp al,100  ;al-100

jz below

;al==100,跳轉到below執行

sub al,100

;al!=100, al←al-100

inc ah ;ah←ah+1

below: ...

mul

r8/m8

;無符號位元組乘法

;ax←al×r8/m8

mulr16/m16

;無符號字乘法

;dx.ax←ax×r16/m16

帶符號位的乘法

imul r8/m8

;有符號位元組乘法

;ax←al×r8/m8

imul r16/m16

;有符號字乘法

;dx.ax←ax×r16/m16

乘法指令如下影響of和cf標誌:

mul指令——若乘積的高一半(ah或dx)為0,則of=cf=0;否則of=cf=1

imul指令——若乘積的高一半是低一半的符號擴充套件,則of=cf=0;否則均為1

不帶符號位的乘法

div r8/m8   

;無符號位元組除法:

al←ax÷r8/m8的商,ah←ax÷r8/m8的餘數

div r16/m16

;無符號字除法:

;ax←dx.ax÷r16/m16的商,dx←dx.ax÷r16/m16的餘數

帶符號位的乘法

div r8/m8   

;有符號位元組除法:

al←ax÷r8/m8的商,ah←ax÷r8/m8的餘數

idiv r16/m16

;有符號字除法:

;ax←dx.ax÷r16/m16的商,dx←dx.ax÷r16/m16的餘數

除法的功能:

1.除法指令分無符號和有符號除法指令

2.除法指令的除數顯式給出,隱含使用另乙個運算元ax和dx作為被除數

位元組量除法:ax除以r8/m8,8位商存入al,8位餘數存入ah

字量除法:dx.ax除以r16/m16,16位商存入ax,16位餘數存入dx

3.除法指令對標誌沒有定義

4.除法指令會產生結果溢位

除法錯中斷

1.被除數遠大於除數時,所得的商就有可能超出它所能表達的範圍。如果存放商的暫存器al/ax不能表達,便產生溢位,8086cpu中就產生編號為0的內部中斷——除法錯中斷

2.對div指令,除數為0,或者在位元組除時商超過8位,或者在字除時商超過16位,則發生除法溢位

3.對idiv指令,除數為0,或者在位元組除時商不在-128~127範圍內,或者在字除時商不在-32768~32767範圍內,則發生除法溢位

16位彙編第一講簡介

組合語言他是計算機語言,計算機語言通俗點說就是人類和計算機 也就是cpu 溝通的橋梁,計算機不認識人類的語言,只認得二進位制 0和1 但是我們想讓你算計完成我們的工作,每次都是0,和1,那樣會崩潰的,老一輩的是這樣的 所以後面組合語言出現了,用一些簡單的助記符來替代機器語言 二進位制 通用的語言,比...

第六講 if 語句

格式 單分支if 條件測試命令 then 命令序列 fi 多分支 if then 命令序列 else 命令序列 fi bin bash data new create if f file then echo exist file cat file wc l rm file else touch fi...

第六講感悟

方法是處理業務邏輯的 滿足使用者需求,有開發者設計的具有一定邏輯的 鄙人認為可以把方法看作是數學中的方程式,帶入因變數進行計算,得到所要求得的值 方法應盡可能單 一 簡單 容易理解。因此關於方法的返回值 有return語句的方法有可能還需被呼叫到其他方法中去使用 類似於三元一次方程兩兩相消後再求一次...