跳转至

汇编语言

整数常量与整数表达式

整数常量(与C++不同): 采取基数后缀的方式表示:

10(默认没有后缀是十进制),10d(十进制),10o/q(八进制),0A0(十六进制),10b(二进制)

  • 以字母开头的十六进制常量前面加0才有效

整数表达式:包含整数值和算术运算符的数学表达式,表达式的结果不能超出32bits的范围

实数常量

字符常量

符号常量

符号常量(或符号定义),将标识符与整数表达式或者文本联系起来

  • 符号常量不占用存储空间,但是变量占用存储空间

保留字

  • 指令助记符:MOV,ADD
  • 伪指令:INCLUDE、PROC
  • 属性: Byte,WORD
  • 预定义符号:$、?

$:存储当前语句的地址偏移值 - 计算数组或者字符串的大小

  1. 计算字符串的大小
    str_hello BYTE "Hello World"
    

标识符

  • 包含1~127个字符
  • 第一个字符必须是字母、下划线、@和?和$,第一个字符不能是数字
  • 对大小写不敏感

指令

标号

充当指令或者数据位置标记的标识符

  • 数据标号:标识变量的地址
  • 代码标号:表示代码的地址

指令助记符

是一个简单的单词,用来表示一个指令

操作数

操作数是指令执行的操作最对象

操作数可以来自于寄存器、内存、常量、I/O窗口

Operation Meanings
[inc eax] inc eax,acx寄存器值加法后只剩1km
[{expression};save result to count] 注释代码

NOP

伪指令

  • 定义变量
my_var DWORD 100h; DWROD 伪指令
mov eax,my_var; mov指令
  • 定义段
.data    .code    .stack
  • 定义过程
PROC      ENDP
  • 允许或者禁止汇编器中的某些特性
.386    OPTION    .MODEL
伪指令 例子 功能
DUP BYTE 4DUP("Hello"),BYTE 20DUP(0) 为字符串或者数组分配内存空间
= COUNT = 500 mov eax, COUNT 等号伪指令将符号名和整数表达式联系起来,易于阅读以及维护

内部数据结构

MASM内部以数据位的个数定义了多种数据结构

  • BYTE,db,8位
  • WORD,dw,16位
  • DWORD,dd,32位
  • QWORD,dq,64位

提醒:MASM默认情况下对大小写不敏感

  • 0Ah,0Dh 是换行回车的ASCII编码,字符串的结尾是0

数据定义语句:

[变量名]数据定义伪指令 初始值

;数字数据类型定义

.data
    dw_var1 DWORD 0

.data?
    dw_var2 DWORD ?

;字符串类型数据的定义

str_hello BYTE "Hello world",0Dh,0Ah
          BYTE "I don't love assembly language"
          BYTE 0Dh,0AH,0