舉例**如下
這句**的關鍵點是neg 和sbb
相關知識點
neg(求補指令)
neg指令除了對運算元作符號取反外 會根據運算元來修改標誌位cf
當運算元為0是cf修改為0 否則cf修改為1
sbb( 帶借位減法指令)
sbb reg,imm/reg/mem ;reg←(reg-(imm/reg/mem)-cf)
sbb mem,imm/reg ;mem←mem-imm/reg-cf
mov ax,1 ;
sub ax,1
neg ax
sbb ax,ax
mov bx,4
lea bx,[bx-4*ax]
mov ax,1 ;ax = 1
sub ax,1 ;ax = 0
neg ax ;ax = 0 cf = 0
sbb ax,ax ;cf = 0 ax = 0
mov bx,4 ;bx = 4
lea bx,[bx-4*ax] ;bx = 4
最後bx = 4
mov ax,2 ;ax = 2
sub ax,1 ;ax = 2
neg ax ;ax = 1 cf = 1
sbb ax,ax ;cf = 1 ax = -1
mov bx,4 ;bx = 4
lea bx,[bx-4*ax] ;bx = 8
最後bx = 8
並且發現最後結果只有兩種可能4或8
"模板" 一下偽**
int nflag
mov ax,nflag
sub ax,1
neg ax
sbb ax,ax
mov bx,4
lea bx,[bx-4*ax]
這句相當於就是
if(nflag = 1)
bx = 4
else
bx = 8
這樣使用算術運算代替了邏輯運算 大大減少
了cpu運算週期
達到程式優化效果
16位彙編筆記
1 子函式中進行現場保護時,不能把返回值所存放的暫存器 絕對不可以 入棧,只是被訪問而沒有被修改的暫存器也不需要入棧。子函式的引數盡量入棧,因為如果後面的子函式再次使用這些引數時,需要確保引數沒有變動 2 開機cpu加電後,初始化cs 0ffffh,ip 0。ffffh 0處有一條跳轉指令,跳轉至b...
16位彙編 定址方式
1 8086 8088的基本定址方式可分為哪三類?它們說明了什麼?儲存器 立即 暫存器 3中定址方式 2 儲存器定址方式可分為哪幾種?何為儲存單元的有效位址?3 請說明如下指令中源運算元的定址方式,並作相互比較 mov bx,1234h mov bx,1234 mov dx,bx mov dx,bx...
Python 運算(常用的算術運算 位運算)
運算子含義 例項 假設變數 a 10,b 20 除 x除以y b a 輸出結果 2 取模 返回除法的餘數 b a 輸出結果 0 冪 返回x的y次冪 a b 為10的20次方,輸出結果 取整除 返回商的整數部分 向下取整 9 2 4 運算子含義 按位與操作,只有 1 1 為1,其他情況為0。可用於進製...