[plain]view plain
copy
print?
.section .data
myvalue:
.byte 67,68,69,70,0
mygs:
.asciz "%c\n"
.section .text
.globl main
main:
#基位址(偏移位址[必須為暫存器],資料元素變址,資料元素長度[必須為暫存器],)
#基位址+偏移位址+資料元素變址*資料元素長度
movl $2,%ecx
movl myvalue(,%ecx,1),%ebx #將myvalue的變址為2,長度為1的資料值移到ebx中
push %ebx
push $mygs
call printf
push $0
call exit
這段**將輸出ascii碼為69的字元「e」
有2種方式,能以變址和基址結構的方式訪問記憶體
1)基位址(偏移位址[必須為暫存器],資料元素變址,資料元素長度[必須為暫存器],)
2)基位址+偏移位址+資料元素變址*資料元素長度
上面**採用了第1種方式:
movl $2,%ecx
movl myvalue(,%ecx,1),%ebx
myvalue這個變數的內容是:67,68,69,70,0
%ecx暫存器的值是資料元素變址,是2,資料元素長度是1
67所在記憶體位址加上變址2,就是myvalue的以1個位元組為單位組成的5個元素中,第3個元素的位置
movl myvalue(,%ecx,1),%ebx 將第3個元素e的ascii碼放在ebx暫存器中,然後入棧,做為printf的引數
**:
C指標原理 6
內聯彙編的重要性體現在它能夠靈活操作,而且可以使其輸出通過 c 變數顯示出來。因為它具有這種能力,所以 asm 可以用作彙編指令和包含它的 c 程式之間的介面。簡單得說,內聯彙編,就是可以讓程式設計師在c語言中直接嵌入彙編 並與彙編 互動c程式中的c表示式,享受彙編的高執行效率。內聯彙編的格式是直接...
C指標原理 12
2 擴充計算器 加入對括號和注釋的支援,首先修改flex 檔案,在第二部分加入更多的詞法規則 對於注釋直接忽略 忽略注釋 然後,修改bison term number abs term leftbracket exp rightbracket 我們的注釋以 表示 測試結果 myhaspl myhas...
C指標原理(18) C指標基礎
5 指標陣列 指標陣列就是陣列裡存放的是指標。include int main void for i 0 i 10 i return 1 上面定義了乙個指標陣列,陣列的每個元素都是指標,每個指標指向x陣列的相應元素。其中,p x為指標陣列,通過for迴圈中的p x i x i完成指標陣列每個元素的賦...