PTR 运算符可以用来重写一个已经被声明过的操作数的大小类型。只要试图用不同于汇编器设定的大小属性来访问操作数,那么这个运算符就是必需的。

例如,假设想要将一个双字变量 myDouble 的低 16 位传送给 AXO 由于操作数大小不匹配,因此,汇编器不会允许这种操作:

  .data  myDouble DWORD 12345678h  .code  mov ax,myDouble

但是,使用 WORD PTR 运算符就能将低位字(5678h)送入 AX:

  mov ax,WORD PTR myDouble

为什么送入 AX 的不是 1234h ?因为,x86 处理器采用的是小端存储格式,即低位字节存放于变量的起始地址。如下图所示,用三种方式表示 myDouble 的内存布局:第一列是一个双字,第二列是两个字(5678h、1234h),第三列是四个字节(78h、56h、34h、12h)。

不论该变量是如何定义的,都可以用三种方法中的任何一种来访问内存。比如,如果 myDouble 的偏移量为 0000,则以这个偏移量为首地址存放的 16 位值是 5678h。同时也可以检索到 1234h,其字地址为 myDouble+2,指令如下:

  mov ax,WORD PTR [myDouble+2]     ; 1234h

同样,用 BYTE PTR 运算符能够把 myDouble 的单个字节传送到 BL:

  mov b1,BYTE PTR myDouble       ; 78h

注意,PTR 必须与一个标准汇编数据类型一起使用,这些类型包括:BYTE、SEYTE、WORD、SWORD、DWORD、SDWORD、FWORD、QWORD 或 TBYTE。

将较小的值送入较大的目的操作数

程序可能需要将两个较小的值送入一个较大的目的操作数。如下例所示,第一个字复制到 EAX 的低半部分,第二个字复制到高半部分。而 DWORD PTR 运算符能实现这种操作:

  .data  wordList WORD 5678h,1234h  .code  mov eax, DWORD PTR wordList      ; EAX = 12345

汇编语言过程
5.1 汇编语言堆栈简介
5.2 汇编语言运行时堆栈
5.3 PUSH和POP指令
5.4 PROC和ENDP伪指令
5.5 CALL和RET指令
5.6 过程调用嵌套
5.7 示例:整数数组求和
5.8 USES运算符
5.9 链接库简介
5.10 Irvine32链接库
5.11 Irvine32链接库过程详细说明
5.12 Irvine64链接库

汇编语言PTR运算符:重写操作数的大小类型相关推荐

  1. Win-MASM64汇编语言-PTR运算符

    PRT运算符:用于源操作数大,但是目标操作数小的这种情况 注意:该关键字是微软汇编MASM才有的,NASM汇编就没有这个PRT,其他汇编我不清楚 汇编中,一个指令如果多个操作数,那么这多个操作数必须要 ...

  2. 汇编语言OFFSET运算符:返回数据标号的偏移量

    OFFSET 运算符返回数据标号的偏移量.这个偏移量按字节计算,表示的是该数据标号距离数据段起始地址的距离.如下图所示为数据段内名为 myByte 的变量. OFFSET 示例 在下面的例子中,将用到 ...

  3. 使用PTR运算符的情况

    一.双操作数指令中(如MOV,ADD,SUB等指令) 源操作数为立即数,目标操作数为直接寻址的存储器操作数,当两者类型属性不一致时,存储器操作数必须用PTR临时修改其属性,使源操作数和目标操作数类型一 ...

  4. 根据FileUpload控件名获取上传文件(大小)类型

    /// <summary>     /// 根据FileUpload控件名获取上传文件(大小)类型     /// </summary>     /// <param n ...

  5. VC 2013 openssl error C2065: “name”: 未声明的标识符 error C2296: “*”: 非法,左操作数包含“LPCSTR”类型

    测试程序1: #include "stdafx.h" #include <openssl/x509.h> #include <Windows.h> int ...

  6. error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型

    用VS2015编译从GitHub上下载的一段代码,出现如下的错误提示: error C4146: 一元负运算符应用于无符号类型,结果仍为无符号类型 warning C4244: "=&quo ...

  7. c语言12之编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除。

    题目: 设计一个简单的计算器程序,要求根据用户从键盘输入的表达式: 操作数1 运算符op 操作数2 计算表达式的值,指定的运算符为加减乘除. 源代码: #include<stdio.h> ...

  8. 【汇编语言】理解8086CPU中,不同类型的寄存器和汇编指令规则的联系(会继续更新)

    0 前言 你是否因为汇编指令繁杂的规则而苦恼呢?作者本人也很烦,因为往往教材中只告诉我们规则,却不告诉我们为什么,没有原因就直接记忆,负担太大,后期灵活运用也增添阻力,因此,我经过自己的思考去为你解释 ...

  9. new,is和as运算符解析及运行时类型,对象,线程堆栈,托管堆之间的联系

    CLR要求对象必须使用new运算符创建,在使用new运算符创建一个对象时具体都做了些什么呢? 1.计算所有定义的实例字段,所有的基类型包括System.Object需要分配的字节数. 每一个堆上的对象 ...

最新文章

  1. SQLite - 下载安装与使用(Command Line Shell For SQLite)
  2. php math函数
  3. jquery的ajax()函数传值中文乱码解决方法介绍
  4. 015PHP文件处理——文件处理flock 文件锁定 pathinfo realpath tmpfile tempname
  5. 2017年新年问候-组内
  6. 利用ffmpeg转换mp4文件
  7. 【Android开发】XML文件解析
  8. 深度学习时代的目标检测算法综述
  9. mysql 查询某一主键在那些表中中被设置为外键了
  10. 无线数传模块SI4463、SI4438、SI4432方案无线通信比对
  11. Android Studio Gradle两种更新方式
  12. Weblogic12c T3 协议安全漏洞分析【CVE-2020-14645 CVE-2020-2883 CVE-2020-14645】
  13. windows 内部预览版与迅雷极速版不配合
  14. Oracle中动态SQL详解
  15. centos 7 yum php swoole_自动化部署技能—搭建企业级YUM仓库
  16. 基于java springboot活动报名微信小程序源码(毕设)
  17. java代码实现简单的向企业微信发送信息
  18. 利用灰色关联法确定指标权重
  19. 苹果电池显示维修_iFixit拆解苹果iPhone 12/Pro:显示屏和电池可互换
  20. 信息学奥赛一本通高手训练1682:最小字典序

热门文章

  1. 工作中常用的正则表达式
  2. JTS基本概念和使用
  3. arcgis server账号需要设置地图缓存的访问权限
  4. 预防鼻炎以及空气污染对策
  5. ArcGIS9.3全套下载地址
  6. 解决import keras后出现的一系列问题
  7. 使用类前置声明的好处-结合Qt 4一个主窗口实例讲解
  8. tensorflow安装教程 win10环境
  9. 科大星云诗社动态20210314
  10. 火爆 GitHub 的《机器学习 100 天》,有人把它翻译成了中文版!