2016 - 2024

感恩一路有你

一段完整的arm汇编语言 汇编语言有几种版本?

浏览量:2470 时间:2023-06-16 12:28:29 作者:采采

汇编语言有几种版本?

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开发工具中,反汇编窗口,不需要下断点、按F7编译、按F5调试运行才能可以切换到反汇编窗口。该如何下断点哪?选中后“intmain(void)”这一行按F9,会在这一行代码前出现一个黄色的圆点,只能说明巳经断下断点,有图3-5-2所示。【注:按F9下断点只是在VisualC开发工具中不使用】

按F9下断点后,我们随即按F7,让程序编译,程序实际编译后再按F5现场调试,会再次出现如图3-5-3所示。

出现图3-5-3的界面之后,我们然后点击鼠标左键,又出现如图3-5-4界面。

中,选择Go ToDisassembly,会出现如图3-5-5的界面,说明成功可以切换到反汇编窗口,按F10一步一步地想执行。

下面的图片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函数前下断点,我们切换到到反汇编窗口打开系统,如图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语言之前讲的原因。

肯定这只不过在下一己之见,希望能大家一起来讨论。

汇编 程序 代码

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。