飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7411|回复: 29

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

  [复制链接]

该用户从未签到

发表于 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
      优先级:低     
      优先级自上而下从高到低
连同昨天的一起发上来
2014.3.2.zip (2.47 KB, 下载次数: 23)

2014.3.1.zip (2.79 KB, 下载次数: 14)


评分

参与人数 3威望 +10 飘云币 +22 收起 理由
仲夜星辰 + 2 + 2 PYG有你更精彩!
落叶枫林 + 4 赞一个!
MOV + 4 + 20 赞一个!

查看全部评分

PYG19周年生日快乐!
  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 1809 天

    [LV.Master]伴坛终老

    发表于 2014-3-5 21:07:26 | 显示全部楼层
    不错,来巩固一下基础,谢谢了
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-8-30 21:28
  • 签到天数: 238 天

    [LV.7]常住居民III

    发表于 2014-3-8 20:46:59 | 显示全部楼层
    谢谢楼主分享
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-8-30 21:28
  • 签到天数: 238 天

    [LV.7]常住居民III

    发表于 2014-3-8 20:47:06 | 显示全部楼层
    谢谢楼主分享
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-3-8 12:43
  • 签到天数: 92 天

    [LV.6]常住居民II

    发表于 2014-3-16 20:02:48 | 显示全部楼层
    谢谢了。我怎么就这么笨呢。
    PYG19周年生日快乐!
  • TA的每日心情

    2020-5-17 21:20
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-6-9 13:49:55 | 显示全部楼层
    路过支持一下
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2024-4-9 09:28
  • 签到天数: 603 天

    [LV.9]以坛为家II

    发表于 2014-6-10 08:50:55 | 显示全部楼层
    支持你,多多提供相关破解知识和工具,谢谢!
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2019-3-6 09:22
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2014-7-18 10:43:43 | 显示全部楼层
    虽然有些枯燥,但是很有用,谢谢
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2024-2-21 20:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    发表于 2014-11-6 18:30:13 | 显示全部楼层
    不错的东东
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表