汇编常用知识

前言

该文章写作目的:帮助自己以及有一定汇编基础的同学,尽快回想起汇编相关知识。如果不想本地生成代码,推荐在线编译器compiler expolorer。下文所有就是基于x86-64架构,gcc 11.2编译器介绍。

compiler explorer
在这里插入图片描述
很好用,左边是代码输入,可以选择很多语言,右边可以选择编译器以及填入编译选项。还可以生成可执行文件,直接在页面查看运行结果,以及编译后的真实内存地址。不同色块可以帮助我们定位单条语句生成的汇编代码。

常用寄存器寄存器

  • %rax 用于函数返回值传参
  • %rdi,%rsi 等用于函数传参 rdi为第一个传入参数,x86-64下寄存器大小为64bit。rsi为第二个传入参数还有其他四个这里就不记录了。用于函数传参的寄存器总共有6个,如果函数传入参数超过6个会将多余的传入参数保存在函数栈(内存)中。可见函数形参多于6个会一定程度上影响效率。
  • 状态寄存器 有SF(符号寄存器),OF(溢出寄存器),CF等,这里寄存器的使用,往往有特定的指令。如我们使用cmp会比较两个值,会修改ZF和CF寄存器的值。je(为jup族指令),它会读取ZF和CF的状态,如果满足 “==" 则跳转。
  • %rbp :64bit, 栈底指针,标记函数栈的底部
  • %rsp :64bit, 栈顶指针,标记函数栈的顶部
  • %rip : 32bit pc指针,存放下一条运行的指令

常识

栈空间扩展方向是从高地址到低地址的。
栈空间分配是编译时决定,函数内局部变量数量不会怎加可重定向文件中的符号数,即不会增加exe的大小。

常用汇编指令

汇编指令往往是一个族。比如mov指令,有movq,movl 等,movq作用是mov4个字节。
1、mov
将一定字节数数据,从内存读到寄存器,或者从寄存器写入内存。

mov des,src

2 、cmp

cmp A, B
通过做差,比较A和B,会修改状态寄存器的值

3、jmp

jmp Lable
跳转到Lable标签处

【注】%reg代表某个寄存器
4、Push

Push %reg
将寄存器保存到当前函数栈中,可以分为两步:(1)利用sub指令使栈顶寄存器%rsp 扩展%reg大小(2)利用mov指令将%reg中的值写入内存(内存地址为%rsp中的值)

5 、Pop

Push %reg
将寄存器保存到当前函数栈中,分两步 (1)使用mov以栈顶指针为地址读取%reg大小的字节数到%reg中 (2)利用add 将%rsp收缩%reg大小字节数。

6、call

call Address用于调用函数
分两步(1)Push %rip 保存当先函数中下一条指令(2)jmp跳转到Address处开始执行代码

7 、ret

用于函数返回
分两步:(1)修改%rsp为%rbp中的值 ,这一步即释放资源
(2) Pop %rip:从内存中加载调用call时保存的下一条指令到%rip

8、lea

获取内存地址。对应c代码&

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 51单片机是一种常用单片机,具有广泛的应用领域。了解51单片机的基础知识对于程序设计和硬件开发都非常重要。以下是一些常用的51单片机基础知识的汇总: 首先是51单片机的基本介绍。51单片机是一种8位微控制器,由Intel公司开发,采用哈佛结构,具有较低的功耗和成本。它具有存储器、输入输出端口、定时器和串口等功能。 其次是51单片机的主要特征。51单片机具有兼容性好、易于编程、存储器地址空间较大、中断处理能力强和低功耗等特点。它还支持多种编程语言,如C语言汇编语言。 然后是51单片机的基本组成。51单片机包括中央处理器、存储器、输入输出端口和定时器等基本部件。其中,中央处理器是控制和执行指令的核心部分,存储器用于存储数据和程序,输入输出端口用于与外部设备进行数据交互,定时器用于产生精确定时信号。 接下来是51单片机的编程方式。51单片机可以通过汇编语言或高级语言编程,如C语言汇编语言编程可以直接控制硬件,但编写复杂,难以维护。而C语言编程相对简单,屏蔽了底层硬件细节,提高了代码的可读性和可维护性。 最后是51单片机的应用领域。由于51单片机具有成本低、功耗低和易于编程等特点,它被广泛应用于各种嵌入式系统中,如家电控制、工业控制、自动化设备和智能传感器等。 以上是51单片机常用基础知识的简要汇总,希望对您有所帮助。如果想了解更多详细内容,可以参考CSDN等相关技术论坛和教程。 ### 回答2: 51单片机是一种经典的典型的8位单片机常用于嵌入式系统中。它的引脚多,功能丰富,易于学习和使用。以下是51单片机的一些基础知识汇总: 1. 架构和特点:51单片机采用哈佛结构,具有51个通用I/O引脚,具备外部中断、定时器/计数器、串行通信等多种功能。 2. 存储器:51单片机有4KB的片内RAM和64KB的片内ROM,可以根据需求选择具体型号。 3. 编程语言:51单片机可以使用汇编语言进行编程,也支持C语言编程。C语言编程相比汇编语言更容易上手、快速开发。 4. 编程工具:有很多编程工具可供选择,如Keil C51、SDCC等。 5. 系统时钟:51单片机一般采用外部晶振提供时钟信号,也可以使用内部振荡器。时钟频率可以根据实际需求进行配置。 6. IO口功能:51单片机的I/O口具有多种功能,可作为通用输入输出口、定时器输入、中断触发等。 7. 中断控制:51单片机具有多级中断优先级控制功能,可以在需要时触发中断,并进行相应的中断服务程序的处理。 8. 定时器/计数器:51单片机具有2个16位定时器/计数器,可以用于产生精确的时间延迟、脉冲计数等功能。 9. 串口通信:51单片机内置UART,支持串行通信协议,如RS232、SPI、I2C等。 10. 程序存储方式:51单片机可以从片内ROM或者片外存储器中读取程序,也可以通过串口下载程序。 总的来说,51单片机作为一种经典的8位单片机,具有丰富的功能和强大的扩展性,学习和掌握这些基础知识对于嵌入式系统开发非常重要。 ### 回答3: CSND是一个知名的IT技术论坛,其中提供了关于51单片机常用基础知识的详细汇总。以下是一些常用的基础知识: 首先,51单片机是指英特尔公司推出的一种8位微控制器,其指令系统兼容Intel MCS-51系列。它具有低功耗、高集成度和强大的性能特点。 51单片机常用编程语言是汇编语言和C语言。通过编程,可以实现对单片机的控制和管理。在编程语言的基础上,还需要了解单片机的指令系统、寄存器的使用方法和中断的处理等内容。 对于51单片机的IO口操作也是非常重要的基础知识。IO口包括输入和输出两种模式,可以通过设置和读取IO口的电平状态来实现与外部设备的通信。通过IO口操作,可以实现对LED灯、按键、液晶显示屏等外围设备的控制。 此外,了解定时器和计数器的使用也是51单片机常用的基础知识之一。定时器和计数器可以用于产生精确的时间延时、频率计数、脉冲计数等功能。它们可以被用来控制和监测系统中的各种事件。 对于中断的处理也是不可忽视的基础知识。中断是指在程序运行过程中,由硬件或软件发出的一种请求,要求CPU立即转去执行特定的处理程序。学习如何处理中断可以提高系统的实时性和可靠性。 除了以上几方面的基础知识外,还需要了解51单片机的存储器结构、串行通信接口、蜂鸣器的使用、温度传感器的应用等。 在学习这些基础知识的过程中,不仅需要理解原理和概念,更重要的是通过实践来提高编程能力和解决问题的能力。希望上述的基础知识汇总能够帮助您在学习51单片机方面有所收获。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值