导航菜单
首页 >  nasm考试题  > NASM汇编指令复习

NASM汇编指令复习

 

2. 汇编 eax寄存器和AX,AH,AL之间的关系  00000000 00000000 00000000 00000000  |===============EAX===============|--32个0,4个字节,2个字,1个双字                    |======AX=======|--16个0,2个字节,1个字                     |==AH===|-----------8个0,1个字节                             |===AL==|---8个0,1个字节    AH是AX的高8位,AL是AX的低8位,AX是EAX的低16位

 

3. in al,92h 表示从92h号端口读入一个字节     out 92h,al 表示向92h号端口写入一个字节

 

4.控制寄存器(CR0~CR3)       用于控制和确定处理器的操作模式以及当前执行任务的特性,CR0中含有控制处理器操作模式和状态的系统控制标志;CR1保留不用;CR2含有导致页错误的 线性地址;CR3中含有页目录表物理内存基地址,因此该寄存器也被称为页目录基地址寄存器PDBR(Page-Directory Base address Register)。 CR0中保护控制位: (1)PE:CR0的位0是启用保护(Protection Enable)标志。当设置该位时即开启了保护模式;当复位时即进入实地址模式。 (2)PG:CR0的位31是分页(Paging)标志。当设置该位时即开启了分页机制;当复位时则禁止分页机制,此时所有线性地址等同于物理地址。 (3)WP:对于Intel 80486或以上的CPU,CR0的位16是写保护(Write Proctect)标志。当设置该标志时,处理器会禁止超级用户程序(例如特权级0的程序)向用户级只读页面执行写操作;当该位复位时则反之。 (4)NE:对于Intel 80486或以上的CPU,CR0的位5是协处理器错误(Numeric Error)标志。当设置该标志时,就启用了x87协处理器错误的内部报告机制;若复位该标志,那么就使用PC形式的x87协处理器错误报告机制。

 

5. NASM汇编程序中的宏定义

格式如下: %macro 宏名 参数名列表       宏体 %endmacro

如:

%macro Descriptor 3     dw    %2 & 0FFFFh                     dw    %1 & 0FFFFh                    db    (%1 >> 16) & 0FFh                dw    ((%2 >> 8) & 0F00h) | (%3 & 0F0FFh)         db    (%1 >> 24) & 0FFh             %endmacro ; 共 8 字节

这个宏定义了操作系统中描述符的格式,宏名为:Descriptor 。使用时只需定义:

Descriptor 参数1, 参数2, 参数3

即可。其中宏定义中的%1代表参数1,%2代表参数2,%3代表参数3

 

6. LODS/LODSB/LODSW/LODSD块装入指令

   将由源变址寄存器DS:E(SI)寻址的一个内存指向的存储器操作数OPS装入到累加器AL/AX/EAX中, 并根据DF之值自动修改地址【当方向标志位D=0时,则SI自动增加;D=1时,SI自动减小。】,为下次传送作准备.LODSB/LODSW /LODSD是操作数的字符串装入指令.只是LODSB,LODSW,LODSD装入的分别是字节,字 ,双字.

 

7. test属于逻辑运算指令 

   功能: 执行BIT与BIT之间的逻辑运算      测试(两操作数作与运算,仅修改标志位,不回送结果).     Test对两个参数(目标,源)执行AND逻辑操作,并根据结果设置标志寄存器,结果本身不会保存。TEST AX,BX 与 AND AX,BX 命令有相同效果     Test的一个非常普遍的用法是用来测试一方寄存器是否为空:   例如: test ecx, ecx   jz somewhere   如果ecx为零,设置ZF零标志为1,Jz跳转

 

8. MOVZX是汇编语言数据传送指令MOV的变体。无符号扩展,并传送。

  movzx其实就是将我们的源操作数取出来,然后置于目的操作数,目的操作数其余位用0填充。 举个例子,例如  令eax=00304000h 若执行 movzx eax, ax后 eax = 00004000h 。  若执行 movzx eax, ah后 eax = 00000030h。  又如:  MOV BL,80H MOVZX AX,BL

 

9. 字符串处理指令stosb, stosw, stosd

  stosb, stosw, stosd这三个指令把al/ ax/ eax的内容存储到es:edi指向的内存单元中,同时edi的值根据方向标志的值增加或者减少。

 

10. jc指令

   JC(Jump if Carry)当运算产生进位标志时,即CF=1时,跳转到目标程序处

======================================================================= ==相同的指令还有: ==JNC,当CF=0时跳转; ==JZ,当ZF=1时跳转, ==JNZ,当ZF=0时跳转; ==JO,当OF=1时跳转, ==JNO,当OF=0时跳转; ==JP,当PF=1时跳转…… ==依此类推,标志寄存器的各个位基本上都可以用来做“条件跳转”的条件。 ==用于大小判断型的: ==  cmp op1,op2 ==  JXX Label == 其中JXX有以下几种: ==JA表示op1>op2,JNA表示op1

相关推荐: