X86架构基本汇编指令详解

汇编指令

伪指令

1. .MODEL
.model flat,stdcall

model伪指令告诉汇编程序使用哪一种存储模式:32 位程序总是使用平面(flat)存储模式,它与处理器的保护模式相关联。关键字 stdcall 在调用程序时告诉汇编器,怎样管理运行时堆栈。
然后是 .STACK 伪指令,它告诉汇编器应该为程序运行时堆栈保留多少内存字节。

2. .STACK
.stack 4096

数值 4096 可能比将要用的字节数多,但是对处理器的内存管理而言,它正好对应了一个内存页的大小。所有的现代程序在调用子程序时都会用到堆栈。首先,用来保存传递的参数;
其次,用来保存调用函数的代码的地址。

3. ENDP
main ENDP

ENDP 伪指令标记一个过程的结束。如果程序有名为 main 的过程,则 endp 就必须使用同样的名称;

4. END
END main

最后,END 伪指令标记一个程序的结束,并要引用程序入口;

汇编指令

1. MOV:将源操作数复制到目的操作数

MOV 指令将源操作数复制到目的操作数。作为数据传送(data transfer)指令,它几乎用在所有程序中。在它的基本格式中,第一个操作数是目的操作数,第二个操作数是源操作数:

MOV destination, sourece

两个操作数必须是同样的大小。
两个操作数不能同时为内存操作数。
指令指针寄存器(IP、EIP 或 RIP)不能作为目标操作数。

MOV指令不能直接将较小的操作数复制到较大的操作数中

2. MOVZX 和 MOVSX

MOVZX 指令(进行全零扩展并传送)将源操作数复制到目的操作数,并把目的操作数 0 扩展到 16 位或 32 位。这条指令只用于无符号整数,有三种不同的形式;

MOVZX reg32,reg/mem8
MOVZX reg32,reg/mem16
MOVZX reg16,reg/mem8

MOVSX 指令(进行符号扩展并传送)将源操作数内容复制到目的操作数,并把目的操作数符号扩展到 16 位或 32 位。这条指令只用于有符号整数,有三种不同的形式;

MOVSX reg32, reg/mem8
MOVSX reg32, reg/mem16
MOVSX reg16, reg/mem8
3. XCHG:交换两个操作数内容

三种格式:

XCHG reg, reg
XCHG reg, mem
XCHG mem, reg

不能直接交换两个内存操作数

4. INC 和 DEC

INC(增加)和DEC(减少)指令分别表示寄存器加 1 和减 1:

INC reg/mem
DEC reg/mem

不支持直接对内存进行操作

5. ADD 和 SUB:操作数相加减;
6. NEG: NEG(非)指令通过把操作数转换为其二进制补码,将操作数的符号取反;
NEG reg
NEG mem

将目标操作数按位取反再加 1,就可以得到这个数的二进制补码。

7. ALIGN伪指令:对齐一个变量

ALIGN 伪指令将一个变量对齐到字节边界、字边界、双字边界或段落边界。

ALIGN bound

ALIGN 4     ;偏移量按4对齐
8. JMP指令

JMP 指令无条件跳转到目标地址,该地址用代码标号来标识,并被汇编器转换为偏移量。

JMP destination

当 CPU 执行一个无条件转移时,目标地址的偏移量被送入指令指针寄存器,从而导致迈从新地址开始继续执行。

无限循环

top:
    .
    .
    jmp top
9. LOOP指令

LOOP 指令,正式称为按照 ECX 计数器循环,将程序块重复特定次数。ECX 自动成为计数器,每循环一次计数值减 1。
循环目标必须距离当前地址计数器 -128 到 +127 字节范围内。LOOP 指令的执行有两个步骤:

  • 第一步,ECX 减 1。
  • 第二步,将 ECX 与 0 比较。

当ECX不等于0,则跳转到符号内容中; 若ECX不等于0,则不发生跳转。

    ; 每次循环将AX加1,当循环结束,AX=5,ECX=0
    MOV AX, 0
    MOV ECX, 5
L1:
    INC AX
    LOOP L1
10. PUSH,POP指令

PUSH 指令首先减少 ESP 的值,再将源操作数复制到堆栈。操作数是 16 位的,则 ESP 减 2,操作数是 32 位的,则 ESP 减 4。

PUSH reg/mem16
PUSH reg/mem32
PUSH inm32

POP 指令首先把 ESP 指向的堆栈元素内容复制到一个 16 位或 32 位目的操作数中,再增加 ESP 的值。如果操作数是 16 位的,ESP 加 2,如果操作数是 32 位的,ESP 加 4。

POP reg/mem16
POP reg/mem32
11. PUSHFD,POPFD指令

PUSHFD 指令把 32 位 EFLAGS 寄存器内容压入堆栈,而 POPFD 指令则把栈顶单元内容弹出到 EFLAGS 寄存器。

PUSHFD          ;保持标志寄存器
POPFD           ;恢复标志寄存器
12. PUSHAD, PUSHA, POPAD, POPA
  • PUSHAD 指令按照 EAX、ECX、EDX、EBX、ESP、EBP、ESI 和 EDI 的顺序(执行 PUSHAD 之前的值),将所有 32 位通用寄存器压入堆栈;POPAD 指令按照相反顺序将同样的寄存器弹出堆栈。
  • PUSHA 指令按序(AX、CX、DX、BX、SP、BP、SI 和 DI)将 16 位通用寄存器压入堆栈;POPA 指令按照相反顺序将同样的寄存器弹出堆栈。
13. CALL和RET指令

CALL 指令调用一个过程,指挥处理器从新的内存地址开始执行。过程使用 RET(从过程返回)指令将处理器转回到该过程被调用的程序点上。
从物理上来说,CALL 指令将其返回地址压入堆栈,再把被调用过程的地址复制到指令指针寄存器。当过程准备返回时,它的 RET 指令从堆栈把返回地址弹回到指令指针寄存器。

CALL function_name
RET
14. AND,OR, XOR, NOT 指令
AND destination, source     ;   对两个操作数进行按位与操作
OR destination, source      ;   对两个操作数进行按位或操作
XOR destination, source     ;   对两个操作数进行按位异或操作
NOT reg                     ;   翻转操作数的所有位
15. TEST指令:对两个操作数进行按位与操作

TEST与AND 指令唯一不同的地方是,TEST 指令不修改目标操作数。TEST 指令允许的操作数组合与 AND 指令相同。在发现操作数中单个位是否置位时,TEST 指令非常有用。

;       测试AL寄存器的位0和位3是否为1
TEST al, 00001001b

当所以测试位都为0时,零标志位ZF才为1

16. CMP指令:比较整数
CMP destination, source

标志位
当实际的减法发生时,CMP 指令按照计算结果修改溢出、符号、零、进位、辅助进位和奇偶标志位。

如果比较的是两个无符号数,则零标志位和进位标志位表示的两个操作数之间的关系如表所示:

CMP结果ZFCF
目的操作数 < 源操作数01
目的操作数 > 源操作数00
目的操作数 = 源操作数10

如果比较的是两个有符号数,则符号标志位、零标志位和溢出标志位表示的两个操作数之间的关系如表所示:

CMP结果标志位
目的操作数 < 源操作数SF≠OF
目的操作数 > 源操作数SF=OF
目的操作数 = 源操作数ZF=1

一般而言,CMP指令与跳转指令相结合:

CMP指令的作用在于比较之后设置标志位,而跳转指令通过判断标志位来进行跳转,达到if语句的效果。

17. 跳转指令

跳转指令与CMP指令相结合,可以达到if语句的效果。

助记符说明标志位/寄存器助记符说明标志位/寄存器
JZ为0跳转ZF=1JNO无溢出跳转OF=0
JNA非0跳转ZF=0JS有符号跳转SF=1
JC进位跳转CF=1JNS无符号跳转SF=0
JNC无进位跳转CF=0JP偶校验跳转PF=0
JO溢出跳转OF=1JNP奇校验跳转PF=0

相等性的比较

表中符号 leftOp 和 rightOp 分别指的是 CMP 指令中的左(目的)操作数和右(源)操 作数;

助记符说明
JE相等跳转(leftOp=rightOp)
JNE不相等跳转 (leftOp M rightOp)
JCXZCX=0跳转
JECXZECX=0跳转
JRCXZRCX=0跳转(64位模式)
mov edx, 0A523h
cmp edx, 0A523h
jne L5                       ;不发生跳转
je L1                         ;跳转

无符号数比较

基于无符号数比较的跳转如下表所示。操作数的名称反映了表达式中操作数的顺序(比如 leftOp < rightOp);

助记符说明助记符说明
JA大于跳转(若 leftOp > rightOp)JB小于跳转(若 leftOp < rightOp)
JNBE不小于或等于跳转(与 JA 相同)JNAE不大于或等于跳转(与 JB 相同)
JAE大于或等于跳转(若 leftOp ≥ rightOp)JBE小于或等于跳转(若 leftOp ≤ rightOp)
JNB不小于跳转(与 JAE 相同)JNA不大于跳转(与 JBE 相同)

有符号数比较

助记符说明助记符说明
JG大于跳转(若 leftOp > rightOp)JL小于跳转(若 leftOp < rightOp)
JNLE不小于或等于跳转(与 JA 相同)JNGE不大于或等于跳转(与 JB 相同)
JGE大于或等于跳转(若 leftOp ≥ rightOp)JLE小于或等于跳转(若 leftOp ≤ rightOp)
JNL不小于跳转(与 JAE 相同)JNG不大于跳转(与 JLE 相同)
18. 移位和循环移位指令
SHR右移RCL带进位的循环左移
SAL算术左移RCR带进位的循环右移
SAR算数右移SHLD双精度左移
ROL循环左移SHRD双精度右移
SHL左移ROR循环右移

移位

  • 逻辑移位:空出来的位用 0 填充;
  • 算数移位:空出来的位用原数据的符号位填充;

循环移位

以循环方式来移位即为位元循环。

当多字节整数以四位为单位进行循环移位时,其效果相当于一次向右或向左移动一个十六进制位。例如,将 6A4Bh 反复循环左移四位,最后就会回到初始值。

mov ax, 6A4Bh
rol ax, 4              ; AX = A4B6h
rol ax, 4              ; AX = 4B6Ah
rol ax, 4              ; AX = B6A4h
rol ax, 4              ; AX = 6A4Bh
19. MUL指令:无符号乘法

乘数和被乘数的大小必须保持一致,乘积的大小则是它们的一倍。这三种类型都可以使用寄存器和内存操作数,但不能使用立即数:

MUL reg/mem8
MUL reg/meml6
MUL reg/mem32

mov al, 5h
mov bl, 10h
mul bl                    ; AX = 0050h, CF = 0

如果乘积的高半部分不为零,则 MUL 会把进位标志位和溢出标志位置 1。因为进位标志位常常用于无符号数的算术运算,在此我们也主要说明这种情况。
例如,当 AX 乘以一个 16 位操作数时,乘积存放在 DX 和 AX 寄存器对中。其中,乘积的高 16 位存放在 DX,低 16 位存放在 AX。如果 DX 不等于零,
则进位标志位置 1,这就意味着隐含的目的操作数的低半部分容纳不了整个乘积。

64 位模式下,MUL 指令可以使用 64 位操作数。一个 64 位寄存器或内存操作数与 RAX 相乘,产生的 128 位乘积存放到 RDX:RAX 寄存器中。

20. IMUL指令:有符号乘法

与 MUL 指令不同,IMUL 会保留乘 积的符号,实现的方法是,将乘积低半部分的最高位符号扩展到高半部分。

21. DIV指令:无符号除法
DIV reg/mem8
DIV reg/meml6
DIV reg/mem32

下表给出了被除数、除数、商和余数之间的关系:

被除数除数余数
AXreg/mem8ALAH
DX:AXreg/mem16AXDX
EDX:EAXreg/mem32EAXEDX

64 位模式下,DIV 指令用 RDX:RAX 作被除数,用 64 位寄存器和内存操作数作除数, 商存放到 RAX,余数存放在 RDX 中。

mov ax, 0083h      ; 被除数
mov bl, 2               ; 除数
div bl                     ; AL = 41h, AH = Olh
22. IDICV:有符号除法

有符号除法几乎与无符号除法相同,只有一个重要的区别:在执行除法之前,必须对被除数进行符号扩展。
符号扩展是指将一个数的最高位复制到包含该数的变量或寄存器的所有高位中。

符号拓展指令有:CBW,CWD,CDQ,分别对应:字节转字,字转双字,双字转四字。

23. LEA:返回间接操作数的地址

LEA 指令返回间接操作数的地址。由于间接操作数中包含一个或多个寄存器,因此会在运行时计算这些操作数的偏移量。

  • 9
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值