AT T學習筆記彙編之內聯c語言

2021-06-29 13:51:02 字數 1202 閱讀 3113

asm("assembly code");

ansi c將asm用於其它用途,用__asm__替換

在asm後面加上 volatile可以禁止編譯器優化

asm volatile ("pusha \n\tpopa");

__asm__ __volatile__ ("pushl $1\n\t");

擴充套件asm

asm ("asm code" : output locate : input operands : changed registers)

changed register 改變的暫存器

"constraint" (variable)

位置        變數

修飾符+ 讀取和寫入運算元

= 只能寫入運算元

% 如果必要,運算元可以和下乙個運算元切換。

& 在內聯函式完成之前,可以刪除或者重新使用運算元。

約束:    描述

a    使用%eax ax al

b    %ebx

c    %ecx

d    %edx

s    %esi    si

d    %edi    di

r    任何可用的通用暫存器

q    %eax ebx ecx edx之一

a    對64位使用%eax 和 %edx

f    使用浮點暫存器

t    使用第乙個(頂部)浮點暫存器

u    第二個浮點暫存器

m    直接使用記憶體位置

o    使用記憶體偏移位置

v    直接使用記憶體位置

i    使用立即整數值

n    使用值已知的立即整數值

g    使用任何可用的暫存器或記憶體位置。

asm ("asm code" : "=a"(result) : "d":(data1) : , "c"(data2));

data1存放到edx data2存放到ecx 結果存放到eax,然後再傳送到result

asm("asm code" : "=r"(result) : "r"(data1) , "r"(data2));

佔位符%0將表示包含result值的暫存器,%1:data1,%2:data2h

引用佔位符:

asm("imull %1 , %0" : "=r"(data2) : "r"(data1) , "0"(data2));

AT T組合語言筆記

1。在gcc產生的彙編中,0x80498d4表示立即數,而0x80498d4表示記憶體位址0x80498d4對應的內容。對於lable,比如value,則 value表示value的位址,value表示value的值。設函式func的位址 func 0x8048828 這兩種呼叫都是一樣的 1 ca...

AT T 組合語言學習筆記一

一 開發環境 centos 5.6 二 硬體 intel i5 64位 三 開發工具 1 gnu彙編器 gas 將組合語言源代友轉換為處理器指令碼 as o test.o test.s 2 連 鏈 接器 解析程式 中宣告的所有定義好的函式和記憶體位址標籤 ld o test test.o 3 偵錯程...

C語言內聯彙編

開門見山,組合語言和c語言混合程式設計可分為兩大類 單獨的彙編 檔案與單獨的c語言分別編譯成目標檔案後,一起鏈結成可執性檔案 在c語言中嵌入彙編 直接編譯生成可執行程式 今天主要介紹第二種 內聯彙編稱為inline assembly,gcc支援在c 中直接嵌入彙編 所以稱為gcc inline as...