3.2 表达式的类别与类型
在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 表达式的类别与类型相关推荐
- 【Debug】— C++ 表达式必须包含类类型
错误一般发生在使用.进行访问时,原因可能在于: 你以为你定义了一个类对象,其实你是声明了一个函数,在编译器看来: 对类对象指针采用.的方式访问其成员变量: 也包括基本类型变量,错误地使用. int a ...
- 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 ...
- “表达式必须包含 bool 类型(或可转换为 bool)”
在 boost::variant的原理及基本用法 ,我们知道想要获取variant 类型变量的内容,主要有apply_visitor和get<T>两种方法,而get<T>的一个 ...
- 【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 其他 ...
- DataBinding初探 数据绑定的用法 ,import 集合类型,绑定的表达式,访问集合类型2...
数据绑定的用法 import语法 <data> <import type="android.view.view"/> </data> 如果类名相 ...
- Kotlin学习笔记 第二章 类与对象 第十二 十三节 对象表达式与对象声明 类型别名
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 中文网站 https://www.kotlincn.net/docs/reference/p ...
- EL表达式中比较String类型数字的大小
当后台向前端页面传入String类型数字,并需要在EL表达式对此数据进行比较大小,如下 <c:when test="${(!empty ecgParamConfig.minAverag ...
- Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
一.基本语法 Kotlin的很多概念跟JAVA是有类似的,所以我应该不会像我的JAVA之旅一样那么的详细,但是不用担心,你会看的很明白的,我也是根据官方的文档来学习的 我们在IDEA中创建一个项目Ko ...
- 将整数k转换成实数python表达式_在混合类型表达式中python自动转换intlongfloat例如.ppt...
在混合类型表达式中python自动转换intlongfloat例如 空位:格式指示符,描述了填入的值的输出形式. %. 类型字符: 宽度:用多少位置显示数值. 省略或指定为0:根据值的实际长度显示. ...
最新文章
- 模糊选择器 js_5个很棒的 React.js 库,值得你亲手试试!
- JS-鼠标跟随块(一个小圆点跟着鼠标跑)
- RHCSA 系列(六): 使用 Parted 和 SSM 来配置和加密系统存储
- 不定积分24个基本公式_高分攻略丨语文阅读理解的24个万能答题公式
- 025 资源的隔离与配置
- 关于Tomcat端口8080占用问题(解决方法)
- Gulp简介、gulp基本使用步骤、gulp-cli工具、gulpfile.js文件、gulp插件
- golang CI: Use result of type assertion to simplify cases SCC-S1034
- 工作流Activiti5.13学习笔记(一)
- leetcode907.SumofSubarrayMinimums
- 修改notebook的默认路径_更改jupyter notebook默认存储路径
- 使用Controller.UpdateModel方法来更新ViewModel
- cc2530设计性实验代码三
- [原]VC被控制时关闭极域电子教室、破解联想硬盘保护系统密码(上)
- 中级计算机平面设计考试题,平面设计师(中级)技能试题答案
- linux中find查找文件和查找文件内容
- 英语入门学习笔记2:英语语法知识树
- ae渲染文件服务器,在 After Effects 中自动执行渲染和网络渲染
- Vue.js 作者尤雨溪:直接学 Vue 3 吧
- Java面试题-day25 数据库之事务
热门文章
- php常见的几种排序以及二分法查找
- 基于VLC的播放器开发
- wxWidgets搜索事件处理函数顺序
- 自定义Dialog(一)
- mysql万能密钥,mysql错误:指定的密钥太长;最大密钥长度为767字节
- java基础入门课后习题_《Java基础入门》课后习题及答案
- 网闸与防火墙的区别_网关和网闸、防火墙的区别?
- 高德地图只显示一个省_浅谈当下各种导航软件:高德地图、百度地图、腾讯地图...
- python编程程序设计_程序设计入门—Python
- win7如何取消计算机管理员权限,win7如何删除需要管理员权限的文件夹