日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

汇编语言-018(FLD 、FST、FSTP、FCHS、FABS 、浮点运算符、浮点比较 )

發(fā)布時(shí)間:2023/12/1 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编语言-018(FLD 、FST、FSTP、FCHS、FABS 、浮点运算符、浮点比较 ) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1:FLD : FPU(浮點(diǎn)處理器)的加載浮點(diǎn)數(shù)到堆棧指令

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data array REAL8 10 DUP(?) dblOne REAL8 234.56 dblTwo REAL8 10.1.code main PROCfld array ;直接尋址fld [array+16] ;直接偏移mov esi,OFFSET arrayfld REAL8 PTR[esi] ;間接尋址mov esi,1fld array[esi*8] ;帶比例因子的變址fld array[esi*TYPE array] ;帶比例因子的變址mov ebx,OFFSET arraymov esi,8fld REAL8 PTR[ebx+esi] ;基址 - 變址mov ebx,3*TYPE array fld array[ebx+esi] ;基址 - 變址 - 偏移量(二維數(shù)組的訪問(wèn)方式)mov esi,1fld array[ebx+esi * TYPE array] ;帶比例因子的基址 - 變址 - 偏移量fld dblOne ;ST(0) = dblOnefld dblTwo ;ST(0) = dblTwo,ST(1) = dblOneINVOKE ExitProcess,0 main ENDP END main

2:FST_FSTP : FST偽指令將棧頂數(shù)據(jù)復(fù)制到內(nèi)存,FSTP偽指令將棧頂數(shù)據(jù)復(fù)制到內(nèi)存,并出棧

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data dblOne REAL8 234.56 dblTwo REAL8 10.1 dblThree REAL8 ? dblFour REAL8 ?.code main PROCfld dblOne ;ST(0) = dblOnefld dblTwo ;ST(0)= dblTwo,ST(1) = dblOne;將棧頂數(shù)據(jù)復(fù)制到內(nèi)存fst dblThree ;10.1fst dblFour ;10.1;將棧頂數(shù)據(jù)復(fù)制到內(nèi)存,并出棧fstp dblThree ;10.1fstp dblFour ;234.56INVOKE ExitProcess,0 main ENDP END main

3:FCHS_FABS : FCHS偽指令將ST(0)中浮點(diǎn)值的符號(hào)取反,FABS偽指令將ST(0)中浮點(diǎn)值的符號(hào)去掉,以得到絕對(duì)值

.386 .model flat,stdcall.stack ExitProcess PROTO,dwExitCode:DWORD.data dblOne REAL4 1.23.code main PROCfld dblOnefchs ;ST(0)中浮點(diǎn)值的符號(hào)取反fabs ;ST(0)中浮點(diǎn)值的符號(hào)去掉,以得到絕對(duì)值INVOKE ExitProcess,0 main ENDP END main

4:FADD_FADDP_FIADD :浮點(diǎn)數(shù)據(jù)三種相加運(yùn)算偽指令使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data dblOne REAL8 234.56 dblTwo REAL8 10.1 myInteger DWORD 1 .code main PROCfld dblOnefld dblTwo;ST(1) 234.56 , ST(0)10.1fadd ;無(wú)操作數(shù)的用法 ST(0)ST(1)相加,結(jié)果暫存在ST(1),然后ST(0)出棧,結(jié)果保存在棧頂;ST(0) 244.66fld dblTwo;ST(1) 244.66 ,ST(0)10.1fadd ST(1),ST(0) ;寄存器操作數(shù)用法,ST(0)加到ST(1);ST(1) 254.76 ,ST(0)10.1;內(nèi)存操作數(shù)用法fadd dblTwo ;ST(0) += dblTwo mov esi,OFFSET dblTwofadd REAL8 PTR[esi] ;ST(0) += [esi];ST(1)254.76 ST(0)30.3faddp ST(1),ST(0) ;ST(0)加到ST(1),然后ST(0)出棧 ;ST(0)285.06;先將源操作數(shù)轉(zhuǎn)換為擴(kuò)展雙精度浮點(diǎn)點(diǎn),fiadd myInteger ;ST(0) += myIntegerINVOKE ExitProcess,0 main ENDP END main

5:FSUB_FSUBP_FISUB : 浮點(diǎn)數(shù)據(jù)三種相減運(yùn)算偽指令使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data dblOne REAL8 10.10 dblTwo REAL8 1.1 myInteger DWORD 1.code main PROCfld dblOnefld dblTwo;無(wú)操作數(shù)用法,ST(1)減去ST(0),結(jié)果暫存ST(1),然后ST(0)彈出堆棧,將結(jié)果保留在棧頂fsub ;內(nèi)存操作數(shù)用法,ST(0)減去內(nèi)存操作數(shù)fsub dblTwo ;ST(0) -= dblTwo;寄存器用法fsub ST(1),ST(0) ;ST(1) -= ST(0) ,ST(0)不出棧;fsubp 指令,會(huì)將ST(0)出棧fld dblTwofsubp ST(1),ST(0) ;ST(1) -= ST(0) ,然后ST(0)出棧;整數(shù)減法,先把源操作數(shù)轉(zhuǎn)換為擴(kuò)展雙精度浮點(diǎn)數(shù),再?gòu)?span id="ozvdkddzhkzd" class="token function">ST(0)中減去該操作數(shù)FISUB myInteger ;ST(0) -= myInteger INVOKE ExitProcess,0 main ENDP END main

6:FMUL_FMULP_FIMUL : 浮點(diǎn)數(shù)據(jù)三種相乘運(yùn)算偽指令使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data dblOne REAL8 10.10 dblTwo REAL8 1.1 myInteger DWORD 1.code main PROCfld dblOnefld dblTwo;無(wú)操作數(shù)用法,ST(1)乘以ST(0),結(jié)果暫存ST(1),然后ST(0)彈出堆棧,將結(jié)果保留在棧頂fmul;內(nèi)存操作數(shù)用法,ST(0)乘以內(nèi)存操作數(shù)fmul dblTwo ;ST(0) *= dblTwo;寄存器用法fmul ST(1),ST(0) ;ST(1) *= ST(0) ,ST(0)不出棧;fmulp 指令,會(huì)將ST(0)出棧fld dblTwofmulp ST(1),ST(0) ;ST(1) *= ST(0) ,然后ST(0)出棧;整數(shù)乘法,先把源操作數(shù)轉(zhuǎn)換為擴(kuò)展雙精度浮點(diǎn)數(shù),再?gòu)?span id="ozvdkddzhkzd" class="token function">ST(0)中乘以該操作數(shù)fimul myInteger ;ST(0) *= myInteger INVOKE ExitProcess,0 main ENDP END main

7:FDIV_FDIVP_FIDIV : 浮點(diǎn)數(shù)據(jù)三種相除運(yùn)算偽指令使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data dblOne REAL8 10.10 dblTwo REAL8 1.1 myInteger DWORD 1.code main PROCfld dblOnefld dblTwo;無(wú)操作數(shù)用法,ST(1)除去ST(0),結(jié)果暫存ST(1),然后ST(0)彈出堆棧,將結(jié)果保留在棧頂fdiv ;內(nèi)存操作數(shù)用法,ST(0)除去內(nèi)存操作數(shù)fdiv dblTwo ;ST(0) /= dblTwo;寄存器用法fdiv ST(1),ST(0) ;ST(1) /= ST(0) ,ST(0)不出棧;fsubp 指令,會(huì)將ST(0)出棧fld dblTwofdivp ST(1),ST(0) ;ST(1) /= ST(0) ,然后ST(0)出棧;整數(shù)除法,先把源操作數(shù)轉(zhuǎn)換為擴(kuò)展雙精度浮點(diǎn)數(shù),再?gòu)?span id="ozvdkddzhkzd" class="token function">ST(0)中除去該操作數(shù)fidiv myInteger ;ST(0) /= myInteger INVOKE ExitProcess,0 main ENDP END main

8:FCOMP : 浮點(diǎn)數(shù)據(jù)比較偽指令FCOMP使用

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD;比較如下C++代碼 ;double X = 1.2 ;double Y = 3.0 ;int N =0 ;if (X < Y) ; N= 1.data X REAL8 1.2 Y REAL8 3.0 N DWORD 0;fcom 比較ST(0)ST(1) ;fcom m32fp 比較ST(0) 與 m32fp ;fcom m32fp 比較ST(0) 與 m64fp ;fcom ST(i) 比較ST(0)ST(i);fcomp 會(huì)將ST(0)出棧;fcompp 會(huì)出棧兩次.code main PROCfld X ;ST(0) = Xfcomp Y ;比較ST(0)和Y,ST(0)出棧fnstsw ax ;狀態(tài)字送入AXsahf ;AH復(fù)制到EFLAGSjnb L1 ;X不小于Y ? 跳過(guò)mov N,1 ;N=1 L1:INVOKE ExitProcess,0 main ENDP END main

9:FCOMI : 浮點(diǎn)數(shù)據(jù)比較偽指令FCOMI使用,因?yàn)楦↑c(diǎn)數(shù)比較的運(yùn)行時(shí)開(kāi)銷大于整數(shù)比較, Intel P6系列引入了fcomi,比較浮點(diǎn)數(shù)值,并直接設(shè)置ZF,PF和CF

.386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data X REAL8 1.2 Y REAL8 3.0 N DWORD 0;fcomi 格式 ;fcomi ST(0),ST(i).code main PROCfld Y ;ST(0) = Yfld X ;ST(0) = X,ST(1) = Yfcomi ST(0),ST(1) ;比較ST(0)ST(1)jnb L1 ;ST(0)不小于ST(1)?跳過(guò)mov N,1 ;N =1 L1:INVOKE ExitProcess,0 main ENDP END main

10:FCOMI_EQUAL : 比較浮點(diǎn)數(shù)相等的問(wèn)題,因?yàn)楦↑c(diǎn)數(shù)在計(jì)算過(guò)程中會(huì)出現(xiàn)舍入誤差,比較相等比較X與Y時(shí),應(yīng)該取它們的差值的 絕對(duì)值|x-y|,再與用戶定義的誤差值比較,只不大于誤差值就認(rèn)為兩個(gè)浮點(diǎn)數(shù)相等

include Irvine32.inc include Macros.inc .data epsilon REAL8 1.0E-12 val2 REAL8 0.0 ;比較的數(shù)值 val3 REAL8 1.001E-13 .code main PROC;如果(val2 == val3),顯示"Values are equal"fld epsilonfld val2fsub val3fabsfcomi ST(0),ST(1)ja skipmWrite <"Values are equal",0dh,0ah> skip:INVOKE ExitProcess,0 main ENDP END main 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的汇编语言-018(FLD 、FST、FSTP、FCHS、FABS 、浮点运算符、浮点比较 )的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。