16位和32位的80X86汇编语言的区别

  • 需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应,因为汇编和操作系统平台相关,所以汇编语言没有移植性。对于IA-32架构平台而言,选用的32位80386汇编语言,也就只说讨论的操作系统平台是32位的,可以执行文件的格式也是32位而不是64位或16位的。
  • 实际分析中要知道研究的程序是运行在什么平台上,以选择相应的汇编语言,对应IA-32架构而言,IA-16架构的汇编语言原理其实和IA-32的汇编语言一样,学习过16位的80X86汇编语言的人只需要花一点时间就可以转到32位80386汇编语言上。

16位操作系统与32位操作系统的80x86汇编语言主要区别如下:

  1. 16操作系统中的中断调用相当于32位操作系统中的API调用。16位操作系统的中段地址和偏移地址在32位中消失了,在32位操作系统中统一采用平坦的内存地址模式寻址。
  2. 16位操作系统中的程序运行在RING0级,也就是说普通程序和操作系统程序运行在同一个级别并且拥有最高权限,而32位操作系统中的程序一般只拥有GING3级别运行权限,程序的所有操作都受到操作系统控制,若程序要获得RING0操作特权只能通过驱动程序实现。
  3. 16位操作系统的可执行文件格式和32位操作系统的可执行文件格式不同,在32位的Windows操作系统中,可执行文件的格式加PE格式,32位的Windows操作系统运行在CPU的保护之上,而16位的系统则运行在CPU的实模式上。

什么是IA-32?

IA-32(Intel Architecture),英特尔体系架构,英特尔从486开始采用,也就是X86-32架构,在同一时间内可以处理32位进制数据。CPU的工作宽度是32位。其它公司在软硬件方面都兼容此架构,也列属于IA-32架构。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android群英传

单应用的多进程架构

541
来自专栏用户2442861的专栏

高性能网络编程5--IO复用与并发编程

对于服务器的并发处理能力,我们需要的是:每一毫秒服务器都能及时处理这一毫秒内收到的数百个不同TCP连接上的报文,与此同时,可能服务器上还有数以十万计的最近几秒...

471
来自专栏Java编程技术

Dubbo剖析-线程模型

Dubbo默认的底层网络通讯是使用Netty来做的,在服务提供方NettyServer使用两级线程池,其中EventLoopGroup(boss)主要用来接受客...

752
来自专栏xcywt

程序员需要知道的十个操作系统的概念

说明:我之前在网上看到这篇文章觉得非常好,于是把它翻译了下来。当然很多地方翻译的很渣,见笑了。温馨提示,文章有点长。

461
来自专栏汪伟的专栏

性能优化的正确方向

性能优化并不是一个孤立的课题,除了响应时间的考虑,我们往往还需要综合功能完整性、安全性等等方面的问题。

5740
来自专栏非典型技术宅

Swift多线程:使用Thread进行多线程间通讯,协调子线程任务1. Thread的三种建立方式2. Thread的基本使用3. 使用NSCondition实现线程间通讯4. pthread

922
来自专栏ImportSource

并发编程-到处都是线程!

即使是你在自己的program中从来没有显式的创建线程,框架也依然会代表你偷偷的创建一些线程。所以呢,被这些线程调用的代码也必须是线程安全的。这样的设计和实现给...

3207
来自专栏IT技术精选文摘

从CPU爆表问题排查谈Java性能监测之道

背景:Java线上服务运行一周后,某个周六晚上CPU使用率突然持续99%,Java进程处于假死状态,不响应请求。秉着先恢复服务再排查问题的原则,在我连接VPN采...

572
来自专栏PHP技术

PHP并发IO编程之路

原文出处: 韩天峰(@韩天峰-Rango) 并 发IO问题一直是后端编程中的技术挑战,从最早的同步阻塞Fork进程,到多进程/多线程,到现在的异步IO、协程。...

3567
来自专栏landv

16位和32位的80X86汇编语言的区别

1112

扫描关注云+社区