1.变量和标号1.1标识符以字母和特殊字符(_, $, ?, @)开头的字母数字和特殊符号串 1.2保留字具有特定用途的标识符,用户不能改变其含义 1.3变量1.3.1四种属性1.3.2定义[变量名] DB/DW/DD 表达式 例:
msg DB "How are you?",0 ;//共13个字节,DB表示以byte类型(1个字节)定义变量
magic DB 50 dup('1','2','3')
DB '1','2','3'; 共占53字节,并初始化为字符串"123123…";50表示容量;dup重复数据
DATA7 DB ? ; 占1字节;'?’,表示该变量的值不确定,即:该变量所表示的内存单元中的内容是不确定的,或者说是,当表达式为问号时,变量所对应的内存区中并没有存入新的值,而只是预留出了相应的存储空间;
num dw 1,2,3,4,5,6,7,8,9,10 ;共20字节
;相当于C风格的 WORD num[10]={1,2,3,4,5,6,7,8,9,10};
1.4标号1.4.1属性段地址 是指该标号所对应的指令所在段的段地址 偏移地址 段内偏移地址 类型有两种:NEAR和FAR NEAR 类型,表示该标号在段内使用 FAR 类型则表示该标号可以在段间使用
1.4.2定义:在指令码前面加上标识符和冒号":";例如 :START: PUSH DS 2.常量2.1伪指令EQUPI EQU 31415926 ; 类似C语言#define PI 31415926 2.2伪指令 name = expressionPIX = PI+2 //编译器在预处理阶段将出现name换成expression 2.3伪指令ORG规定程序的起始地址 默认从0000H开始 ORG 2000H;规定程序指令从地址2000H开始存放 2.4数制二进制: 11101011B 八进制: 345Q 十进制: 8097D, 8097 十六进制: 1234H, 0EFDAH 2.5常量运算+ - * \
AND OR XOR NOT
SHL SHR //shift left \ shift right
EQ NE //equal \ not equal
LT LE //lower than \lower equal小于等于
GT GE //greater than \greater equal大于等于 例: MOV AL, ((11110000B AND 64) +5) GT 32 //将后边比较结果的值传到AL上 3.类型指示MOV BYTE PTR AGE, 20 ;//指示AGE的类型 mov ax,bx ;是把 BX寄存器里的值赋予AX,由于二者都是word型,所以没有必要加“WORD” mov ax,word ptr [bx];是把内存地址等于“BX寄存器的值”的地方所存放的数据,赋予ax。由于只是给出一个内存地址,不知道希望赋予ax的,是 byte还是 word,所以需要用 word明确指出! PTR的作用域只在当前语句中
3.2操作符THIS(当前地址)COUNTW EQU THIS WORD
COUNTB DB 51,96,78,90
AGAINF EQU THIS FAR
AGAINN: MOV AL, 90 3.3操作符LENGTH,TYPE,SIZE(SIZE=LENGTH*TYPE),WIDTH3.4HIGH,LOW3.5SEG,OFFSET4.段定义END 指示整个汇编源程序结束,并给出第一条指令的执行位置() END START DATA 1 SEGMENTS ;一段的开始
name1 DB 50DUP(?)
DB 2,3,4,5
DATA 1 ENDS ;一段的结束
DATA 2 SEGMENTS ;一段的开始
name2 DB 50DUP(?)
DATA 2 ENDS ;一段的结束
STACK SEGMENTS ;一段的开始
DB 5000 DUP(?)
STACK ENDS ;一段的结束
CODE SEGMENT
;把段与段寄存器相关连
ASSUME CS:CODE, SS: STACK; DS:DATA1, ES:DATA2
START: MOV AX,DATA1
MOV DS,AX
MOV AX,DATA2
MOV ES,AX
MOV AL,name1 ;name1隐含使用DS
MOV BL,name2 ;name2隐含使用ES。这里需要段超越。
……
CODE ENDS
END START
5.过程定义定义 过程名 PROC [FAR或NEAR] ; 默认为NEAR …… RET 过程名 ENDP 调用 例: call delay ;调延时子程序 …… delay proc near ;延时子程序定义 mov bx,200 lll: mov cx,0 ll: loop ll dec bx jne lll ret delay endp
6.结构类型定义 结构类型名 STRUC [对齐类型Alignment][,NONUNIQUE]
Field1 Type1 Exp1
Field2 Type2 Exp2
......
FieldN TypeN ExpN
结构类型名 ENDS FieldN:变量名,可以不取,无变量名是通过在结构体中偏移量访问
使用
7.记录类型8.宏9.条件汇编例:SHOWCHAR MACRO X ;显示一个字符
IF X GE 35H
MOV AL, X
ELSE
MOV AL, '0'
ENDIF
MOV AH, 2
INT 21H
ENDM 10.简化段定义.8086
.MODEL SMALL ;SMALL采用小模式内存,一个代码段,一个数据段;
;TINY:都在一个段
;MEDIUM:多个代码段,一个数据段
DOSSEG ;采用DOS方法排列段
.DATA ;数据段
S1 DB 1,2,3
S2 DW 500
.STACK 100H ;堆栈段,指定大小为100,通常默认为1KB
.CODE ;代码段
MAIN PROC FAR
MOV AX,@DATA ; 数据段基址@DATA
MOV DS,AX
…
RET
MAIN ENDP
END MAIN 简化段伪指令 | 功 能 | 注释 |
---|
.CODE [段名] | 创建一个代码段 | 段名为可选项,如不给出段名,则采用默认段名。对于多个代码段的模型,则应为每个代码段指定段名。 | .DATA | 创建一个数据段 | 段名是:_DATA | .DATA? | 创建无初值变量的数据段 | 段名是:_BSS | .FARDATA [段名] | 建立有初值的远调用数据段 | 可指定段名,如不指定,则将以FAR_DATA命名。 | .FARDATA? [段名] | 建立无初值的远调用数据段 | 可指定段名,如不指定,则将以FAR_BSS命名。 | .CONST | 建立只读的常量数据段 | 段名是:CONST | .STACK [大小] | 创建一个堆栈段并指定堆栈段大小 | 段名是:stack。如不指定堆栈段大小,则缺省值为1KB |
11.Reference1 http://blog.sina.com.cn/s/blog_84ee1fff0102xbeb.html 2 http://bdxnote.blog.163.com/blog/static/844423520096137403605/ 3 https://www.cnblogs.com/galano/p/8721350.html 4 http://www./article/p-pjmhoonz-yp.html
|