汇编_程序起步

来源:互联网 发布:unity3d 离线文档 编辑:程序博客网 时间:2024/05/22 05:32

注:参照中山大学汇编教学视频总结

一、汇编语言的语句

      指令语句、伪指令语句、宏指令语句,指令语句翻译成机器指令,伪指令没有对应的机器指令,伪指令只是指示汇编程序如何汇编源程序,包括符号的定义、变量定义、段定义

      指令语句的格式

     (标号)指令助记符 (操作数,(操作数)) (;注释)

      伪指令语句的格式

     (名字)伪指令定义符 (参数...,参数) (;注释)

      伪指令定义符规定了伪指令功能

      名字后没有冒号,标号后有冒号

      汇编程序不区分大小写

      数值的表达式

      不仅有各种运算符,还是很多操作符

      数值表达式、地址表达式 

      常数,十进制常数D 0到9的组成的序列,汇编语言改变基数的伪指令RADIX,RADIX 16,修改默认进制数为16进制,16指代进制数,十六进制常数H(以字母开头,要开头加0,防止误认为是变量),二进制常数B,八进制常数Q,字符串常数,‘A’值为41H,‘ab’值为6162H

       算术运算符

       +,-,/,*,MOD,与高级语言的运算符类似

       关系运算符

       相等EQ,不等NE,小于LT,大于GT,小于或等于LE,大于或等于GE,关系成立结果为0FFFFH,不成立为0,比如MOV BX,1234H+5 LT 1024H  (BX)=0

       逻辑运算符

       与AND,或OR,异或XOR,非NOT,左移SHL,右移SHR,结果还是数值

       在数值表达式中使用的操作符

       HIGH,结果是数值表达式的高8位,LOW,结果是数值表达式的低8位,LENGTH,SIZE,OFFSET,SEG,TYPE,WIDTH,MASK      

      运算符和操作符的优先级

      圆括号,尖括号,方括号,圆点符,LENGTH,SIZE,WIDTH,MASK,PTR,OFFSET,SEG,TYPE,THIS,冒号,*,/,MOD,SHL,SHR,HIGH,LOW,+,-,EQ,NE,LT,LE,GT,GE,NOT,AND,OR,XOR,SHORT

      地址表达式

      存储器操作数的地址,单个的标号、变量、有方括号的基址或变址寄存器是地址表达式的特例

      变量和标号,指代存储单元,变量表示存放的数值,标号表示存放的指令代码

      数据定义语句,可为数据项分配存储单元并根据需要设定其初值

      数据定义语句

      数据定义语句是最常见的伪指令语句,格式:[变量名] 数据定义符 表达式 [,表达式,....,表达式] ;注释

      VARB DB 3,定义了VARB的字节,内容为3

      WARW DW -1234,定义字变量WARW,内容-1234

      BUFF DB 100,3+4,5*6,定义一系列字节数,放别存放

      定义字节数据项

      数据定义符 DB,比如COUNT DB 100

      定义字数据项

      数据定义符 DW,比如FLAG DW 2FCDH,符合高高低低原则

      定义双字数据项

      数据定义符 DD,比如VECTOR DD 4,符合高高低低原则

      定义没有初值的数据项

      数据定义语句中的表达式单单是一个问号,比如INBUFF DB 5,?,?,8,?  定义了字节,只是分配存储单元,没有初始值,定义字数据项和定义双字数据项也可同样使用?

      定义字符串

      数据伪指令DB可以定义,DW也可定义,单引号和双引号都可以,比如MESS DB ‘HELLO!’,等价于MESS DB ‘H’,‘E’,‘L’,‘L’,‘O’,‘!’,字定义和字节定义区别,字定义符合高高低低原则,两个字节一起存,字节定义要顺序填充

      定义其他类型数据项,定义8字节DQ,定义十字节DT

      重复操作符DUP 

      重复定义相同数值的变量,即连续存储单元内的值相同,BUFFER DB 8DUP(0) 与 BUFFER DB 0,0,0,0,0,0,0,0等价,重复操作符DUP的一般使用格式如下:COUNT DUP(表达式[,表达式,表达式,...]),比如BUFFER DB 100DUP(0,2DUP(1,2),0,3)

      变量和标号的属性,三种属性,段值、偏移、类型 变量(BYTE、WORD、DWORD)标号(NEAR、FAR)

      析值操作符也称为数值回送操作符,这些操作符把一些特征或存储器地址的一部分作为数值回送,SEG 变量名或标号,送段值,送数据给段DS OFFSET 变量名或标号,送偏移地址,只能取伪操作的有效地址,比如数组的初始地址,LEA可以取任意地址 TYPE 变量名或标号,送类型  SIZE 变量名   LENGTH  变量名

      SEG,送段值,必须先把段值送给寄存器,再将段值送给DS

      OFFSET,送有效地址

      TYPE,BYTE返回1,WORD返回2,DWORD返回4,NEAR返回-1,FAR返回-2

      LENGTH,返回利用DUP定义的数组中元素的个数,如果没有使用DUP,返回1,如果嵌套使用DUP,则返回最外层的重复数

      SIZE,返回利用DUP定义的数组占用的字节数,即COUNT*TYPE

      属性操作符,为了提高访问变量、标号、一般寄存器操作数的灵活性,汇编语言还提供了属性操作符以达到按指定属性访问的目的

      操作符PTR,比如MOV [SI],1这样会报错,MOV WORD PTR [SI],1指明字类型,PTR是最常用的合成操作符,用在地址表示之前,用于指定或临时改变变量和标号的类型,格式:类型 PTR 地址表达式,类型可以是BYTE,WORD,DWORD,NEAR,FAR

原创粉丝点击