国产成人毛片视频|星空传媒久草视频|欧美激情草久视频|久久久久女女|久操超碰在线播放|亚洲强奸一区二区|五月天丁香社区在线|色婷婷成人丁香网|午夜欧美6666|纯肉无码91视频

一段完整的arm匯編語言 匯編語言有幾種版本?

匯編語言有幾種版本?x86匯編8086匯編ATampT匯編Intel匯編ARM匯編在ARM匯編程序如何實現子程序的返回?子程序進入到時,直接返回地址保存在LR寄存器中,返回有兩種做法:將LR然后賦給P

匯編語言有幾種版本?

x86匯編

8086匯編

ATampT匯編

Intel匯編

ARM匯編

在ARM匯編程序如何實現子程序的返回?

子程序進入到時,直接返回地址保存在LR寄存器中,返回有兩種做法:

將LR然后賦給PC:MOVPC,LR

直接跳轉:BXLR

要想精通C語言,必須先學習匯編嗎?

雖然說匯編是一門單獨的的語言,C也一門單獨的的語言,它們看上去并沒有什么聯系,但是學習匯編這個可以幫助我們分析什么C語言程序的設計原理。要想精通C語言,需要先自學匯編才是正確的學習順序。

舉例說明:【“Hello World!”程序使用匯編表現】

建議使用“Hello World!”程序詳細介紹,如圖3-5-1所示。

圖3-5-1中,我們只看見了C語言代碼,并沒有什么看見了匯編,我們該咋查看呢?在VisualC開發(fā)工具中,反匯編窗口,不需要下斷點、按F7編譯、按F5調試運行才能可以切換到反匯編窗口。該如何下斷點哪?選中后“intmain(void)”這一行按F9,會在這一行代碼前出現一個黃色的圓點,只能說明巳經斷下斷點,有圖3-5-2所示。【注:按F9下斷點只是在VisualC開發(fā)工具中不使用】

按F9下斷點后,我們隨即按F7,讓程序編譯,程序實際編譯后再按F5現場調試,會再次出現如圖3-5-3所示。

出現圖3-5-3的界面之后,我們然后點擊鼠標左鍵,又出現如圖3-5-4界面。

中,選擇Go ToDisassembly,會出現如圖3-5-5的界面,說明成功可以切換到反匯編窗口,按F10一步一步地想執(zhí)行。

下面的圖片3-5-5中,有追加代碼示例:

以上是一個求完整的函數調用,都是“Hello World!”程序的運行原理。

我們也也可以在C語言程序中合成一體匯編,我們一般稱內聯匯編。接下來的介紹內聯匯編。

3.5.2【內聯匯編】

內聯匯編格式:

__asm

{

}

我們在里面添加一些代碼:

#includeltstdio.hgt

intmain(void)

{

__asm

{

moveax,eax

movecx,eax

movedx,ecx

}

return0

}

我們在VisualC中輸入代碼示例CH03_5_1,如圖3-5-6所示。

在main函數前下斷點,我們切換到到反匯編窗口打開系統(tǒng),如圖3-6-7所示。

圖3-6-7中的C語言代碼和匯編代碼追加:

1:#includeltstdio.hgt

2:intmain(void)

3:{

00401010pushebp

00401011movebp,esp

00401013subesp,40h

00401016pushebx

00401017pushesi

00401018pushedi

00401019leaedi,[ebp-40h]

0040101Cmovecx,10h

00401021moveax,0CCCCCCCCh

00401026repstosdwordptr[edi]

4:__asm

5:{

6:moveax,eax

00401028moveax,eax

7:movecx,eax

0040102Amovecx,eax

8:movedx,ecx

0040102Cmovedx,ecx

9:}

10:return0

0040102Exoreax,eax

11:}

00401030popedi

00401031popesi

00401032popebx

00401033addesp,40h

00401036cmpebp,esp

00401038call__chkesp(00401050)

0040103Dmovesp,ebp

0040103Fpopebp

00401040ret

總結“Hello World!”程序總共只寫了9行代碼,而編譯器批量生成了很多匯編指令,同樣“CH03_5_1”中的程序也只有一短短的11行代碼,編譯器也自動導入了很多匯編指令,畢竟匯編指令是可以讓我們明白自己寫的程序運行過程的原理,可是沒有C語言更比較直觀的可以體現出我們是想的結果。簡單說來,匯編語言更妄想于詳細解釋程序啟動的過程,C語言更被害妄想于具體解釋結果。

如果沒有我們把程序運行的過程弄清,這樣當然能結論出程序的結果,反之,如果只清楚程序的結果并到底程序運行中是整樣一步步利用的,那只能說我們并沒有什么完全的學會了C語言。所以我這那是我們課程為啥學習匯編,我想知道為什么把匯編放進C語言之前講的原因。

肯定這只不過在下一己之見,希望能大家一起來討論。