oracle汇编01

1: / define numeric label "1"
one: / define symbolic label "one"
/ ... assembler code ...
jmp 1f / jump to first numeric label "1" defined
/ after this instruction
/ (this reference is equivalent to label "two")
jmp 1b / jump to last numeric label "1" defined
/ before this instruction
/ (this reference is equivalent to label "one")
1: / redefine label "1"
two: / define symbolic label "two"
jmp 1b / jump to last numeric label "1" defined
/ before this instruction
/ (this reference is equivalent to label "two")

2.There are fve classes of tokens:

Identifers (symbols)

Keywords

Numerical constants

String Constants

Operators 

3.An x86 instruction statement can consist of four parts:

Label (optional)
Instruction (required)
Operands (instruction specifc)
Comment (optional)

4.Possible operand types and their instruction sufxes are:b Byte (8–bit)w Word (16–bit)

l Long (32–bit) (default)
q Quadword (64–bit)

5.Only jump and call
instructions can use indirect operands.
Immediate operands are prefxed with a dollar sign ($) (ASCII 0x24)
Register names are prefxed with a percent sign (%) (ASCII 0x25)
Memory operands are specifed either by the name of a variable or by a register that contains
the address of a variable. A variable name implies the address of a variable and instructs the
computer to reference the contents of memory at that address. Memory references have the
following syntax:
segment:offset(base, index, scale).

Segment is any of the x86 architecture segment registers. Segment is optional: if specifed,

it must be separated from offset by a colon (:). If segment is omitted, the value of %ds (the
default segment register) is assumed.
Offset is the displacement from segment of the desired memory value. Offset is optional.Base and index can be any of the general 32–bit number registers.Scale is a factor by which index is to be multipled before being added to base to specify

the address of the operand. Scale can have the value of 1, 2, 4, or 8. If scale is not specifed,
the default value is 1.
movl var, %eax
-->Move the contents of memory location var
into number register %eax.
movl %cs:var, %eax
-->Move the contents of memory location var
in the code segment (register %cs) into
number register %eax.
movl $var, %eax
-->Move the address of var into number
register %eax.
movl array_base(%esi), %eax
-->Add the address of memory location
array_base to the contents of number
register %esi to determine an address in
memory. Move the contents of this address
into number register %eax.
movl (%ebx, %esi, 4), %eax
-->Multiply the contents of number register
%esi by 4 and add the result to the contents
of number register %ebx to produce a
memory reference. Move the contents of
this memory location into number register
%eax.

movl struct_base(%ebx, %esi, 4), %eax
-->Multiply the contents of number register
%esi by 4, add the result to the contents of
number register %ebx, and add the result to
the address of struct_base to produce an
address. Move the contents of this address
into number register %eax.
















posted @   MoonXu  阅读(298)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示