初识汇编(代码片段)

WinJayQ WinJayQ     2022-11-11     581

关键词:

函数本质

SP和FP寄存器

  • sp寄存器在任意时刻会保存我们栈顶的地址.
  • fp寄存器也称为x29寄存器属于通用寄存器,但是在某些时刻我们利用它保存栈底的地址!()

注意:ARM64开始,取消32位的 LDM,STM,PUSH,POP指令! 取而代之的是ldr\ldp str\stp
ARM64里面 对栈的操作是16字节对齐的!!

关于内存读写指令

注意:读/写 数据是都是往高地址读/写

str(store register)指令

将数据从寄存器中读出来,存到内存中.

ldr(load register)指令

将数据从内存中读出来,存到寄存器中

此ldr 和 str 的变种ldp 和 stp 还可以操作2个寄存器.

堆栈操作练习

使用32个字节空间作为这段程序的栈空间,然后利用栈将x0和x1的值进行交换.

sub    sp, sp, #0x20    ;拉伸栈空间32个字节
stp    x0, x1, [sp, #0x10] ;sp往上加16个字节,存放x0 和 x1
ldp    x1, x0, [sp, #0x10] ;将sp偏移16个字节的值取出来,放入x1 和 x0

bl和ret指令

bl标号

  • 将下一条指令的地址放入lr(x30)寄存器
  • 转到标号处执行指令

ret

  • 默认使用lr(x30)寄存器的值,通过底层指令提示CPU此处作为下条指令地址!

ARM64平台的特色指令,它面向硬件做了优化处理的

x30寄存器

x30寄存器存放的是函数的返回地址.当ret指令执行时刻,会寻找x30寄存器保存的地址值!

注意:在函数嵌套调用的时候.需要讲x30入栈!

函数的参数和返回值

ARM64下,函数的参数是存放在X0到X7(W0到W7)这8个寄存器里面的.如果超过8个参数,就会入栈.
函数的返回值是放在X0 寄存器里面的.

函数的局部变量

函数的局部变量放在栈里面!

linux----编译器+gdb+初识make/makefile+git(代码片段)

...编连接函数库静态库动态库g++2)gdb操作3)初识make/Makefile使用makefile实现程序编译全过程4)git程序编译过程:预处理(进行宏替换)编译(生成汇编) 查看详情

初识存储过程(代码)(代码片段)

--1createprocedureGetStudentsInfoasselect*fromstudentgoexecGetStudentsInfoalterprocedureGetStudentsInfoasselect*fromstudentwherestuSex=‘男‘execGetStudentsInfo--2/*publicDataTableGetStudentsInfoByGrade( 查看详情

初识爬虫(代码片段)

这两个用法其实我也还是没有怎么搞懂,先记录下吧HttpContentcontent=newStringContent(JsonConvert.SerializeObject(o),Encoding.UTF8,"application/json");varmyhttpclient=_myhttpclientfactory.CreateClient();varmessage=Task.Run(()=& 查看详情

函数的初识(代码片段)

函数的初识写一个获取字符串总个数的代码,不能用len:s1='fjkdsfjdssudafurpojurojregreuptotuproq[t'#python没有lencount=0foriins1:count+=1print(count)写一个获取列表总个数的代码:l1=[1,2,3,4,5,6]count=0foriinl1:count+=1#print(count)这样的写代 查看详情

装饰器的初识(代码片段)

装饰器的初识版本一:大壮写一些代码测试一下index函数的执行效率。importtime#defindex():#‘‘‘有很多代码.....‘‘‘#time.sleep(2)#模拟的网络延迟或者代码效率#print(‘欢迎登录博客园首页‘)##defdariy():#‘‘‘有很多代码.....‘‘‘... 查看详情

初识递归(代码片段)

...存角度出发做得限制#能看懂递归#能知道递归的应用场景#初识递归——#算法——二分查找算法#三级菜单——递归实现#whileTrue:#print(‘从前有座山‘)#defstory():#print(‘从前有座山‘)#story()#print(111)##story()#RecursionEr 查看详情

初识express(代码片段)

初识Express1.简介:  express是基于Nodejs平台的快速,开放,极简的web开发框架 2.安装npminstallexpress--save 3.Helloworld:constexpress=require(‘express‘)constapp=express()app.get(‘/‘,(req,res)=>res.send("He 查看详情

springmvc注解版本--初识--12(代码片段)

SpringMVC注解版本--初识--12初识基于注解的Controller基于注解的Controller原型分析自定义用于基于注解的Controller的HandlerMapping官方提供用于处理注解的HandlerMapping自定义用于基于注解的Controller的HandlerAdaptor初识基于注解的Controller在Spri... 查看详情

activemq初识-2(代码片段)

activeMq简单实例:packagecom.gordon;importorg.apache.activemq.ActiveMQConnectionFactory;importjavax.jms.*;/***生产者*Createdbygordonon2018/9/8.*/publicclassSenderpublicstaticfinalStringuserName="admin";publi 查看详情

我的汇编之路之初识汇编

  引子:我为什么一下子想来自学汇编语言呢?也就是前几天在一个黑客网站看见了一个关于破解rar压缩包密码的.bat应用程序,我把它下下来,然后看了下源码,发现是我之前听说过的汇编语言写的。就这样,我便对汇编语... 查看详情

imx6ull开发板初识arm汇编

我们在学习 Linux 嵌入式开发的时候,了解 ARM 汇编是很有必要的,虽然我们使用汇编编写代码的情况很少,但是有些情况下我们需要简单编写一些汇编程序来协助我们调试板子(因为我们的 i.MX6UL 终结者开... 查看详情

9-函数初识(代码片段)

三元运算  z=aifa>belseb 函数的初识:   def函数名():   函数体1ll=‘你好,China‘2defmy_lenth():#用来定义函数34#函数体5count=06foriinll:7count+=18print(count)91011my_lenth()#调用函数  函数就是封装一个功能   函数是以功能为导... 查看详情

[计算机基础]汇编学习(代码片段)

...将以下工具都放到工作目录下:debug.exemasm.exelink.exe二、初识汇编1.汇编器(汇编编译器)和指令机器指令:0101001110汇编指令:MOVAX,000C  人类能识别和编写的指令汇编器:将汇编指令翻译成机器指令的翻译器。即可以将MOVA... 查看详情

gitbook初识(代码片段)

文章目录gitbook初识1.环境要求1.1`node`安装参考1.2版本检查2.安装`gitbook-cli`脚手架工具3.基本命令使用3.1初始化3.1.1目录结构3.2启动3.3构建3.4示例4.预览gitbook初识使用gitbook开发电子书,本文主要采用gitbook-cli方式进... 查看详情

gitbook初识(代码片段)

文章目录gitbook初识1.环境要求1.1`node`安装参考1.2版本检查2.安装`gitbook-cli`脚手架工具3.基本命令使用3.1初始化3.1.1目录结构3.2启动3.3构建3.4示例4.预览gitbook初识使用gitbook开发电子书,本文主要采用gitbook-cli方式进... 查看详情

初识go的语法(代码片段)

一、HelloWord初识先来解释一下上次的代码packagemain//声明main包,表明当前是一个可执行程序import( "fmt")//导入内置fmt包funcmain()//main函数,是程序执行的入口 fmt.Println("HelloWorld!")//在终端打印HelloWorld!1、packagemainpa... 查看详情

numpy初识(代码片段)

文章目录numpy初识一、numpy是什么?二、numpy数组2.1数组使用2.2创建数组1.使用empty创建空数组2.使用arange函数创建3.使用zeros函数生成数组4.ones函数生成数组5.diag函数生成对角矩阵6.N维数组2.3访问数组元素三、了解矩阵3.1广播惊... 查看详情

初识函数(代码片段)

1.什么是函数  函数就是具备某一功能的工具2.为什么要用函数  1增加程序的可读性,让程序变得清晰  2减少代码冗余  3增加可扩展性3如何用函数  函数的使用必须遵循的原则:先定义,后调用  语法:    d... 查看详情