汇编语言中的CPU的16位,32位和当今操作系统所指的32位,64位概念有点模湖,请大侠们赐教.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编语言中的CPU的16位,32位和当今操作系统所指的32位,64位概念有点模湖,请大侠们赐教.相关的知识,希望对你有一定的参考价值。

最近在自学汇编语言,这门语言围绕8086的CPU(8位或16位寄存器)在编程。问题来了:
1.汇编语言中所指CPU寄存器的8位,16位,32位跟目前32位操作系统和64位操作系统中的32位就是同一东西(CPU寄存器长度),还是另有其它涵义?

2.延伸第1个问题,比如AH,AX,EAX分别是8位,16位,32位的寄存器名,那么64位操作系统所指的64位又是用啥寄存器名?本人用的是win7 64位的操作系统。想用用debug命令了解一下CPU寄存器使用情况,结果这命令在win7下居然没有了。

3.cpu从之前的8086/186/286/386...现在到底到几86了?CPU寄存器发展到32位EAX的后,有没有再弄个EEAX(此名称只是假设) 64位的出来?

操作系统上的位宽与CPU所指的位宽不是同一概念。CPU的位宽指的是寄存器最大位数。如果64位CPU最大的寄存器是64bits。而寄存器位宽就是所指的寄存器的位数。如果8位寄存器ah,ax。

操作系统上的64位操作系统指的是混合调用指令,调用了64位的指令集。并不表示每一条指令都是64位的。在CPU中有不同的指令集,有些是在64位下操作的指令集,而调用这些指令集的系统就是原生64位。相反调用32位指令集的则是32位系统。所以它们不同于CPU的位宽,但是却有联系。64位指令集是那么调用CPU64位寄存大的指令的集合,根据CPU周围译码电路的不同,还有分IA-64等不同的指令集合。你可以认为64位系统中有部分指令调用了64位寄存器。

事实上在64位环境下,调用32位指令与32位上的调用并不相同!

也有有关理解为64系统指的是采用了64位寻址方式。事实上32位系统与64位系统的确有不同的寻址方式,但是64位操作系统与全新的寻址方式,是因为64位采用不同的方式,而不是不同的寻址方式而造就是64位,再者说寻址能力不全是因为寄存器,而是因为CPU总线宽度,比如在32位机中,CPU的总线宽度为20位,而64位机各框架下CPU的总线宽度并不相同。

32位EAX扩展后使用的是RAX为标记寄器的。在window7 32位下是存在debug命令的,而这个命令却在64bits下取消了!这就是主什么有些人会说win7下有,而另一些人说没有的原因!既然是没有,那么就必须使用外挂的命令,但外挂的命令是否支持64位,这个要看你使用的具体的外挂程序。

80486推后,AMD推出了一个新折产品,而intel急于推出80586与之抗衡,不幸的是AMD挑起了官司,intel的命名有误导标准之嫌疑——严禁intel再使用数字命名CPU,而正准备发行的intel 80586遇到了大麻烦,为了不改变消费者对其的固有支持,注册了pentium,并根据音译,中文商标为奔腾,其实在拉丁语系中,其意思就是数字5,用来标识自己的586。事实使用数注册的另一个好处就是,在不同的读言系中,都可以做到商标的统一(阿位伯数字是印度人发明,阿位伯向全球传递,任何语言都没有组数字通用,几乎任何语言中都存在阿拉伯数字的),所以在586上市前输掉官司的intel只有使用了Pentium,这也是合理的。

奔腾经历了奔腾,多能奔腾,高能奔腾,麻点奔腾之后,开始使用了Pentium-II,一直到Pentium IV,同期发行赛场之后,转入了Pentium D,Core等多种不同架框的686,而前几代的奔腾与赛扬都是586的。而现在的Pentium D,pEntium E等都是686!

事实上64位上的RAX名称只是汇编语言中的一个助记标,它与寄存器的关系非常小的,至于叫RAX还是你想叫EEAX,那只是一个名字而已,主要是为了人们交流而已,只不过汇编语言也采用了这种人们交流的名称。不要以为计算机会知道它自己一个寄存器叫RAX,它只认识二进制编码,所以在计算使用时0001对应了AX,EAX,RAX,当出现这个指令时,它就知道你要调用的是编码为0001的寄存器了,如果是16位操作数,它就用AX,如果是32位操作数,它就用EAX,如果是64位,用的是全寄存器RAX,换句话来说AH,AL,AX,EAX,RAX指出同一寄存器的不同位长而已。

64位编程时,介绍一个网站:http://www.mouseos.com/x64/extend64.html,看一下能更加深你的理解。
参考技术A 补充楼上的,WIN7的debug还是存在的,但调试的对象是虚拟机的CPU 参考技术B 1,就是一个东西

2、64位寄存器RAX,win7的cmd没有debug命令,可以下个windbg,VS,C::B等IDE也提供调试功能,用Cygwin装GDB来调试也可以

3、从命名来说,586开始就是用奔腾命名了,从指令集等级来说,奔腾是i586等级,奔腾2以后全是是i686等级,x86属于IA-32体系,独立于x86的是IA-64体系,代表是安腾系列CPU。当然CPU不仅仅是IA-32,IA64体系的,还有其他RISC架构的CPU,ARM啊,PowerPC什么的
参考技术C 80286 8086 16位16

8088 80386准32位的16位

主流PC的CPU是64个,但也有32操作系统和64位32。换句话说,可以运行32位操作系统的64位CPU可以运行64位。

如果您使用的是Windows XP 32位,16位和32位程序,你可以写。

如果您使用的是Windows 7,那么你只能写32位,16位,不再支持。

80x86的汇编语言?是8086的16位汇编和80386 32。您可以搜索IA32,IA16,IA64

汇编语言风格,AT&T(类似Unix)和英特尔两种格式。

如果你想了解64编译,我建议你看在英特尔IA64开发商的指南

计算机基础小结

计算机之编程

什么是编程语言

编程语言是人与计算机交流的介质

什么是编程

编程就是使用编程语言编写一个个文件

为什么要编程

为了奴隶计算机,解放劳动力,帮人类完成一个个具体的任务

计算机组成原理

计算机五大组成

CPU

控制器

控制硬件

运算器

进行逻辑运算+算术运算

内存

临时存储数据的硬件

  • 优点(相比较于外存):速度快
  • 缺点(相比较于外存):临时存储/断电即消失

外存

永久存储数据的硬件

  • 优点(相比较于内存):永久存储
  • 缺点(相比较于内存):速度慢

输入设备

输入信息的硬件,如键盘/鼠标/u盘

输出设备

输出信息的硬件,如显示器/打印机/u盘

I/O设备

即可输入信息,又可以输出信息的硬件,称为I/O设备

32位和64位

32位

一次性能读取32个二进制位的操作系统

64位

一次性能读取64个二进制位的操作系统

多核CPU

可以同时完成多件事的CPU,如4核CPU则一个大的CPU集成了4个小的CPU

硬盘工作原理

机械硬盘工作原理

  • 机械手臂:寻找数据
  • 磁道:存储数据
  • 扇区:划分磁道
  • 平均寻道时间:由于工业水平的限制,为5ms
  • 平均延迟时间:以7200r/min的硬盘为例,为4.15ms

\[ 7200(r/min) / 60 = 120(r/s) \1/120(r/s) = 0.0083s = 8.3ms \8.3 / 2 = 4.15ms \\]

  • 平均寻找数据时间:5+4.15=9.15ms

固态硬盘工作原理

  • 基于算法和电存储的外存

计算机操作系统

文件是什么?

操作系统提供的一个虚拟的单位

应用程序是什么?

应用程序其实就是一堆文件,用来完成具体的某个任务

操作系统能干什么?

接受应用程序/人的外部指令,然后控制硬件

计算机三大组成?

应用程序

应用程序其实就是一堆文件,用来完成具体的某个任务,与人/操作系统交互

操作系统

接受应用程序/人的外部指令,然后控制硬件,与人/应用程序/硬件交互

硬件

最终的目的是用来存储数据,与操作系统交互

应用程序的启动和操作系统的启动?

应用程序的启动

  1. 双击qq(发送指令给操作系统)
  2. 操作系统接收指令,将指令转化成0和1发送给CPU
  3. CPU接收指令,发送给内存
  4. 内存从硬盘中取出qq的程序,执行,打开qq

操作系统的启动

  1. 按下开机键(启动一个临时操作系统)
  2. 临时操作系统唤醒真正的操作系统

编程语言分类

机器语言

  • 优点(汇编语言):执行效率高
  • 缺点(汇编语言):开发效率低

汇编语言

  • 优点(机器语言):开发效率高
  • 缺点(机器语言):执行效率低

高级语言

解释型语言

类似于同声传译,写一句翻译一句

  • 优点(编译型语言):开发效率高
  • 缺点(编译型语言):执行效率低

编译型语言

类似于谷歌翻译,写完所有的代码,一次性编译后得到结果,并且结果可以保存,无法得到及时的报错反馈

  • 优点(解释型语言):执行效率高
  • 缺点(解释型语言):开发效率低

网络的瓶颈效应

由于网络传输的数据可能为10ms,而Python的代码运行时间为1ms,机器语言的代码运行时间为0.001ms,在你上一段数据运输成功之前,无论你的代码运行时间是1ms,还是0.0000001ms,还是9ms,本质上没啥区别,这就是互联网中的网络的瓶颈效应。

以上是关于汇编语言中的CPU的16位,32位和当今操作系统所指的32位,64位概念有点模湖,请大侠们赐教.的主要内容,如果未能解决你的问题,请参考以下文章

汇编语言寄存器都叫啥?

第一阶段 复习

汇编语言--CPU资源和存储器

计算机基础小结

32位和64位系统区别及int字节数

32位和64位系统区别及int字节数