乘除指令,判斷絕對值,三目運算子

2022-09-06 20:57:22 字數 2904 閱讀 9558

1. 乘法指令

1.1 無符號乘法

mulmul r8/m8 ;ax

mul r16/m16 ;dx.ax

mul r32/m32 ;edx.eax

1.2 有符號乘法

imul

imul r8/m8 ;ax

imul r16/m16 ;dx.ax

imul r32/m32 ;edx.eax

從80386開始還有:

mul r32, r32/m32 ;r32

mul r32, r32/m32, imm ;r32

兩個16位數相乘,如果結果還是

16位,則

of=cf=0

,此時dx

僅僅是高位擴充套件或符號位描述,可以忽略

dx。如果結果超過

16位,則

of=cf=1

,此時dx

不僅包括高位擴充套件或符號位描述,還包括結果一部分的具體數值,不能忽略dx。

2. 除法指令

2.1 無符號數除法

div r8/m8 ;al

ah的餘數div r16/m16 ;ax

dx的餘數div r32/m32 ;eax

edx的餘數2.2 有符號數除法

idiv r8/m8 ;al

ah的餘數idiv r16/m16 ;ax

dx的餘數idiv r32/m32 ;eax

edx的餘數

當除法指令結果的商太大,用2/4位元組無法正確表達時,會產生溢位,除以

0也會溢位,如果是有符號除法,則。

符號擴充套件指令

例如計算-10/3,**如下:

mov ax,-10

cwdmov cx,3

idiv cx

由於除數是cx,所以被除數是

dx.ax

,cwd

設定dx

,否則會用之前殘留的值。

按位與and,按位或

or,按位異或

xor,按位取反

nota xor a = 0

a xor 全

1 = not a

a xor 全

0 = a

求乙個數的絕對值:abs(ax)

mov ax, a

cwd ;a是正數,

dx=0000;a

是負數,

dx=ffff

;xor ax, dx ;a是正數,

ax不變;

a是負數,

ax = ~ax

;sub ax, dx ;a是正數,結果

=ax-0;a

是負數,結果

=ax-(-1)=ax+1

,結合上步,共同執行了取反加一,即求補(求負)的操作;

三目運算:a == 2 ? 6 : 9;

mov ax, a

sub ax, 2 ;a是2,則

ax=0

,否則ax != 0

neg ax ;求補,a是

2則cf=0

,否則cf=1

sbb ax, ax ;0-cf,a是

2則ax=0

,否則ax=-1

and ax, 3 ;a是2則

ax=0

,否則ax=3

add ax, 6 ;a是2則

ax=6

,否則ax=3+6=9

ax == cx ? dx : bx

sub ax,cx

neg ax

sbb ax,ax

and (bx-dx)

add dx

設x、y、z

、v均為16

位帶符號數,分別存放在x、

y、z、

v儲存單元中,閱讀如下程式段,得出它的運算公式,並說明運算結果存於何處?

mov ax,x

imul y ;dx.ax表示

x*ymov cx,ax

mov bx,dx ;bx.cx表示

x*ymov ax,z

cwd ;dx.ax表示

zadd cx,ax

adc bx,dx ;高字+擴充套件

+cf, bx.cx

表示x*y+z

sub cx,540

sbb bx,0 ;bx.cx表示

(x*y+z)-540

mov ax,v

cwd;       ;dx.ax表示

vsub ax,cx

sbb dx,bx  ;dx.ax表示

v-(x*y+z-540)

idiv x     ;(v-(x*y+z-540))/x,

ax商,

dx餘數

三目運算子對比三個 06運算子大全c語言值得收藏

算術運算子 三目運算子 關係運算子 邏輯運算子 位運算子 逗號運算子 算術運算子在小學的時候已經運用得爐火純青了,主要包含 加 減 乘 除 取餘 取模 剩下的兩個需要特別注意 自增 自減 遵循talk is cheap,show me code的原則,先上 int i 4 i printf i d ...

C 中三目運算子做左值

c語言返回變數的值,c 語言是返回變數本身 c語言中的三目運算子返回的是變數值,不能做為左值使用 c 中的三目運算子可直接返回變數本身,因此可以出現在程式的任何地方 三目運算子可能返回的值中如果有乙個是常量值,則不能作為左值使用 a b 1 b 30 c語言如何支援類似c 的特性呢?當左值的條件 要...

c 三目運算子顯示最大值

c 實現三目運算子顯示最大值 思路 宣告輸入數字型別,使用if else語句,先用三目運算子判斷a和b二者,誰大,再用大的與c對比,如果c大則輸出c。反之則執行else裡的三目運算子,輸出大的。下面展示一些內聯 片。an highlighted block int a,b,c console.wri...