当前位置:网站首页>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的功能。
边栏推荐
- 嵌入式开发经验分享,把学习当作一种兴趣
- 基于C语言实现的LL(1)分析
- 力扣之顺序表
- 如何返回一个数字的所有质因数?
- 593. 有效的正方形 : 简单几何运用题
- Violence recursion to dynamic programming 02 (very clever game of CARDS)
- 电视处理器a53和a55哪个厉害(cortexa55处理器好吗)
- Couldn‘t create temporary file /tmp/apt.conf.uko4Kd for passing config to apt-key
- 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...
- 480-82(59、151)
猜你喜欢

从一道面试题说起:GET 请求能传图片吗?

搞直播啦,千视超高清4K NDI编解码器8月3日19:00准时开播

Some thoughts on paying for knowledge

已解决SyntaxError: invalid character in identifier

【堡垒机小知识】硬件堡垒机是什么意思?其与云堡垒机有什么区别?

C51 存储类型与存储模式

Introduction to several methods of making custom welcome interface on Weiluntong touch screen

【微信小程序】全局配置

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

Guangzhou Emergency Management Bureau released the top ten safety risks of hazardous chemicals in summer
随机推荐
基于降阶扩张状态观测器的逆变系统重复控制设计
升级openssl1.1.1(mix2s哪个版本不断流)
中国互联网科技企业群狼围攻,谷歌终于遭受重挫导致利润大跌,它为推动鸿蒙的发展而后悔...
力扣 206.反转链表--递归解决
Some thoughts on paying for knowledge
函数柯里化
The Location object of BOM series
Work Efficiency - Fifteen minutes allows you to quickly learn Markdown syntax to proficient in typesetting practice notes
全面质量管理理论
【Try to Hack】IDS入侵检测系统
正则、grep/egrep、sed、awk
基于C语言实现一个社交系统
面对互联网的裁员潮,我们该何去何从?
升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
深陷盈利困境,“寒冬”中也要二次递表,北森上市迫切
第4章_3——索引的使用
搞直播啦,千视超高清4K NDI编解码器8月3日19:00准时开播
How to return all prime factors of a number?
建议尽快优化搜索体验
Why do strings use the final keyword