16位代码段与32位代码段的区别

自己动手写汇编总结得到的 1 先说对变量、标签的使用和命名 汇编中有几种对地址标签的分法,算是在概念上的分类,方便大家的理解。 分别为: LABEL变量名 LABEL: 意思是我指向的就是一大块的首地址,使用方法:LABEL_NAME:(注意后面要加冒号) 命名方式,尽量使用Java中的类 阅读详情
16位代码段与32位代码段的区别:
16位代码段与32位代码段的区别如下:
16位代码段最长只能为64k,段内偏移量为16位,默认的指令地址及操作地址为16位;
 32位代码段最长可以4G,段内偏移量为32位,默认的指令地址及操作地址为32位。
是否能够使用   eax,   edx   等寄存器与是否使用16位代码段及32位代码段无关。16位代码段、32位代码段都可以使用   eax,   edx   等寄存器。
如果要使用   eax,   edx   等32位寄存器,必须在代码中指定   .386,   .386p,   .486,   .486p   等指示符。
在DOS实模式下,只能使用16位代码段。
在MASM中,如果把   .386,   .386p,   .486,   .486p   等指示符放在   .model   之前,那么所有的段(数据段、代码段)默认为32位; 如果把   .386,   .386p,   .486,   .486p   等指示符放在   .model   之后,那么所有的段(数据段、代码段)默认为16位。

可以在定义段时,用   USE16   或   USE32   明确指定是使用16位的段(数据段、代码段)还是32位的段(数据段、代码段)。

部分参考资料:

http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/Chapter_8/CH08-3.html#HEADING3-42
首先要明确两个概念:寄存器的位数和段的位数是两个不同的概念。
寄存器的位数这个很容易理解~段的位数却有点麻烦。
我们知道,8086的CPU的寄存器是16位的,80386以上的CPU是32位的;这在汇编语言中的体现就是.386p等伪指令。
如果你使用了.386p伪指令,那么汇编的编译程序才会将你的指令编译为80386认识的机器指令,汇编语言默认的是使用.8086伪指令,很明显,这个时候汇编编译程序只是将你的汇编程序编译为8086认识的机器语言,这个时候当然也不可以用EAX等寄存器了,不然编译程序会出现错误提示。如果你要使用EAX等寄存器,就要这个之前加上.386或者之上的伪指令。
简单的来说,寄存器的位数是.386等伪指令决定的,和其他无关。
而段的位数却是由段定义说明中的use16和use32这两个中的其中一个决定的。其实,汇编编译程序在将USE16或者USE16编译成机器语言的时候,就是段描述符中的第6个字节的第6位(我们一般称为D位),如果是USE16,就将该为设为0,如果是USE32,就设置为1
16位的代码段和32位的代码段很明显的一个区别就是段大小的限制:一个是64k,一个是4G。细节上却有很多差别,比如对于一个Push   10h这样一个指令,如果段是16位的,sp=sp-2,如果段是32位
的,就是sp=sp-4,当然,如果如果你是PUSH   EAX的话,无论段是16位还是32位,都是SP=SP-4。
还有很多细节,这里就不多说了。
【从头开始写操作系统系列】一致代码段与非一致代码段 上几篇文章,我们一直在讨论的都是 GDT 相关的一些问题,现在我们知道在系统在从实模式向保护模式跳转时,GDT 是必须要准备的结构。在介绍这一跳转之前,这篇文章我们来介绍两个概念:一致代码段和非一致代码段。 首先,我们先来看几个问题: 一致代码段和非一致代码段是什么? 为什么要有一致代码段和非一致代码段? 系统提供怎样的机制来使用户程序访问内核数据? 程序如何在段与段之间跳转? 接下来,我们将讨论上 阅读详情

相关推荐

Datawhale~数据挖掘实践之序列问题处理~天池·资金流入流出预测-挑战Baseline~Day01~数据探索与分析

写在前面✍ 本系列笔记基于天池平台上“资金流入流出预测-挑战Baseline”学习赛,记录如何完整的打一次数据挖掘类比赛。同时,该比赛属于序列建模问题,希望学习完成这个任务,可以对序列问题的处理有一定的独立思考能力和实践操作能力,可以将所学理论,用编码的形式和实际的问题得到深入。 第一篇,EDA Content: 初步了解赛题及数据 1.1 任务 1.2 用户基本信息数据 1.3 用户申购赎回数据 1.4 收益率表 1.5 银行间拆借利率表 1.6 提交格式 1.7 评分指标 EDA 1 初.

小卜妞的博客 2358

64位编辑器,32位编辑器,16位编辑器中占用字节的比较

如下: 一、16位编译器: char :1个字节 char*(即指针变量): 2个字节 short int : 2个字节 int: 2个字节 unsigned int : 2个字节 float: 4个字节 double: 8个字节 long: 4个字节 long long: 8个字节 unsigned long: 4个字节 二、32位编译器 char :1个字节 char*: 4个字节 short int : 2个字节 int: 4个字节 unsigned int : 4个字节 float: 4个字节 d

modi000的博客 1861

双击文件夹弹窗“找不到应用程序”,但是右键点击打开可以

此电脑、回收站、c、d、f盘、控制面板、任意文件夹等都没有办法双击打开。 右键中包含“使用filemanager打开”,是由于FileManager卸载残留导致的。 懒人专用附件 下载解压上面附件,双击导入可以清理FileManager软件残留 参考: 双击此电脑出现找不到应用程序,但是右键点击可以-其他-优快云问答https://ask.youkuaiyun.com/questions/7631439 电脑上的文件夹双击都提示找不到应用程序,但是右击打开就能打开,该怎么解决? - 知乎 (z

webmasterqpwou的博客 1万+

mov sreg, r/m16 在16位和32位编程中的区别

  总结于《X86汇编语言 从实模式到保护模式》   仅适用于X86系列处理器 1. 两者的区别:   例:mov ds, ax   A.在指定16位编译模式下,产生的二进制码是 8E D8   B.在指定32位编译模式下(在某些老式的编译器中才会出现的),产生的二进制码是 66 8E D8 2. 影响:   A.加上0x66的前缀是为了反转默认的操作数大小。因为32位模式下...

aita3844的博客 361

一体化伺服电机与施耐德PLC TM241CEC24T在Canopen协议下的应用

一.硬件组成 软件组成:施耐德SoMachineV4.3二.○1.打开SoMachineV4.3,点击“新建项目”○2.点击“空白项目”○3.项目命名○4.点击“创建项目” 三. 点击“Logic Builder” 四. ○1.右击项目”PMM_CANOPEN_ST”添加设备○2.点击”LogicController”选择PLC型号TM241CEC24T/U○3.点击“添加设备” 五. ○1.右击CAN_1,添加设备○2.选择“CANopen Perfomance”○3.点击“添加设备”

m0_46512607的博客 2520

Facebook登录协议逆向实战:从加密参数到完整流程解析(附Python代码)

本文深入解析了Facebook登录协议的逆向工程实战,详细拆解了从关键加密参数(如`lgndim`、`encpass`)定位到完整登录流程的实现。文章提供了Python代码示例,重点阐述了加密逻辑的深度解析、加密函数的本地化实现,并解决了Crypto.js异步调用等常见问题,为研究Web安全和协议逆向的开发者提供了实用参考。

metal的博客 1311

关于数组的建立与访问(16位汇编)

title: 关于数组的建立与访问(16位汇编) data: 2021-04-01 11:17:30 author: Jamal photo: https://cdn.pixabay.com/photo/2021/03/22/19/42/beach-6115569_960_720.jpg Assembly_Language Review1(array) 16位汇编与32位汇编的区别 1. 宽度的区别 16位汇编是在dos环境下的汇编语言。 32位汇编是在windows或linux环境下的汇编语言。 .

ultramanWJM的博客 3995

六、Tool 工具系统:让大模型拥有“手脚“

我问你一个问题:大模型能不能告诉你"北京今天天气怎么样"?能——它能用非常流畅的中文回答你不能——它不知道这个答案因为它没有联网能力,也没有实时数据。它可能会自信地编一个"今天晴,25 度"给你——这就是幻觉。问题出在哪?大模型是一个"推理引擎",不是一个"执行引擎"。它知道天气 API 怎么调用,但不能真的发出 HTTP 请求。它知道 Python 代码怎么写,但不能真的运行代码。它知道数学公式,但做不了精确的大数计算。Tool 工具系统解决的,就是这个"最后一公里"问题。

牛肉胡辣汤 159

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

原文:https://www.cnblogs.com/landv/p/9006357.html 随笔 - 501文章 - 4评论 - 18 16位和32位的80X86汇编语言的区别 需要注意的是汇编不是一种语言,不同平台有不同的汇编语言对应,因为汇编和操作系统平台相关,所以汇编语言没有移植性。对于IA-32架构平台而言,选用的32位80386汇编语言,也...

weixin_42525096的博客 950

YOLOv8 改进:添加 LSK 注意力机制

通过添加 LSK 注意力机制,YOLOv8 能够更有效地捕捉特征图上的重要信息,提高检测性能,尤其是在复杂场景下展现出色的表现。这种方法不仅适用于资源受限的设备,还能在丰富多样的实际应用中提供强劲支持。

走向CTO的路上... 1221

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。

慕羽★的博客 2521

关于16位和32位代码段

转自: http://hi.baidu.com/phps/blog/item/48a2a83487ab1eb3d1a2d371.html 在调试一段保护模式代码,搞了大半天发现原来是在切换到保护模式时从16位直接JMP到32位的代码段中导致异常,在网上搜一这编文章,转过来存档! 关于16位和32位代码段 在对ix86编程时,有时候需要从实模式变换到保护模式(如在DOS

yph007595的专栏 779

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

i386汇编中16位代码段与32位代码段的区别

i386汇编中16位代码段与32位代码段的区别标签: asm以下为自己看书加实验的总结,如有错误还望指出。关于代码段的位数,可以从两个角度看: 1、汇编源代码 2、段描述符汇编源代码中的区别在写汇编源代码时,可以指定代码段为16位或者32位。因为16位与32位的机器码是不同的,比如push 1,立即数的长度应为4字节还是2字节?这种时候便会依据代码段长度,生成响应的指令。32位代码段立即数为4字

同一片天空下 855

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

16位代码段和32位代码段的区别

  关于16位和32位 :涉及到寄存器的位数和段的位数。寄存器的位数就是:8086下CPU的寄存器位数是16位的;80386下CPU的寄存器位数是32位的。使用.8086伪指令将汇编语言编译成8086的指令;(默认)使用.386p伪指令将汇编语言编译成80386的指令。所以要使用32位的寄存器时,使用.386p伪指令。 而段的位数却是由段定义说明中的use16和use3

coolmousewife的专栏 2699

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

16位和32位代码段的区别

转自:http://hi.baidu.com/guanxinsui/blog/item/bf9cc5abe3a0d81b4b36d6b5.html 16位和32位代码段的区别 2011-01-09 23:20 16位和32位代码段的区别 在对ix86编程时,有时候需要从实模式变换到保护模式(如在DOS时代要访问扩展内存,或者编写引导代码,当然,如果在32位的操作系统下面编程,是碰不到这

kendyhj9999的专栏 1715

16位和32位代码段

在对ix86编程时,有时候需要从实模式变换到保护模式(如在DOS时代要访问扩展内存,或者编写引导代码,当然,如果在32位的操作系统下面编程,是碰不到这个问题的),总是要涉及16位代码段和32位代码之间的跳转问题。因此有必要对他们进行区分。 16位代码段和32位代码段的主要区别是,在16位代码段中,跳转目标的偏移用16位表示,而在32位代码段中,跳转目标的偏移用32位表示。 在实模式下,CPU总

nodeathphoenix的专栏 5666

《自己动手写操作系统》第三章pmtest2源码解析

摘要:本节,通过代码解析,帮你解决如下问题:保护模式和实模式下面的偏移量有什么不同?保护膜是和实模式下段基地址是一个意思吗?长跳转指令jmp 0:entry为什么能够在一个代码段中更改另一个代码段的代码? 一、总体思路剖析: pmtest2,其实实现的是从实模式到保护模式,然后从保护模式回到实模式,最后回归到dos。其中,一开始就进入了实模式,然后在实模式下初始化段描述符,处理GDT等

河西无名式 2659

ARM指令集与Thumb指令集--区别关联--汇编指令 BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式

BX LR ; 跳转回LR地址处,既可以是ARM模式也可以是Thumb模式 A 一、现在先区分下ARM指令集与Thumb指令集 Thumb 指令可以看作是 ARM 指令压缩形式的子集,是针对代码密度的问题而提出的,它具有 16 位的代码密度但是它不如ARM指令的效率高 .Thumb 不是一个完整的体系结构,不能指望处理只执行Thumb 指令而不支持 ARM 指...

uunubt的专栏 2971

汇编中变量标签说明总结

1 先说对变量、标签的使用和命名 汇编中有几种对地址标签的分法,算是在概念上的分类,方便大家的理解。 分别为: LABEL变量名 LABEL: 意思是我指向的就是一大块的首地址,使用方法:LABEL_NAME:(注意后面要加冒号) 命名方式,尽量使用Java中的类似于包的命名方式,比如LABEL_SEG_CODE16,LABEL_SEG_CODE32,LABEL_DESC_STAC

root19881111的专栏 6823

nasm概念 : 16bits 32bits 代码

nasm使用简易教程 https://www.cnblogs.com/wufu/articles/5077359.html nasm 语法里面 bits 16和bits 32的深层意思是什么啊? https://bbs.youkuaiyun.com/topics/300053651 一般在实模式下用16位,保护模式用32位 有些时候一个nasm文件里,同时会处理16或者32位,例如在写实模式跳转到保护模式,在初始化保护模式中最后一句跳转指令所跳到的标号地址一定再[bits32]下面 二: nasm概..

happylzs2008的专栏 2134

在Win10下利用vscode调试32位、16位汇编方法(masm-code + debugger)

在Win10下利用vscode调试32位、16位汇编方法(masm-code + debugger) 这学期学汇编,老师推荐的工具是Masm for Windows。不过这软件又丑又老有些功能还要钱。一直在找改进方法,各种古老的ide也试过,xp虚拟机也试过,都不尽人意。偶然看到有人推荐vscode的masm-code插件,可以一键编译运行汇编程序,用起来确实可以,但是用的dosbox比较老,看不了32位寄存器。后来发现可以把它和一个叫做debugger的工具整合起来直接调试32位汇编程序,用起来就很舒服了

weixin_49911104的博客 3187

DSP中的C语言(一)——int16、Uint16、float32等定义的用法和区别

1、int16、Uint16、float32等数据类型 以一个代码段进行说明,这个是DSP28335对与int16等的一个定义。 #ifndef DSP28_DATA_TYPES #define DSP28_DATA_TYPES typedef int int16; typedef long int32; typedef long long int64; typedef unsigned int Uint16; t

sy243772901的博客 2万+

Bochs源码分析 - 16:conforming与non-conforming代码段区别以及Bochs代码的实现

前言 之前在学习x86架构时,在代码段中有一个点让我感到困惑,就是type field 11位。这个之前一直似懂非懂,说不理解吧知道这么个玩意,说理解吧又不知道其具体干嘛,感觉是方便系统调用加快速度,尤其当遇到权限问题,自己就糊里糊涂,这篇文章让自己彻底分析明白这个问题。 Intel手册说明 下面来引用intel手册中对这问题的描述(卷三 3.4.5.1节) Code segments can be either conforming or no...

WriteAnything_的博客 604

一致代码段与非一致代码段

1.当前特权CPL(Current Privilege Level) CPL是当前进程的权限级别(Current Privilege Level),是当前正在执行的代码所在的段的特权级,存在于cs寄存器的低两位。2.描述符特权级DPL(Descriptor Privilege Level)  DPL存储在段描述符中,规定访问该段的权限级别(Descriptor Privilege Level),每个段的DPL固定。3.请求特权级RPL(Request Privilege Level)RPL保存在选择子的最低

melong100的专栏 1643
上一篇: code seg + offset
下一篇: notes for the computer networks architechture
world_hello_100
博客等级 码龄16年 42粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值