汇编-loop循环指令 LOOP指令是根据ECX计数器循环,将语句块重复执行特定次数。ECX自动作为计数器, 每重复循环一次就递减1。语法如下所示:。在上面的例子中,每次循环都将EAX加1。当循环结束时, EAX=5, ECX= 0一个常见的编程错误是, 在循环开始之前, 无意中将ECX初始化为0。如果发生了这种情况, LOOP指令将ECX减1后, 其值就变为FFFF FFFFh,循环次数就变成了4294967296。
汇编-间接寻址(处理数组) 直接寻址很少用于数组处理,因为用常数偏移量来寻址多个数组元素时,直接寻址并不实用。取而代之的是(indirect addressing) ) 并控制该寄存器的值。如果一个操作数使用的是间接寻址, 就称之为间接操作数(indie ct operand)。
汇编-EQU伪指令(数值替换) 在第一种格式中, expression必须是一个有效的整数表达式。在第二种格式中, symbol是一个已存在的符号名称, 已经用=或EQU定义过。在第三种格式中, 任何文本都可以出现在括号
汇编-变量 data无符号数有符号数无符号数组无符号数有符号数;DWORD还可用于声明一种变量, 这种变量包含的是另一个变量的32位偏移量。如上所示, pval包含的就是val3的偏移量定义数组,偏移量的增量为4Intel将一个压缩的BCD整数存放在一个10字节的包中。每个字节(除了最高字节外)包含两个十进制数字。在低9个字节中,每半个字节都存放了一个十进制数字。在最高字节中,最高位表示该数的符号。如果最高字节为80h,则该数为负数;如果最高字节为00h,则该数为正数。
汇编-字符串 正如字符常量以整数形式存放一样,字符串常量在内存中的存储形式为整数字节值的序列。例如, 字符串字面量“ABCD”包含四个字节41h、42h、43h和44h。字符串常量是用单引号或双引号括起来的一个字符序列。
win32汇编-PUSHAD和POPAD指令 POPAD指令则是PUSHAD指令的逆操作。POPAD指令按照与上面相反的顺序依次弹出寄存器的值。PUSHAD和POPAD指令通常成对出现,用以保存和恢复CPU的环境变量。是一个x86汇编指令,用于将当前程序的所有通用寄存器(PUSHAD POPAD不会影响标志位。PUSHAD指令压入32位。
win32汇编-创建子程序 子程序的定义方式:子程序名 proc [距离] [语言类型] [可视区域] [USES寄存器列表] [, 参数:类型] ...[VARARG]local 局部变量列表指令子程序名 endpproc和endp伪指令定义了子程序开始和结束的位置proc后面跟的参数是子程序的属性和输入参数。子程序的属性有:●距离——可以是NEAR, FAR, NEAR16, NEAR32, FAR16或FAR32, Win32中只有一个平坦的段,无所谓距离,所以对距离的定义往往忽略。
win32汇编-LEA指令是将一个内存地址加载到一个寄存器中 这条指令的含义是将 inptr 所指向的数组的首地址传送到 EAX 中,而不是将 arr[0] 这个值传送到 EAX 中。这样就能够方便地对该数组进行操作,而无需使用偏移量或者索引来访问其元素。LEA (Load Effective Address) 指令是用来将一个内存地址加载到一个寄存器中的指令。其中,destination 是目标寄存器,source 是一个内存地址(即一个存储器操作数)。