掌握: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語句的方法有可能還需被呼叫到其他方法中去使用 類似於三元一次方程兩兩相消後再求一次...