1 / 24

The x86 Instruction Set

The x86 Instruction Set. Lecture 17 Fri, Mar 19, 2004. The Instruction Set. A table of x86 instructions: http://www.jegerlehner.ch/intel/IntelCodeTable.pdf. The Runtime Stack. The runtime stack is a portion of memory that used as a stack during program execution.

robert
Download Presentation

The x86 Instruction Set

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The x86 Instruction Set Lecture 17 Fri, Mar 19, 2004

  2. The Instruction Set • A table of x86 instructions: http://www.jegerlehner.ch/intel/IntelCodeTable.pdf

  3. The Runtime Stack • The runtime stack is a portion of memory that used as a stack during program execution. • The address of the top of the stack is stored in the register esp, called the stack pointer. • The stack grows in a “downward” direction. • When values are pushed, esp is decremented. • When values are popped, esp is incremented.

  4. The Runtime Stack • esp points to the “top” of the stack. Stack esp

  5. The Runtime Stack • Push a value and decrement esp. Stack esp

  6. The Runtime Stack • Push another value and decrement esp again. Stack esp

  7. The Runtime Stack • Pop a value and increment esp. Stack esp

  8. The Runtime Stack • Pop another value and increment esp again. Stack esp

  9. The Push and Pop Instructions • The push and pop instructions have the format push source pop destination • source is a register, a memory address, or an immediate value. • destination is a register or a memory address.

  10. The Push and Pop Instructions • The push instruction will decrement the stack pointer and then move source to the stack. • The pop instruction will move the value on the stack to destination and then increment the stack pointer.

  11. Processing the Syntax Tree • The syntax tree is processed in a post-order traversal. • At each node • Process the left subtree. • Process the right subtree. • Process the node.

  12. Using the Stack • As each node of the syntax tree is executed, it will leave its result on the run-time stack. • The next node will pop that result off the stack (if it needs it) and then push its own result onto the stack, and so on.

  13. ASSIGN NAME a MINUS PLUS NUM 5 DEREF DEREF NAME b NAME c Example • The syntax tree for a = b + c – 5 is

  14. Example • Order of execution • NAME – Push the address of a. • NAME – Push the address of b. • DEREF – Push the value of b. • NAME – Push the address of c. • DEREF – Push the value of c. • PLUS – Pop two values, add them, push the result. • NUM – Push 5. • MINUS – Pop two values, subtract them, push the result. • ASSIGN – Pop the value and the address, store the value at the address, push the result.

  15. A NUM Node • A NUM node loads the integer whose value is stored in the node. • For example, to load 5: push $5 • The $ sign means the “immediate” value 5.

  16. A NAME Node • A NAME node pushes the address of the name that is stored in the node. • For example, to push the address a: lea a,%eax push %eax • The instruction “push a,” would push the value at memory address a onto the stack, which is not what we want.

  17. A DEREF Node • A DEREF node expects to find a memory address on top of the stack. • It pushes the value stored at that address. pop %eax push (%eax) • The parentheses mean “the value at the address in the register.” • This is the indirect addressing mode.

  18. The Add Instruction • The add instruction has the format add source,destination • The value at source is added to the value at destination and the result is stored at destination. • source is a register, a memory address, or an immediate value. • destination is a register or a memory address.

  19. A PLUS Node • A PLUS node expects to find two numbers on the stack. • The right operand should be on top. • It pops the values, adds them, and pushes the result. pop %edx pop %eax add %edx,%eax push %eax

  20. An ASSIGN Node • An ASSIGN node expects to find an address and a value on the stack. • The value should be on top. • It pops the value and the address, stores the value at the address, and pushes the value. pop %eax pop %edx mov %eax,(%edx) push %eax

  21. The imul Instruction • The imul instruction performs multiplication of signed integers. • The first format imul source • source is one operand. • eax is the other operand. • The destination is edx:eax, which holds a 64-bit value.

  22. The imul Instruction • The second format imul register,source • source is one operand. • It is a register, a memory address, or an immediate value. • register is the other operand and the destination.

  23. The imul Instruction • The third format imul register,source,immediate • register is the destination. • source is one operand. • It is a register, a memory address, or an immediate value. • immediate is the other operand.

  24. A TIMES Node • A TIMES node expects to find two values on the stack. • It pops them, multiplies them, and pushes the result. pop %eax pop %ecx imul %ecx push %eax

More Related