丨零丶 发表于 2014-3-2 19:30:42

菜鸟先飞汇编学习之路(三)——数值表达式

还是纯手工打的,希望大家一起进步

常量和数值表达式
   常量
   常量是一个立即数,直接写在汇编语言语句中,在程序的执行过程中,它不可能发生变化。通常,我们用二进制、八进制、十进制或十六进制来书写常量。
   常量主要用于伪指令数据中给变量赋值,或者用作机器指令中的立即操作数,变址寻址和基址加变址中的位移量等,
   常量可以以数值的形式出现在汇编语言中,这种常量称之为数值常量,但对于经常引用的数值常量,可以事先给它定义一个名字,然后在语句中以该名字来代替这个常量,这种常量称为符号常量。
(注:伪指令,用于告诉汇编程序如何进行汇编的指令,它既不控制机器的操作也不被汇编成机器代码,只能为汇编程序所识别并指导汇编如何进行。 将相对于程序或相对于寄存器的地址载入寄存器中。)
   伪指令中EQU和“=”何以实现将数值常量转变成符号常量。
   数值表达式
   数值表达式是由常量与以下运算符组成的有意义的式子。
   1、算数运算
      算术运算包括:加(+)、减(-)、乘(*)、除(/)、模除(MOD)。
   (注:模除表示两整数相除后取余。如42 MOD 10 ;结果为2。)   
   2、逻辑运算
      逻辑运算符包括按位操作符和移位操作符。
      具体是:逻辑与(AND)、逻辑或(OR)、异或(XOR)、逻辑非(NOT)、右移(SHR)和左移(SHL)。由于逻辑运算是按位进行的,所以运算结果仍为整数常量。这些逻辑运算符和常量、括号可组成数值表达式。
   (注:异或,其运算法则为:真异或假的结果是真,假异或真的结果也是真,真异或真的结果是假,假异或假的结果是假。就是说两个值不相同,则异或结果为真。反之,为假。 不同为1,相同为0。
      异或也叫半加运算,其运算法则相当于不带进位的二进制加法:二进制下用1表示真,0表示假,则异或的运算法则为:0 XOR 0=0, 1 XOR 0=1,0 XOR 1=1,1 XOR 1=0(同为0,异为1),这些法则与加法是相同的,只是不带进位。)
   (注:左移和右移为移位运算,表示将二进制常量左移或右移运算符右边所规定的次数(正整数),所空出的位数由0补齐。)
      例如:11111111B SHL 2结果为 11111100B
   3、关系运算符
      关系运算符包括:相等(EQ)、不等(NE)、小于(GT)、大于(GT)、小于等于(LE)、大于等于(GE).
   4、数值回送(Value_returning)操作符
      数值回送操作符有:标识符类型(TYPE)、变量长度(LENGTH)、变量容量(SIZE)、OFFSET、SEG等。
      数值操作符把一些特征或存储器地址的一部分作为数值回送。
      OFFSET 回送变量或标号的偏移地址。   用法:OFFSET 变量或标号
      SEG 回送变量或标号的段地址.         用法:SEG 变量或标号
      TYPE 回送代表该标号类型的数值.DB为1,DW为2,DD为4,DF为6,DQ为8,DT为10,NEAR为-1,FAR为-2;常数为0.
      LENGTH 对于DUP回送分配给该变量的单元数,对于其他情况则送1.
      SIZE 回送分配给该变量的字节数.此值是LENGTH值和TYPE值的乘积.
   4、属性操作符
      属性操作符主要有:PTR、段操作符、SHORT、THIS、HIGH、LOW等。
      PTR
  用法:类型 PTR 符号地址
  PTR用来给已分配的存储地址(用符号地址表示)赋予另一种属性,使该地址具有另一种类型。
           类型可有BYTE、WORD、DWORD、FWORD、QWORD、TBYTE、NEAR和FAR等几种,所以PTR也可以用来建立字、双字、四字或段内及段间的指令单元等。


        (注:字,计算机进行数据处理时,一次存取、加工和传送的数据长度称为字(word)。如32位机器一次处理32位的数据。
             字长:在同一时间中处理二进制数的位数叫字长。
             字节:计算机中数据处理的基本单位。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成。
             位:位是计算机内部数据储存的最小单位,一个二进制位只可以表示0和1两种状态。)
      段操作符    段操作符用来表示一个标量、变量或地址表达式的段属性。

          格式为:段寄存器∶地址表达式
  段名∶地址表达式
  组名∶地址表达式


   SHORT
  用来修饰JMP指令中转向地址的属性,指出转向地址是在下一条指令地址的±127个字节范围之内。


  THIS
  格式为: THIS 属性或类型
  THIS可以象PTR一样建立一个指定类型(BYTE、WORD、DWORD)或指定距离(NEAR或FAR)的地址操作数。该操作数的段地址和偏移地址与下一个存储单元地址相同。


      HIGH和LOW
  称为字节分离操作符,它接收一个数或地址表达式,HIGH取其高位字节,LOW取其低位字节。
                  (注:如16位的数据它会取前8位作为高位字节,后8位做低位字节。)
   5、运算符和操作符的优先级
      在汇编语言中,有许多各种运算符和操作符,它们的优先级按从高到低的排列如下:
      优先级:高
      LENGTH、SIZE、WIDTH、MASK、()、[]、.(用于结构字段)、<>(用于记录类型)   
      PTR、SEG、OFFSET、TYPE、THIS、:(用于段超越前缀)
      *、/、MOD、SHL、SHR
      HIGH、LOW
      +、-
      EQ、NE、LT、LE、GT、GE
      NOT
      AND
      OR、XOR
      SHORT
      优先级:低   
      优先级自上而下从高到低
连同昨天的一起发上来





qinccckencn 发表于 2014-3-5 21:07:26

不错,来巩固一下基础,谢谢了

cdweng 发表于 2014-3-8 20:46:59

谢谢楼主分享

cdweng 发表于 2014-3-8 20:47:06

谢谢楼主分享

nuojiya8 发表于 2014-3-16 20:02:48

谢谢了。我怎么就这么笨呢。

hackip 发表于 2014-6-9 13:49:55

路过支持一下

tsycjl 发表于 2014-6-10 08:50:55

支持你,多多提供相关破解知识和工具,谢谢!

jeremy 发表于 2014-7-15 16:56:12

学习了!

sann 发表于 2014-7-18 10:43:43

虽然有些枯燥,但是很有用,谢谢

落叶枫林 发表于 2014-11-6 18:30:13

不错的东东
页: [1] 2 3
查看完整版本: 菜鸟先飞汇编学习之路(三)——数值表达式