卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

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

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

匯編語言有幾種版本?

x86匯編

8086匯編

ATampT匯編

Intel匯編

ARM匯編

在ARM匯編程序如何實(shí)現(xiàn)子程序的返回?

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

將LR然后賦給PC:MOVPC,LR

直接跳轉(zhuǎn):BXLR

要想精通C語言,必須先學(xué)習(xí)匯編嗎?

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

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

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

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

按F9下斷點(diǎn)后,我們隨即按F7,讓程序編譯,程序?qū)嶋H編譯后再按F5現(xiàn)場調(diào)試,會再次出現(xiàn)如圖3-5-3所示。

出現(xiàn)圖3-5-3的界面之后,我們?nèi)缓簏c(diǎn)擊鼠標(biāo)左鍵,又出現(xiàn)如圖3-5-4界面。

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

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

以上是一個求完整的函數(shù)調(diào)用,都是“Hello World!”程序的運(yùn)行原理。

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

3.5.2【內(nèi)聯(lián)匯編】

內(nèi)聯(lián)匯編格式:

__asm

{

}

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

#includeltstdio.hgt

intmain(void)

{

__asm

{

moveax,eax

movecx,eax

movedx,ecx

}

return0

}

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

在main函數(shù)前下斷點(diǎn),我們切換到到反匯編窗口打開系統(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

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

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

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