DUP是伪指令,EQU是等于指令。
dup是一个操作符,在汇编语言中同db、dw、dd等一样,也是由编译器识别处理的符号。是和db、dw、dd等数据定义伪指令配合使用的,用来进行数据的重复。
EQU 伪指令把一个符号名称与一个整数表达式或一个任意文本连接起来。
扩展资料
MOV 传送字或字节。
MOVSX 先符号扩展,再传送。
MOVZX 先零扩展,再传送。
PUSH 把字压入堆栈。
POP 把字弹出堆栈。
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈。
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈。
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈。
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈。
BSWAP 交换32位寄存器里字节的顺序
XCHG 交换字或字节。( 至少有一个操作数为寄存器,段寄存器不可作为操作数)
CMPXCHG 比较并交换操作数。( 第二个操作数必须为累加器AL/AX/EAX )
XADD 先交换再累加。( 结果在第一个操作数里 )
XLAT 字节查表转换。
参考资料来源:百度百科-汇编指令
在汇编定义变量的时候会用到dup。
变量名类型初值表
Dup用于把一个相同值赋值若干次。重复次数dup(数据项)
具体比如:
sdb30dup(0)
定义一个字节型变量,该变量占用30个字节,所有字节被初始化成0
equ是一个代码替换指令
比如:
sequbx+si
movcx,[s]
那么上面两句代码相当于如下指令:
movcx,[bx+si]
扩展资料:
EQU等价语句
1、一般格式
等价语句的一般使用格式如下:
符号名EQU表达式
作用是左边的符号名代表右边的表达式。
注意:等价语句不会给符号名分配存储空间,符号名不能与其它符号同名,也不能被重新定义。
2、用符号名代表常量或表达式
当把一个常量或表达式定义成一个具有一定含义的符号名后,在程序中就可以用该符号名来代表该常量或表达式。
例如:
NUMBEREQU100;给缓冲区的长度取一个符号名
BUFF_LENEQUNUMBER+2
CREQU13;给“回车”符的ASCII码定义一个符号名
LFEQU10;给“换行”符的ASCII码定义一个符号名
…
BUFFERDBNUMBER,?,NUMBERDUP(?);用符号名来定义缓冲区
…
3、用符号名代表字符串
用一个具有一定含义的符号名定义某一个较长的字符串,在随后的程序中就用该符号名。例如:
GREETINGEQU"Howareyou!"
在该定义之后,就可使用符号名GREETING来代表字符串"Howareyou!"。
4、用符号名关键字或指令助忆符
用一个(组)程序员自己习惯的符号名来代替汇编语言中的关键字或指令助忆符。但在此建议不要这样做,因为程序的编写者习惯,程序的其他阅读者可能会觉得很别扭。
例如:
MOVEEQUMOV;给指令MOV取另一个符号名MOVE
COUNTEREQUCX;给寄存器CX取一个叫“计数器”的符号名
上面的定义只是给原来的助忆符MOV和CX起了另一个别名,而原来助忆符MOV和CX仍然可以使用,所以,我们可编写如下语句:
MOVEAX,CX;相当于指令:MOVAX,CX
MOVCOUNTER,BX;相当于指令:MOVCX,BX
5、用符号名定义存储单元的别名
可对一片存储单元定义另一个数据类型的符号名,有关叙述参见前面的操作符THIS。
例如:
WORD1EQUTHISWORD;给后面的字节存储单元取一个字属性的符号名;
BYTE1DB12h,21h
FLAGDW1234H
FLAG1EQUbyteptrFLAG;给FLAG的低字节取一个字节属性的符号名;
FLAG2EQUbyteptrFLAG+1;给FLAG的高字节取一个字节属性的符号名;
有了上述定义后,可编写如下语句:
MOVAX,WORD1;执行后,(AX)=2112H
MOVBL,FLAG1;执行后,(BL)=34H
变量名 类型 初值表
Dup用于把一个相同值赋值若干次。
重复次数 dup(数据项)
具体比如s db 30 dup(0)
定义一个字节型变量,该变量占用30个字节,所有字节被初始化成0
equ是一个代码替换指令
比如:s equ bx+si
mov cx,[s]
那么上面两句代码相当于如下指令:mov cx,[bx+si]
EQU相当于一个宏,类似域C语言中的#define
DUP重复数据定义,使数据定义指令重复指定的次数!
db 3 dup (0,1,2) -->定义了9个字节,是0,1,2,0,1,2,0,1,2
equ 类似 define的作用。