前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IA32和X86有什么区别?

IA32和X86有什么区别?

作者头像
20岁爱吃必胜客
发布2022-11-13 10:09:59
2K0
发布2022-11-13 10:09:59
举报
文章被收录于专栏:进步集

博主昵称:一拳必胜客 博主主页面链接:博主主页传送门 博主专栏页面连接:专栏传送门--计算机考研 创作初心:本博客的初心是每天分享记录自己学习的脚步,和各位技术友探讨交流; 博主研究方向:渗透测试、嵌入式、机器学习; 博主寄语:感谢各位技术友的支持,您的支持就是我前进的动力 ;

 特别鸣谢:木芯工作室 孔子学鼓琴师襄子,十日不进。师襄子曰:“可以益矣。”孔子曰:“丘已习其曲矣,未得其数也。”有间,曰:“已习其数,可以益矣。”孔子曰:“丘未得其志也。”有间,曰:“已习其志,可以益矣。”孔子曰:“丘未得其为人也。”有间,有所穆然深思焉,有所怡然高望而远志焉。曰:“丘得其为人,黯然而黑,几然而长,眼如望羊,如王四国,非文王其谁能为此也!”师襄子辟席再拜,曰:“师盖云文王操也。”

数据传送指令 格式:MOVX source, destination  X: L 32位值 W 16位值 B 8字节  MOVL %EAX, %EBX  MOVW %AX, %BX  MOVB %AL, %BL 使用规则,mov只有以下13种情况 情况    举例 立即数==>通用寄存器    movl 地址格式: base_addr(offset_addr, index, size)  数据值位于base_addr + offset_addr + index * size  offset_addr,index必须为寄存器值,size可以是数字值 movl $2, %edi movl values(, %edi, 4), %eax 寄存器间接寻址 $加标签获取内存位置的地址 movl $values, %edi ;把values地址送进EDI movl %ebx, (%edi)  ;把EDX值送到EDI中包含的内存位置处 movl %ebx, 4(%edi) ;把值放到EDI寄存器指向位置之后4个字节的内存位置处 movl %ebx, -4(%edi);把值放到EDI寄存器指向位置之前4个字节的内存位置处 2 条件传送指令 条件传送指令可以避免处理器执行JMP指令,这有助于处理器的预取缓存状态,通常能提高应用程序的速度 指令格式 : CMOVX source, destination  X是1个或2个字母的代码,表示将触发传送操作的条件;  条件取决于EFLAGS寄存器当前值 使用的位 ———————————————— 版权声明:本文为CSDN博主「xcy6666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/giantpoplar/article/details/53286466 交换数据 XCHG OP1, OP2 op1和op2可以同时为通用寄存器或者一个是内存位置(不能同时为内存位置)  8 bit, 16 bit, 32 bit寄存器都可以使用  当其中一个操作数是内存位置时,处理器LOCK信号自动标明,防止交换过程中其他处理器访问这个内存位置。  LOCK是非常耗时间的,并且可能对程序性能有不良影响。 BSWAP REG 反转寄存器字节顺序,大端变小端 XADD SOURCE, DESTINATION 交换两个寄存器的值或寄存器和内存位置的值,然后相加存到destination中 CMPXCHG SOURCE, DESTINATION 如果destination和EAX/AX/AL相等,把source加载到destination;  否则,把destination加载到EAX/AX/AL中 CMPXCHG8B DESTINATION 如果destination处8字节和EDX:EAX包含值匹配,ECX:EBX中64位值加载到destination内存位置;  否则destination内存位置值加载到EDX:EAX中。 ———————————————— 版权声明:本文为CSDN博主「xcy6666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/giantpoplar/article/details/53286466 压栈 pushx source X:l用于长字32bit,w用于半字16bit  操作数是  16bit/32bit 立即数值  16bit/32bit 内存值  16bit/32bit 寄存器值  16bit 段寄存器  e.g. pushl   %ecx pushw  %cx pushl  100 pushl   data  ;push data值     pushl   data ;push data的地址 1 2 3 4 5 出栈 popx destination 16bit/32bit 寄存器  16bit 段寄存器  16bit/32bit 内存位置  e.g. popl   %ecx popw  %cx popl   value ESP寄存器是堆栈指针跟踪着堆栈的开始位置 压入和弹出所有寄存器 PUSHA 压入16位寄存器 顺序DI, SI, BP, BX, DX, CX, AX  PUSHAD压入32位寄存器 顺序EDI, ESI, EBP, EBX, EDX, ECX, EAX 手动使用ESP,EBP手工把数据放入堆栈  通常 很多程序把ESP值复制到EBP,而不是使用ESP本身 优化内存访问:奔腾四的处理器中,缓存块长度是64bit,定义的数据超过64位,就需要两次访存操作。 5 控制执行流程 无条件分支 : 跳转;调用;中断 跳转 汇编程序不认为跳转是不良的程序设计,对程序的性能有影响  jmp location location是要跳转到的内存地址,被声明为代码中的标签;  遇到跳转时指令指针改编为紧跟在标签后面的指令码的内存地址。 调用 保存发生跳转的位置,并且具有在需要时返回这个值的能力  call address:引用程序中的标签,他被转换为函数中的第一条指令的地址  返回指令RET没有操作数,通过查看堆栈,它知道返回什么位置  函数调用模板 Function_label: Pushl %ebp Movl %esp, %ebp <normal code> Movl %ebp, %esp Popl %ebp Ret e.g. ;calltest.s ;An example of using the CALL instruction .section .data output:    .asciz "This is section %d\n" .section .text .globl _start _start:    pushl 8, %esp    call overhere    pushl 3    pushl output    call printf    add  8, %esp    pushl 0    call exit overhere:    pushl %ebp    movl %esp, %ebp    pushl 2    pushl output    call printf    add  8, %esp    movl %ebp, %esp    popl %ebp    ret ———————————————— 版权声明:本文为CSDN博主「xcy6666」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/giantpoplar/article/details/53286466 x86 早期,1980s年代,x86一般指当时的处理器8088和80286,不过这两个处理器都是16位的。如今,x86通常指32位指令集架构的处理器,比如80386。80386处理器是intel在1985年实现的第一款32位指令集架构的处理器,又叫i386,Intel Architecture, 32-bit,缩写为IA-32,现在,IA-32一般又能引喻成所有的支持32位计算的x86架构。 按照发展历史看,x86应该是指令集概念,一般用于个人PC系统如8086,286,386。IA-32是intel首推的32位架构。 x86-64/x64/amd64/Intel64 在1999年,AMD公司首先在IA-32基础上,增加了64位寄存器,兼容早期的16位和32位软件系统,推出了x86-64的64位微处理器,后来命名为AMD64,实现了超车。然后intel公司也接受了该方案,叫做Intel64。x86-64应该只算是x86指令集的64位扩展,并不是一种全新的64位架构。 由于amd64和intel64本质上是一样的,叫法也是很多。AMD通常叫它x86-64、x86_64,微软和sun等软件公司叫它x64,操作系统厂商则通常用AMD64或者amd64来指代AMD64和Intel64。 IA-64 IA-64是Intel推出的用于Itanium处理器(安腾处理器)的自己的Intel Architecture 64位指令集,一般用于服务器。尽管Intel64也是64位处理器,但这两者完全不是一回事。IA-64软件不能直接运行于Intel64处理器上。x86-64是IA-32指令集的扩展,而IA-64则是完完全全没有一点IA-32影子的独立处理器架构。IA-64需要通过模拟器才能运行IA-32,但是性能大大受影响。 市面上处理器如何区分AMD64和IA-64呢? 市面上买的Intel 64-bit的cpu其实都属于amd64分类,intel64和amd64其实都应该叫做x86_64。 IA64则指Itaniums系统cpu,并不是x86架构的,一般都是用于服务器,不是个人桌面产品,价格昂贵。 ARM64/AArch64 ARM是精简指令集RISC下的处理器架构。ARMv3至ARMv7支持32位寻址空间。ARMv8-A开始支持64位寻址空间。AArch64和ARM64都是指64位的ARM架构。 [参考]: https://en.wikipedia.org/wiki/AArch64 https://en.wikipedia.org/wiki/IA-32 https://titanwolf.org/Network/Articles/Article?AID=f0882831-3c86-4201-9418-da3a05626bed#gsc.tab=0 https://en.wikipedia.org/wiki/X86 ———————————————— 版权声明:本文为CSDN博主「jrglinux」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_23662505/article/details/119374633

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-10-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档