汇编esp是什么意思_汽车esp是什么意思_esp故障是什么意思

电脑杂谈  发布时间:2019-09-11 09:05:02  来源:网络整理

汽车esp是什么意思_esp故障是什么意思_汇编esp是什么意思

; Declare three 4-byte values, initialized to 1, 2, and 3. The value of location Z + 8 will be 3.

DB 10 DUP(?)

; Declare 10 uninitialized bytes starting at location bytes.

DD 100 DUP(0)

; Declare 100 4-byte words starting at location arr, all initialized to 0

DB 'hello',0

; Declare 6 bytes starting at the address str, initialized to the ASCII character values for hello and the null (0) byte.

2.2 寻址模式

现代X86处理器具有232字节的码流空间。在里面的事例中,我们用标签(label)表示内存区域,这些标签在实际汇编时,均被32位的实际地址代替。除了支持这些直接的存储区域描述,X86还提供了一种灵活的存储寻址模式,即利用最多两个32位的寄存器和一个32位的有符号实数相乘计算一个内存地址,其中一个寄存器可以左移1、2或3位以描述更大的空间。下面举例是汇编程序中常用的方法

mov eax, [ebx]

; 将ebx值指示的内存地址中的4个字节传送到eax中

mov [var], ebx

; 将ebx的内容传送到var的值指示的内存地址中.

mov eax, [esi-4]

; 将esi-4值指示的内存地址中的4个字节传送到eax中

mov [esi+eax], cl

; 将cl的值传送到esi+eax的值指示的内存地址中

mov edx, [esi+4*ebx]

; 将esi+4*ebx值指示的存储中的4个字节传送到edx

下面是违反规则的举例:

mov eax, [ebx-ecx]

; 只能用加法

mov [eax+esi+edi], ebx

; 最多只能有两个寄存器参与运算

2.3 长度规定

在声明内存大小时,在汇编语言中,一般用DB,DW,DD均可声明的存储空间大小汇编esp是什么意思汇编esp是什么意思,这种现实声明才能较好地指导汇编器分配内存空间,但是,对于

mov [ebx], 2

如果没有特殊的标志,则不确认常数2是单字节、双字节,还是双字。对于这些状况,X86提供了三个指示规则标记,分别为BYTE PTR, WORD PTR, and DWORD PTR,如前面举例写成:mov BYTE PTR [ebx], 2,mov WORD PTR [ebx], 2, mov DWORD PTR [ebx], 2,则意思比较清晰。

3 汇编指令

汇编指令通常可以分为数据传送指令、逻辑推导指令和控制流指令。本节将讲述其中最重要的指令,以下标记分别表示寄存器、内存和常数。

<reg32>

32位寄存器 (EAX, EBX, ECX, EDX, ESI, EDI, ESP, or EBP)

<reg16>

16位寄存器 (AX, BX, CX, or DX)

<reg8>

<reg>

任何寄存器

<mem>

内存地址 (e.g., [eax], [var + 4], or dword ptr [eax+ebx])

<con32>

32为常数

<con16>

16位常数

<con8>

8位常数

<con>

任何8位、16位或32位常数

3.1 数据传送指令

esp故障是什么意思_汇编esp是什么意思_汽车esp是什么意思

mov — Move (Opcodes: 88, 89, 8A, 8B, 8C, 8E, ...)

mov指令将第二个操作数(可以是通配符的内容、内存中的内容或值)复制到第一个操作数(寄存器或硬盘)。mov不能用于直接从存储复制到内存,其语法如下所示:

mov <reg>,<reg>

mov <reg>,<mem>

mov <mem>,<reg>

mov <reg>,<const>

mov <mem>,<const>

Examples

mov eax, ebx — 将ebx的值拷贝到eax

mov byte ptr [var], 5 — 将5保存找var指示存储中的一个字节中

push— Push stack (Opcodes: FF, 89, 8A, 8B, 8C, 8E, ...)

push指令将操作数压入内存的栈中,栈是程序设计中一种非常重要的数据结构,其主要用于数组调用过程中,其中ESP只是栈顶。在压栈前,首先将ESP值减4(X86栈增长方向与内存地址编号增长方向相反),然后将操作数内容压入ESP指示的位置。其语法如下所示:

push <reg32>

push <mem>

push <con32>

Examples

push eax — 将eax内容压栈

push [var] — 将var指示的4直接内容压栈

pop— Pop stack

pop指令与push指令相反,它执行的是出栈的工作。它首先将ESP指示的地址中的内容出栈,然后将ESP值加4. 其语法如下所示:

pop <reg32>

pop <mem>

Examples

pop edi — pop the top element of the stack into EDI.

pop [ebx] — pop the top element of thestack into memory at the four bytes starting at location EBX.

lea— Load effective address

lea实际上是一个载入有效地址指令,将第二个操作数表示的地址载入到第一个操作数(寄存器)中。其语法如下所示:

Syntax

lea <reg32>,<mem>

Examples

lea eax, [var] — var指示的地址载入eax中.

lea edi, [ebx+4*esi] — ebx+4*esi表示的地址载入到edi中,这实际是前面所说的寻址机制的一种表示方法.

3.2 算术和逻辑指令

add— Integer Addition

add指令将两个操作数相加,且将相加后的结果保存到第一个操作数中。其语法如下所示:

add <reg>,<reg>

add <reg>,<mem>

add <mem>,<reg>

add <reg>,<con>

add <mem>,<con>

Examples

add eax, 10 — EAX ← EAX + 10

add BYTE PTR [var], 10 — 10与var指示的存储中的一个byte的值相加,并将结果保存在var指示的存储中

sub— Integer Subtraction

sub指令指示第一个操作数减去第二个操作数,并将相加后的值保存在第一个操作数,其语法如下所示:

sub <reg>,<reg>

sub <reg>,<mem>

sub <mem>,<reg>

esp故障是什么意思_汇编esp是什么意思_汽车esp是什么意思

sub <reg>,<con>

sub <mem>,<con>

Examples

sub al, ah — AL ← AL - AH

sub eax, 216 — eax中的值减26,并将计算值保存在eax中

inc, dec— Increment, Decrement

inc,dec分别表示将操作数自加1,自减1,其语法如下所示:

inc <reg>

inc <mem>

dec <reg>

dec <mem>

Examples

dec eax — eax中的值自减1.

inc DWORD PTR [var] — var指示存储中的一个4-byte值自加1

imul— Integer Multiplication

整数相乘指令,它有两种指令格式,一种为两个操作数,将两个操作数的值相加,并将结果保存在第一个操作数中,第一个操作数必须为通配符;第二种格式为三个操作数,其语义为:将第二个和第三个操作数相乘,并将结果保存在第一个操作数中,第一个操作数必须为通配符。其语法如下所示:

imul <reg32>,<reg32>

imul <reg32>,<mem>

imul <reg32>,<reg32>,<con>

imul <reg32>,<mem>,<con>

Examples

imul eax, [var] — eax→ eax * [var]

imul esi, edi, 25 — ESI → EDI * 25

idiv— Integer Division

idiv指令完成整数除法操作,idiv只有一个操作数,此操作数为除数,而被除数则为EDX:EAX中的内容(一个64位的整数),操作的结果有两个别:商和余数,其中商放在eax寄存器中,而余数则放在edx寄存器中。其语法如下所示:

Syntax

idiv <reg32>

idiv <mem>

Examples

idiv DWORD PTR [var]

and, or, xor— Bitwise logical and, or and exclusive or

逻辑与、逻辑或、逻辑异或操作指令,用于操作数的位操作,操作结果放在第一个操作数中。其语法如下所示:

and <reg>,<reg>

and <reg>,<mem>

and <mem>,<reg>

and <reg>,<con>

and <mem>,<con>

or <reg>,<reg>

or <reg>,<mem>

or <mem>,<reg>

or <reg>,<con>

or <mem>,<con>

xor <reg>,<reg>

xor <reg>,<mem>

xor <mem>,<reg>

xor <reg>,<con>

xor <mem>,<con>

Examples

汇编esp是什么意思_汽车esp是什么意思_esp故障是什么意思

and eax, 0fH — 将eax中的钱28位全部置为0,最后4位保持不变.

xor edx, edx — 设置edx中的内容为0.

not— Bitwise Logical Not

位翻转指令,将操作数中的每一位翻转,即0->1, 1->0。其语法如下所示:

not <reg>

not <mem>

Example

not BYTE PTR [var] — 将var指示的一个字节中的所有位翻转.

neg— Negate

取负指令。语法为:

neg <reg>

neg <mem>

Example

neg eax — EAX → - EAX

shl, shr— Shift Left, Shift Right

位移指令,有两个操作数,第一个操作数表示被操作数,第二个操作数指示位移的数量。其语法如下所示:


本文来自电脑杂谈,转载请注明本文网址:
http://xinshanjie.com/a/jisuanjixue/article-122495-1.html

相关阅读
发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

  • 张亚飞
    张亚飞

    不过男同的比例远远大于女同

    • 嫣儿
      嫣儿

      ”“那当初是谁追我追的死去活来最后做了我女朋友

  • 周仲美
    周仲美

    0

  • 扎喜措
    扎喜措

    是国内混乱导致大量农民种植

热点图片
拼命载入中...