当前位置:网站首页>汇编语言(8)x86内联汇编
汇编语言(8)x86内联汇编
2022-08-05 08:53:00 【Day-3】
1 单行汇编
#include <stdio.h>
#include <stdlib.h>
int main()
{
int nNum = 0;
_asm mov nNum, 100
printf("%d\n", nNum);
system("pause");
return 0;
}
2 多行汇编
2.1 库函数
#include <stdio.h>
#include <stdlib.h>
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
mov nNum, 100
push nNum
mov eax, szFormat
push eax
call printf
add esp, 8
}
system("pause");
return 0;
}
2.2 自写函数
#include <stdio.h>
#include <stdlib.h>
int MyAdd(int a, int b)
{
return a + b;
}
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
push 1
push 2
call MyAdd
add esp, 8
mov esi,eax
push esi
mov eax, szFormat
push eax
call printf
add esp, 8
}
system("pause");
return 0;
}
3 自定义函数与主函数的互动
使用esi可以,使用ecx就不行,原因自定义函数在运行开始初始化时,改变了ecx的值。
#include <stdio.h>
#include <stdlib.h>
int MyAdd(int a, int b)
{
int nNum = 0;
_asm mov nNum, edx
if (nNum != 12313)
{
_asm jmp x1
}
else
{
_asm jmp esi
}
x1:
return a + b;
}
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
mov edx, 12313
mov esi, thisx
}
thisx:
system("pause");
return 0;
}
4 栈实现主函数与自定义函数的互动
#include <stdio.h>
#include <stdlib.h>
int MyAdd(int a, int b)
{
int nNum = 0;
_asm mov nNum, ebp - 4
if (nNum != 12313)
{
_asm jmp x1
}
else
{
_asm jmp ebp - 8
}
x1:
return a + b;
}
int main()
{
char * szFormat = "%d\n";
int nNum = 0;
_asm {
push 12313
push thisx
call MyAdd
}
thisx:
system("pause");
return 0;
}
5 数组遍历
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = {
1,2,3,4,5,3,3,1,1,1,0 };
char * szFormat = "%d\n";
_asm {
xor esi,esi
jmp lookX
lookM:
inc esi
lookX:
mov edi, [arr + esi * 4]
push edi
mov eax, szFormat
push eax
call printf
add esp, 8
cmp edi, 0
jne lookM //若不相等则跳转
}
system("pause");
return 0;
}
6 按数组长度遍历
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[] = {
0,1,2,3,4,5 };
char * szFormat = "%d\n";
_asm {
mov edi, 5h
xor esi,esi
jmp look1
look:
inc esi
look1:
push [arr + esi * 4]
mov eax, szFormat
push eax
call printf
add esp, 8
cmp esi, edi
jne look
}
system("pause");
return 0;
}
边栏推荐
- 【Excel实战】--图表联动demo_001
- Embedded practice ---- based on RT1170 transplant memtester to do SDRAM test (25)
- 使用 External Secrets Operator 安全管理 Kubernetes Secrets
- DTcloud 装饰器
- sphinx匹配指定字段
- 阿里云存储的数据库是怎么自动加快加载速度的呢www.cxsdkt.cn怎么设置案例?
- 国际原子能机构总干事称乌克兰扎波罗热核电站安全形势堪忧
- 【 a daily topic 】 1403. The increasing order of the sequence, boy
- ps怎么拼图,自学ps软件photoshop2022,PS制作拼图效果
- egg框架
猜你喜欢
工程制图知识点
使用稀疏 4D 卷积对 3D LiDAR 数据中的运动对象进行后退分割(IROS 2022)
sql server中 两表查询 平均数 分组
MySQL 数据库 报错 The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid)
mySQL数据库初始化失败,有谁可以指导一下吗
交换机端口的三种类型详解与hybrid端口实验
接口全周期的生产力利器Apifox
[Structural Internal Power Cultivation] Structural Realization Stages (2)
The Coolest Kubernetes Network Solution Cilium Getting Started Tutorial
D2--FPGA SPI interface communication2022-08-03
随机推荐
pnpm 是凭什么对 npm 和 yarn 降维打击的
[Structural Internal Power Cultivation] The Mystery of Enumeration and Union (3)
flink cdc支持从oracle dg库同步吗
How to make pictures clear in ps, self-study ps software photoshop2022, simple and fast use ps to make photos clearer and more textured
Thinking after writing a code with a very high CPU usage
使用 External Secrets Operator 安全管理 Kubernetes Secrets
原型&原型链
国际原子能机构总干事称乌克兰扎波罗热核电站安全形势堪忧
tensorflow.keras无法引入layers
DPU — 功能特性 — 管理系统的硬件卸载
egg框架中解决跨域的三种方案
php fails to write data to mysql
Rotation of the displayed value on the button
Spark cluster deployment (third bullet)
Walk 100 trick society
[Structural Internal Power Cultivation] Structural Realization Stages (2)
(转)[Json]net.sf.json 和org.json 的差别及用法
selectPage 动态改变参数方法
基于多块信息提取和马氏距离的k近邻故障监测
七夕看什么电影好?爬取电影评分并存入csv文件