语句的四个部分要用分隔符分开
常数是指由10进制16进制和2进制形式表达的数值
默认不加字母的是十进制数,并且16进制若以字母开头要加上前导0(与寄存器分别开来)
用英文缩略号(类似中文单引号‘’ )或双引号括起来的单个或多个字符
如果字符串中包含单引号本身则用双引号括起来反之用单引号
masm中有‘enq’ 和=为常量定义符号名
但是‘enq’不能重复定义符号名但是=可以
及‘enq’每个符号名只能定义一次常量类似C语言const
变量类型
1 | ;定义字符串 |
16位32位变量的定义类似
操作数作为机器代码的一部分跟随处理器的取址操作进入指令寄存器。
1 | mov eax,33221100h ;将33221100立即数存储在eax寄存器之中 |
立即数寻址只用于源操作数
指令操作数存放在处理器的寄存器之中。
寄存器寻址的目的操作数与原操作的类型要相同
大部分情况之下段基地址有默认规定,无需表达
但有的时候我们没有按照默认情况进行数据的访问则要进行显式说明(段超越)
由图可得我们读取指令只能从cs寄存器得到不能替代,但是数据访问可以允许段超越
偏移地址的组成
32位有效地址=基址寄存器+(变址寄存器x比例)+位移量
16位有效地址的组成
编写32位Windows控制台环境的应用程序时,必须接受操作系统的管理不能违反其保护规则,例如一般不能 修改段寄存器的内容,进行数据寻址的地址必须在规定的数据段区域中,如果随意设置访问的逻辑地址,将可能导致非法访问。尽管汇编的语法没有错误运行时将会提示运行错误
可以将一个字节,字,doublewords从源位置移动到目的位置
主存之间的数据不能直接移动
立即数与寄存器之间的间接寻址的储存单元没有明确的类型,IA-32指令系统要求类型一致的两个操作数之一必须有明确的类型,否则要用 ==ptr==指示