導航:首頁 > 源碼編譯 > 編譯加法

編譯加法

發布時間:2023-06-26 12:26:11

Ⅰ 64位gcc編譯浮點加法為什麼每次mov指令都執行兩次

這個,你需要先查一下x86_64傳遞參數的規則。浮點數是用 xmm0, xmm1,xmm2,xmm3來傳遞參數的。


你還需要了解一下SIMD指令集。


http://en.wikipedia.org/wiki/X86_calling_conventions


我不知道為什麼你反匯編出來是這樣。我自己測試了一下,反匯編結果比你的簡單多了。


你的編譯器,可能規則和我的稍有不同。比我的復雜一些。


大概翻譯如下:

0x00000000004014f0<+0>:push%rbp
0x00000000004014f1<+1>:sub$0x4,%rsp
0x00000000004014f5<+5>:lea0x80(%rsp),%rbp
0x00000000004014fd<+13>:movss%xmm0,-0x6c(%rbp)====>參數s保存在xmm0中,把它壓到棧上位置為-0x6c(%rbp)
0x0000000000401502<+18>:movss-0x6c(%rbp),%xmm0====>xmm0可以保存4個float,這樣,僅僅把-0x6c(%rbp)位置的一個floats傳遞到xmm0寄存器,准備做float的運算
0x0000000000401507<+23>:addss%xmm0,%xmm0====>2個float相加,相加結果保存在xmm0中
0x000000000040150b<+27>:movss%xmm0,-0x80(%rbp)==>把相加的結果,保存在棧上位置為-0x80(%rbp),但是這里是4個float,其中高位三個都是0.0,最低位一個是s+s的結果
0x0000000000401510<+32>:mov-0x80(%rbp),%eax==>eax是保存結果的規定寄存器,保存一份結果,這下只會保存最低位的float,也就是我們需要的結果
0x0000000000401513<+35>:mov%eax,-0x80(%rbp)==>傳回去,有點繞,本質上是編譯器的不同,一些編譯器有一些特定的規則,主要的目的是為了下面傳遞給xmm0,只能從棧上穿,movss指令只能這樣用。
0x0000000000401516<+38>:movss-0x80(%rbp),%xmm0==>返回結果需要保存在xmm0中,所以又傳給它了。為什麼要穿來傳去呢,因為xmm0可以保存4個float,可以同時進行4個float運算,上面的步驟是為了保證,只有最後一個float運算的結果被保存,前面三個float,結果都是0.0,但是不管是什麼,結果都被忽略了。
0x000000000040151b<+43>:add$0x4,%rsp==>清除棧,返回
0x000000000040151f<+47>:pop%rbp
0x0000000000401520<+48>:retq

Ⅱ 運用C++製作簡單的加法運算程序

首先,FILES(文件)-》NEW(新建)-》C++Sourse FILE(C++源文件)->建入文件名->OK
然後輸入

#include <stdio.h>

int main()

{

int a1,a2,a;//申請變數

scanf("%d",&a1);//輸入第一個數

scanf("%d",&a2);//輸入第二個數

a=a1+a2;//加

printf("%d",a);//輸出結果

return 0;

}

按F7編譯,再CTRL+F5運行

拓展資料

C++是一種面向對象的計算機程序設計語言,由美國AT&T貝爾實驗室的本賈尼·斯特勞斯特盧普博士在20世紀80年代初期發明並實現(最初這種語言被稱作「C with Classes」帶類的C)。它是一種靜態數據類型檢查的、支持多重編程範式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。[1]

C++是C語言的繼承,進一步擴充和完善了C語言,成為一種面向對象的程序設計語言。C++這個詞在中國大陸的程序員圈子中通常被讀做「C加加」,而西方的程序員通常讀做「C plus plus」,「CPP」。

Ⅲ 用C語言寫一個加法運算的代碼怎麼寫

例子如下:

知識擴展:

C語言是一門通用計算機編程語言,應用廣泛。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

C語言屬於高級程序語言的一種,它的前身是「ALGOL」。其創始人是布朗·W·卡尼漢和丹尼斯·M·利奇。C語言問世時是帶有很大的局限性,因為它只能用於UNIX系統上。然而隨著科學技術的進步,計算機工業的發展,C語言逐漸脫離UNIX。1987年美國標准化協會制定了C語言的國際標准,簡稱「ANSI C」,從此以後它便成為一種廣泛使用的程序語言。

Ⅳ C語言怎麼進行加法計算給個簡單的程序來

#include"stdio.h"
voidmain()
{
inta,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("%d ",c);
getch();
}

Ⅳ 運用C++製作簡單的加法運算程序

首先,FILES(文件)-》NEW(新建)-》C++Sourse FILE(C++源文件)->建入文件名->OK
然後輸入

#include <stdio.h>

int main()

{

int a1,a2,a;//申請變數

scanf("%d",&a1);//輸入第一個數

scanf("%d",&a2);//輸入第二個數

a=a1+a2;//加

printf("%d",a);//輸出結果

return 0;

}

按F7編譯,再CTRL+F5運行

拓展資料

C++是一種面向對象的計算機程序設計語言,由美國AT&T貝爾或卜實驗室的本賈尼·斯特勞斯特盧普博士在局攜20世紀80年代初期發明並實現(最初這種語言被稱作「C with Classes」帶類的C)。它是一種靜態數據類型檢查的、支持多重編程範式的通用程序設計語言。它支持過程化程序設計、數據抽象、面向對象程序設計、泛型程序設計等多種程序設計風格。[1]

C++是C語言的繼承,進一步擴充和完善了C語桐團伏言,成為一種面向對象的程序設計語言。C++這個詞在中國大陸的程序員圈子中通常被讀做「C加加」,而西方的程序員通常讀做「C plus plus」,「CPP」。

Ⅵ 如何編寫單片機中4位元組十六進制數的加法程序

加法很簡單的,根據你小學時候的加法原理就可以很容易算了,也就是低位相加,高位和高位廳碰相加,再加上低位的進位就OK了
例如:ff ff ff ff+ff ff ff ff=
最低位元組相加=1FE 其中1就是進位扮雹談了,結果就是低位=FE第一個位元組相加=1FE再就上進位1=1FF第二個位元組=FF再把進位加到第三個位元組........
最終的結果就是肆模=1 FF FF FF FE
所以4 位元組相加要5 個位元組來保存結果

Ⅶ c語言加法運算,要詳細步驟

C編譯器匹配操作符的模式是貪婪匹配,也就是在語法成立的情況下匹配盡可能多的操作符。
編譯器看到a+++b一句後,先嘗試匹配一個+號,發現符合+運算符;再嘗試匹配兩個+號,發現符合++運算符;再嘗試匹配三個+號,發現沒有+++運算符,因此最終將前半部分解釋為a++。剩下的一個+號只能匹配+運算符,因此整個表達式被解釋成(a++) + b。最終結果是先計算a+b的值賦給c,然後將a+1。因此a=6,b=7,c=12。

閱讀全文

與編譯加法相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:757
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:671
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:485
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:382
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:349
風翼app為什麼進不去了 瀏覽:778
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:150
伊克塞爾文檔怎麼進行加密 瀏覽:892
app轉賬是什麼 瀏覽:163