汇编教程 第四章 汇编语言.ppt
文本预览下载声明
* 关系运算的结果是一个逻辑值:真或假 关系为真,结果为全1 关系为假,结果为全0 例:MOV BX,PORT GT 300H 若PORT的值大于300H,则汇编后为: MOV BX,0FFFFH 否则汇编后为: MOV BX,0 3)关系运算符——EQ、NE、LT、GT、LE、GE * SEG:取变量/标号的段地址 OFFSET:取变量/标号的偏移地址 例:VAR DB 12H …… MOV BX,OFFSET VAR ;取变量VAR的偏移地址 MOV AX,SEG VAR ;取变量VAR的段地址… 4)取地址运算符——SEG、OFFSET * TYPE 取变量的类型(1,2,4) LENGTH 如果变量是用DUP说明的,返回外层DUP给定的值,否则返回1 SIZE 取所定义存储区的字节数=TYPE*LENGTH) 例:VAR DW 1,2,3,4,5 则 TYPE VAR = 2 LENGTH VAR = 1 SIZE VAR = 2 例:VAR DW 5 DUP(9 DUP(2)) 则 TYPE VAR = 2 LENGTH VAR = 5 SIZE VAR = 10 5)取值运算符——TYPE、LENGTH、SIZE * 6)属性运算符——PTR 用来指定地址操作数的类型。 格式:类型 PTR 表达式 类型∈{BYTE, WORD, DWORD, NEAR, FAR} BYTE、WORD、DWORD 用于描述数据存储单元(变量)地址 NEAR、FAR 用于描述转移、调用的目的地址… * 例:MOV BYTE PTR[DI],0 ;字节类型 MOV WORD PTR[DI],0 ;字类型 MOV [DI],0B5H ;类型不定 PTR也可用来进行强制类型转换 例:STR1 DW ? ;STR1定义为字类型 MOV AX,STR1 ;合法 MOV AL,STR1 ;非法 MOV AL,BYTE PTR STR1 ;合法… * 假设程序中的数据定义如下: LNAME DB 30 DUP (?) CODE DB 1,7,8,3,2 用以条MOV指令将LNAME的偏移地址放入AX,用一条指令将CODE的头两个字节的内容放入SI。 * MOV AX,OFFSET LNAME MOV SL,WORD PTR CODE * 假设下一条指令从1221开始 NUM DW 12H,0 …… MOV AX,NUM MOV BX,OFFSET NUM MOV CL,BYTE PTR NUM+1 MOV CH,BYTE PTR NUM 问:执行后AX,BX,CX的值各为多少? * (AX)=(0012H) (BX)=(1221H) (CX)=(1200H) * 4.2 伪指令 由汇编程序执行的指令,它本身不被汇编成机器指令。 常用的伪指令有: 数据定义伪指令 DB DW DD…… 符号定义伪指令 段定义和段寄存器指定伪指令 过程定义伪指令 结束伪指令 * 4.2.1 符号定义伪指令 把一个表达式用一个符号表示,以后凡出现该表达式的地方都可用这个符号表示。类似于C语言中的#define。 符号定义伪指令有两种:EQU,= 用EQU定义的符号未清除前,不能重新定义。清除EQU定义可用PURGE伪指令。 用”=”定义的符号可在任何时候进行重定义。 二者均不占用存储空间,仅是给符号赋值 * 例:FIVE EQU 5 COUNT EQU CX TEN EQU 10 DIST = BYTE PTR[SI+BP] GOTO = JMP … MOV AX, TEN MOV CX, COUNT ADD DIST, FIVE DIST = WORD PTR[SI+BP+1] ADD DIST, AX GOTO LABEL 定义 引用 * 4.2.2 段定义伪指令 汇编语言程序是按段来组织程序和数据的。 和存储器的物理段相对应,汇编语言程序中的段称为逻辑段。 汇编连接后被映射到物理段中。 三类段:代码(程序)、数据、堆栈 段定义伪指令:SEGMENT、ENDS、ASSUME、ORG * 定义一个段的基本格式: 段名 SEGMENT [定位类型][组合方式
显示全部