当前位置:网站首页>C语言 4:汇编语言指令介绍
C语言 4:汇编语言指令介绍
2022-07-29 14:23:00 【何小柒(qi)~】
文章目录
汇编语言部分指令介绍
- EAX / EBC / ECX / EDX
| 数字 | 指令 | 介绍 |
|---|---|---|
| 1 | EAX | “累加器”(accumulator), 它是很多加法乘法指令的缺省寄存器。 |
| 2 | EBX | “基地址”(base)寄存器, 在内存寻址时存放基地址。 |
| 3 | ECX | 计数器(counter), 是重复(REP)前缀指令和LOOP指令的内定计数器。 |
| 4 | EDX | 则总是被用来放整数除法产生的余数 |
ESI/EDI 分别叫做“源/目标索引寄存器”(source/destination index),因为在很多字符串操作指令中,DS:ESI指向源串,而ES:EDI指向目标串。
EBP 是“基址指针”(BASE POINTER),它最经常被用作高级语言函数调用的"框架指针"(frame pointer)。
ESP :寄存器存放当前线程的栈顶指针。
EIP:寄存器存放下一个CPU指令存放的内存地址,当CPU执行完当前的指令后,从EIP寄存器中读取下一条指令的内存地址,然后继续执行。
PUSH 指令首先减少 ESP 的值,再将源操作数复制到堆栈。操作数是 16 位的,则 ESP 减 2,操作数是 32 位的,则 ESP 减 4。PUSH 指令有 3 种格式:
PUSH reg/mem16PUSH reg/mem32PUSH inm32POP 指令首先把 ESP 指向的堆栈元素内容复制到一个 16 位或 32 位目的操作数中,再增加 ESP 的值。如果操作数是 16 位的,ESP 加 2,如果操作数是 32 位的,ESP 加 4:
POP reg/mem16POP reg/mem32ESP jmp指令:不影响堆栈。紧紧进行执行流程的跳转,不会保存返回地址。对于jmp而言,长短jmp仅仅是结果不同罢了,短跳转对应段内,长跳转对应段间。
call指令:影响堆栈。在进行流程跳转前会保存返回地址(下一条指令的地址),以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转(或称“长call”)时,只保存EIP;如果是段间跳转(或称“短call”),还保存CS。
ret和retf:这两个指令的功能都是调用返回。
- ret在返回时只从堆栈中取得EIP;retf中的字母f表示far,即段间转移返回,要从堆栈中取出EIP和CS。
- 两个指令都可以带参数,表示发生过程调用时参数的个数,返回时要从堆栈中退出相应个数的参数。
- 恢复CS时,如果发现将发生特权级变化(当前CS的低2位不等于从堆栈中取得的新的CS值的低2位。由跳转的相关理论可知,只有跳转到非一致代码段时才会发生特权级变化,那么,也只有从非一致代码段返回时才会发生特权级变化的返回),则还要从调用者堆栈中取得ESP和SS恢复到相应寄存器中,也即恢复调用者堆栈。
- (1)加法指令
| 加法指令 | ADD/ADC、INC |
|---|---|
| 普通加法指令 | ADD |
| 带进位加法指令 | ADC |
| 加1指令 | INC |
(2)减法指令
| 减法指令 | SUB/SBB |
|---|---|
| 不考虑借位减法指令 | SUB |
| 考虑借位的减法指令 | SBB |
| 减1指令 | DEC |
| 比较指令 | CMP |
| 求补指令 | NEG |
(3)乘法指令 MUL
(4)除法指令 DIV
- INC 是汇编语言中算术运算类指令,起到加1的功能。
边栏推荐
- FPGA刷题——跨时钟域传输(FIFO+打拍+握手)
- Violence recursion to dynamic programming 02 (very clever game of CARDS)
- 搞直播啦,千视超高清4K NDI编解码器8月3日19:00准时开播
- 如何使用SparkSQL做一些简单的数据分析和可视化展示?
- 部门例会上做测试分享,不知道分享什么内容?
- EA&UML日拱一卒-活动图::Feature和StuctualFeature
- Realization of Online Chat System Based on SSM
- 企业需要知道的5个 IAM 最佳实践
- ArcGIS Pro与ArcGis区别
- 无线传感器网络定位综述
猜你喜欢

深开鸿:万物智联的大江上,升起一轮开源鸿蒙月

《外太空的莫扎特》

【pytorch】1.6 tensor 基本运算

这个 MySQL bug,99% 的人会踩坑!

Chinese Internet technology companies were besieged by wolves. Google finally suffered a severe setback and its profits fell sharply. It regretted promoting the development of Hongmeng...

国内helm快速安装和添加常用charts仓库

EA&UML日拱一卒-活动图::Feature和StuctualFeature

PyQt5快速开发与实战 7.1 信号与槽介绍

FPGA刷题——跨时钟域传输(FIFO+打拍+握手)

国产手机将用户变成它们的广告肉鸡,难怪消费者都买iPhone了
随机推荐
题目 1125: C语言训练-委派任务*
部门例会上做测试分享,不知道分享什么内容?
广州市应急管理局发布夏季危化品十大安全风险
《外太空的莫扎特》
建议尽快优化搜索体验
【LeetCode】593. 有效的正方形
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
函数柯里化
有关包装类的一道经典面试题
为什么 ThreadLocal 可以做到线程隔离?
Nacos基础教程
LeetCode_494_目标和
FPGA刷题——跨时钟域传输(FIFO+打拍+握手)
Principles Of Mathematical Analysis, Third Edition免费下载地址
Introduction to several methods of making custom welcome interface on Weiluntong touch screen
WOLFLAB一方老师为什么要写网络虚拟化《VMware NSX-T卷2》路由架构-2
无线传感器网络定位综述
苹果官方降价的原因找到了,它也面临销量下滑乃至出现库存问题
RAMAN CONFIGURE 命令都能实现哪些功能
Shared memory - shmget filling holes