8086算術運算類指令


 

算術運算指令

①加法類指令

②減法類指令

③乘法指令

④除法指令

⑤BCD嗎指令

 

一、加法類指令

首先我么們先看加法類指令三個(add,adc,inc)

1)不帶進位位的加法指令ADD

add用來執行2個字節或2個字的相加操作,運算時不考慮CF位

ADD DST,SRC   ;DST<--(DST)+(SRC)

 

ADD影響OF,SF,ZF,AF,PF,CF標志

 

2)帶進位位的加法指令ADC

ADC在功能上和ADD類似,只是有一點區別,即執行ADC指令時,將進位標志CF的值加進和中。

ADC DST,SRC         ;DST<--(DST)+(SRC)+CF

 

ADC指令多用於多字節相加運算,如進行兩個8字節(64位)數據相加,應先用ADD指令將低32位相加,再用ADC指令將高32位相加,此時會把低位字節產生的進位傳遞到高位字節運算中。

 

ADC影響OF,SF,ZF,AF,PF,CF.標志位

 

3)增量指令INC

INC指令只有一個操作數,指令執行時,將操作數內容加1,

INC指令影響AF,OF,PF,SF,ZF.

注意:INC指令不影響進位標志CF

 

二、減法類指令(SUB,SBB,CMP,DEC,NEG)

1)比考慮借位的減法指令SUB

SUB和上面的加法類似,也是不帶借位的減

SUB [BP+2],CL               ;將ss段中的BP+2所指的單元中的值減去CL中的值,結果在BP+2所指堆棧單元中


SUB影響的標志位OF,ZF,AF,SF,PF,CF

 

2)考慮借位的減法指令SBB

和上面的ADC類似,就是SBB在執行減法運算時還要減去CF的值。

 

SBB AX,2530H       ;將AX中的內容減去2530H,並減去進位位CF的值

和上面類似,這里不在重復

 

3)減量指令DEC

這又和上面的INC類似,就是將操作數減一,同樣不會影響CF,只是執行減一而已。

和上面都一樣,這里不在重復。

 

4)求補指令NEC

其實我更喜歡叫它求負指令,它就是對給出的操作數求一個負,然后回送,可是機器內部是以補碼的形式存儲的,所以就是求補指令啦。

 

NEG影響的標志位AF,CF,ZF,PF,SF,OF'

 

注意:①如果操作數的值為80H、8000H、80000000H,那么執行求補指令會溢出,結果沒有變化,但溢出標志OF置1

②此指令執行時,通常使CF為1,只有當操作數為0時,CF才為0,因為此指令是用0減去某個操作數,所以除非為0,通常都會產生借位。

 

5)比較指令CMP

cmp也是執行兩個數相減操作,但不送回相減結果,會影響標志位

此指令會影響標志位AF,CF,OF,PF,SF,ZF

 

那么如果判斷比較結果呢?

答:如果比較的兩個操作數相等的話,ZF = 1,根據ZF就可判斷兩數是否相等

 

①兩個無符號比較

無符號相減時CF,就是借位標志,如果CF為0,表示無借位,則被減數大,若果,CF為1,則表示有借位,則減數大

 

②兩個有符號數比較

看符號標志SF,而符號標志SF總是和結果的最高位相同,如果SF為0,表示被減數大,如果SF為1,則表示減數大

 

轉載來自 http://blog.csdn.net/best_fiends_zxh/article/details/52723765


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM