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

 特别鸣谢:木芯工作室

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

数据传送指令

格式:MOVX source, destination 
X: L 32位值 W 16位值 B 8字节 
MOVL %EAX, %EBX 
MOVW %AX, %BX 
MOVB %AL, %BL
使用规则,mov只有以下13种情况

情况    举例
立即数==>通用寄存器    movl $0, %eax
立即数==>内存位置    movl $100, value
通用寄存器==>通用寄存器    movb $al, %cl
通用寄存器==>段寄存器    movl %edx, %cs
通用寄存器==>控制寄存器    movl %edi, %cr0
通用寄存器==>调试寄存器    movl
段寄存器 ==>通用寄存器    movl %ds, %esi
控制寄存器==>通用寄存器    movl %cr4, %esp
调试寄存器==>通用寄存器    
内存位置==>通用寄存器    movl value, %eax
内存位置==>段寄存器    
通用寄存器==>内存位置    movl %ecx, value
段寄存器 ==>内存位置    
变址寻址

地址格式: 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 $1
   pushl $output
   call printf
   add  $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

IA32和X86有什么区别?相关推荐

  1. 大型机、小型机、x86服务器的区别

    首先来讲x86服务器,与平常人们所接触的台式机笔记本类似,采用CISC架构处理器.随着英特尔至强处理器的性能不断提升,业内有种说法是x86服务器有抢占小型机市场的趋势. x86服务器 Intel推出至 ...

  2. 小型机 PC服务器 性能,大型机、小型机、x86服务器的区别

    大型机.小型机.x86服务器的区别 首先来讲x86服务器,与平常人们所接触的台式机笔记本类似,采用CISC架构处理器.随着英特尔至强处理器的性能不断提升,业内有种说法是x86服务器有抢占小型机市场的趋 ...

  3. X64汇编语言寄存器结构及其与X86架构编程区别

    目录 1.  关于X64架构 2.  X64架构的寄存器结构 2.1  通用目的寄存器 2.2 浮点数寄存器 2.3 指令指针寄存器 2.4 段寄存器 2.5 标识寄存器 2.6 控制寄存器 2.6. ...

  4. arm架构和x86架构的区别详解

    什么叫arm架构 ARM架构过去称作进阶精简指令集机器(AdvancedRISCMachine,更早称作:AcornRISCMachine),是一个32位精简指令集(RISC)处理器架构,其广泛地使用 ...

  5. 华为云服务器CPU架构x86和鲲鹏区别对比及选择

    华为云服务器x86计算和鲲鹏计算有什么区别?x86和鲲鹏是指CPU架构的两个系列,x86采用复杂指令集(CISC),鲲鹏采用精简指令集(RISC).云服务器吧来详细说下华为云服务器CPU架构x86计算 ...

  6. Android 设备 arm 架构和 x86 架构的区别

    我们在使用 AndroidStudio 创建模拟器并且在选择 Android 系统版本的时候会碰到 一个选项,需要你选择是基于 x86 架构的还是基于 ARM 架构的. 如下图所示: 那么这 2 个有 ...

  7. ARM与X86 CPU架构区别

    CISC(复杂指令集计算机)和RISC(精简指令集计算机)是当前CPU的两种架构.它们的区别在于不同的CPU设计理念和方法.早期的CPU全部是CISC架构,它的设计目的是 CISC要用最少的机器语言指 ...

  8. ARM架构与x86架构的区别

    一.什么是ARM架构 ARM架构过去称作进阶精简指令集机器(AdvancedRISCMachine,更早称作:AcornRISCMachine),是一个32位精简指令集(RISC)处理器架构,其广泛地 ...

  9. arm架构和x86架构的区别

    什么叫ARM架构? ARM架构过去称作进阶精简指令集机器(AdvancedRISCMachine,更早称作:AcornRISCMachine),是一个32位精简指令集(RISC)处理器架构,其广泛地使 ...

最新文章

  1. R语言rpartb包树回归模型构建:基于乳腺癌(breast cancer)数据集
  2. 计算机视觉——自动识别车牌简介
  3. vm安装u盘linux,vmware 安装centos 插入u盘报错,大神请指导
  4. Django设计理念
  5. Jerry的反省:程序员不要轻易说出“这个功能技术上无法实现“
  6. java中,在一个有序数组中插入元素,使得数组保持有序排列
  7. win与linux渊源,微软与Linux从对立走向合作,WSL是如何诞生的
  8. JavaScript基本概念(下)
  9. 用WPF实现在ListView中的鼠标悬停Tooltip显示
  10. FFT分析的加窗和重叠
  11. 让VB6 IDE“认识”鼠标滚轮
  12. GitLab版本管理(转)
  13. ios swift5 设置PingFangSC字体
  14. Writeup for 0CTF2017 web
  15. python怎么打e,python e怎么表示
  16. 为什么uzi排到古手羽就秒_Uzi排到古手羽秒退,网友争相发表看法,直播间弹幕疑似给出答案...
  17. 使用阿里云的身份证实名认证接口
  18. 使用python制作时间戳转换工具
  19. 十年牧码,我的平凡之路
  20. 怎样学好英语?(多年英语学习经验总结)

热门文章

  1. 详解曼哈顿距离欧式距离切比雪夫距离
  2. 畅享8K高清,三星电视将搭载HDMI2.1接口
  3. 佳能EOS 450D 如何用液晶屏取景
  4. 基于误差状态的卡尔曼滤波ESKF
  5. 推荐可保存网页的social bookmarking工具Furl
  6. ubuntu下安装idea
  7. sliverlight入门指南
  8. 计算机英语中级职称题库,2016.2年中级职称计算机考试模拟题库及答案解析
  9. Java接口和抽象类的异同
  10. 三种前端实现VR全景看房的方案!