在BASM的语句中,每一个表达式都必须能够在编译器中计算出准确的值或者寻址地址。如果不能满足这个条件,语句不会被编译通过。事实上,对于指令系统来说,每一个表达式都最终对应于一个确定的操作数。
  因此,表达式的类别(Expresion classes),按表达式的计算结果可分成三类:寄存器、立即数和内存引用(存储器)。
  与内存引用相关的表达式,会涉及到存储器寻址模式的问题,请查阅相关资料。下一小节会简要讲述在BASM中访问Delphi所定义的变量与常量,但不涉及寻址模式。
  在BASM中,表达式的类型(Expression types)是一个长度值,它是指表达式值占用空间的字节数,即值的大小。这与Delphi中SizeOf()函数含义是一样的。但BASM中用关键字TYPE来返回表达式的类型(大小)。
  如下例:

type
TArr=array [0..10] of char;//SizeOf(TArr)=11
varArr: TArr
asmmov eax,TYPE Arrmov eax,TYPE TArrmov eax,TYPE Arr[2]
end;

  上面的三行汇编语句都会向eax送入值11。第三行看起来是要取Arr数组元素的长度,但实际上只能取到数组的长度。
  较为复杂的表达式,其类型由第一个操作数的类型来决定。因此下面这个语句送入eax的值仍然为Arr的类型值11:

mov eax,TYPE (Arr +2)

  这里的括号不能理解成函数,而是用来改变运算优先级的。
  同样的道理,在BASM中,以下两条语句面对的命运是不同的:

mov eax,2+Arr
mov eax,Arr +2

  第一代码行会被BASM理解成Arr的地址值+2。而第二行代码右边表达式的长度为11,不能送入寄存器eax,因而根本不会被编译通过。

转载于:https://www.cnblogs.com/YiShen/p/9881043.html

3.2 表达式的类别与类型相关推荐

  1. 【Debug】— C++ 表达式必须包含类类型

    错误一般发生在使用.进行访问时,原因可能在于: 你以为你定义了一个类对象,其实你是声明了一个函数,在编译器看来: 对类对象指针采用.的方式访问其成员变量: 也包括基本类型变量,错误地使用. int a ...

  2. ssis 表达式任务_在SSIS中执行SQL任务:SqlStatementSource表达式与可变源类型

    ssis 表达式任务 In this article, I will give an overview of Execute SQL Task in SSIS and I will try to il ...

  3. “表达式必须包含 bool 类型(或可转换为 bool)”

    在 boost::variant的原理及基本用法 ,我们知道想要获取variant 类型变量的内容,主要有apply_visitor和get<T>两种方法,而get<T>的一个 ...

  4. 【Python】基础语法 1(常量与表达式、变量和类型、注释、输入输出、运算符)

    文章目录 1. 常量与表达式 2. 变量和类型 2.1 变量是什么 2.2 变量的语法 2.3 变量的类型 2.3.1整数 2.3.2 浮点数 2.3.3 字符串 2.3.4 布尔 2.3.5 其他 ...

  5. DataBinding初探 数据绑定的用法 ,import 集合类型,绑定的表达式,访问集合类型2...

    数据绑定的用法 import语法 <data> <import type="android.view.view"/> </data> 如果类名相 ...

  6. Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...

  7. EL表达式中比较String类型数字的大小

    当后台向前端页面传入String类型数字,并需要在EL表达式对此数据进行比较大小,如下 <c:when test="${(!empty ecgParamConfig.minAverag ...

  8. Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合

    一.基本语法 Kotlin的很多概念跟JAVA是有类似的,所以我应该不会像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的 我们在IDEA中创建一个项目Ko ...

  9. 将整数k转换成实数python表达式_在混合类型表达式中python自动转换intlongfloat例如.ppt...

    在混合类型表达式中python自动转换intlongfloat例如 空位:格式指示符,描述了填入的值的输出形式. %. 类型字符: 宽度:用多少位置显示数值. 省略或指定为0:根据值的实际长度显示. ...

最新文章

  1. 模糊选择器 js_5个很棒的 React.js 库,值得你亲手试试!
  2. JS-鼠标跟随块(一个小圆点跟着鼠标跑)
  3. RHCSA 系列(六): 使用 Parted 和 SSM 来配置和加密系统存储
  4. 不定积分24个基本公式_高分攻略丨语文阅读理解的24个万能答题公式
  5. 025 资源的隔离与配置
  6. 关于Tomcat端口8080占用问题(解决方法)
  7. Gulp简介、gulp基本使用步骤、gulp-cli工具、gulpfile.js文件、gulp插件
  8. golang CI: Use result of type assertion to simplify cases SCC-S1034
  9. 工作流Activiti5.13学习笔记(一)
  10. leetcode907.SumofSubarrayMinimums
  11. 修改notebook的默认路径_更改jupyter notebook默认存储路径
  12. 使用Controller.UpdateModel方法来更新ViewModel
  13. cc2530设计性实验代码三
  14. [原]VC被控制时关闭极域电子教室、破解联想硬盘保护系统密码(上)
  15. 中级计算机平面设计考试题,平面设计师(中级)技能试题答案
  16. linux中find查找文件和查找文件内容
  17. 英语入门学习笔记2:英语语法知识树
  18. ae渲染文件服务器,在 After Effects 中自动执行渲染和网络渲染
  19. Vue.js 作者尤雨溪:直接学 Vue 3 吧
  20. Java面试题-day25 数据库之事务

热门文章

  1. php常见的几种排序以及二分法查找
  2. 基于VLC的播放器开发
  3. wxWidgets搜索事件处理函数顺序
  4. 自定义Dialog(一)
  5. mysql万能密钥,mysql错误:指定的密钥太长;最大密钥长度为767字节
  6. java基础入门课后习题_《Java基础入门》课后习题及答案
  7. 网闸与防火墙的区别_网关和网闸、防火墙的区别?
  8. 高德地图只显示一个省_浅谈当下各种导航软件:高德地图、百度地图、腾讯地图...
  9. python编程程序设计_程序设计入门—Python
  10. win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹