Difference between revisions of "Fall 2014 SPO600 Assembly Language Presentation"

From CDOT Wiki
Jump to: navigation, search
(Assignment)
(Topics)
 
(31 intermediate revisions by 10 users not shown)
Line 3: Line 3:
 
== Assignment ==
 
== Assignment ==
  
# Select one of the topics below by placing your name in the "Student" column (first come, first served).
+
# Select one of the topics below by placing your name in the "Student" column (first come, first served - one student per topic).
 
# During week 3, research the topic and prepare a '''3- to 5-minute''' presentation to teach the answer to the class.
 
# During week 3, research the topic and prepare a '''3- to 5-minute''' presentation to teach the answer to the class.
# Be prepared to teach this presentation during week 4. You may want to draw whiteboard diagrams, use presentation slides, or have a 1-page handout. Please avoid taking 5 minutes in total for your presentation.
+
# Be prepared to teach this presentation during week 4. You may want to draw whiteboard diagrams, use presentation slides, or have a 1-page handout. Please avoid taking more than 5 minutes in total for your presentation.
 +
 
 +
== Deadlines ==
 +
 
 +
* Topic selection: '''11:35 am, Tuesday, September 16'''
 +
* Presentation ready: '''9:50 am, Tuesday, September 23'''
  
 
== FAQ ==
 
== FAQ ==
  
* Q: How much detail should I go into?
+
* Q: '''How much detail should the presentation include?'''
** A: Each of these topics is pretty small and straightforward. Provide enough detail that your colleagues in this course will know what they need to know going forward. Where appropriate, provide some type of resource for future reference -- a link to an existing web resource, a 1-page handout, or a blog post or wiki page about the topic.
+
** A: Each of these topics is pretty small and straightforward. Provide enough detail that your colleagues in this course will know what they need to know going forward -- the focus is practical knowledge necessary to understand, modify, and write code. Where appropriate, provide some type of resource for future reference -- a link to an existing web resource, a 1-page handout, or a blog post or wiki page about the topic.
  
* Q: How will this be marked?
+
* Q: '''How will this be marked?'''
 
** A: In week 4, I will ask you to write a short blog post summarizing your presentation.
 
** A: In week 4, I will ask you to write a short blog post summarizing your presentation.
  
* Q: What about the topics not selected by a student?
+
* Q: '''What about the topics not selected by a student?'''
 
** A: Feel free to grab a second topic if you're interested. [[User:Chris Tyler|I'll]] teach the unclaimed topics.
 
** A: Feel free to grab a second topic if you're interested. [[User:Chris Tyler|I'll]] teach the unclaimed topics.
  
* Q: Can we work with others preparing our topic?
+
* Q: '''Can we work with others preparing our topic?'''
** A: Yes. Many of these topics are complimentary to another, and it would be great if you coordinated on your presentations.
+
** A: Yes. In many cases, one topic is complimentary to another topic, and it would be great if you coordinated on your presentations.
 +
 
 +
* Q: '''What resources should I use?'''
 +
** A: There are resources on this wiki and on the web (for example, see the [[:Category:Assembly Language|Assembly Language category]] on this wiki). However, the definitive answer to many of these questions will come from the architecture reference manuals for each architecture, or the documentation for the tools. Here are some links to get you started:
 +
*** GAS Manual -  Using as, The GNU Assembler: https://sourceware.org/binutils/docs/as/
 +
*** ARM Aarch64 documentation
 +
**** Instruction Set and Software Developer Manual: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.genc010197a/index.html
 +
**** Procedure Call Reference: http://infocenter.arm.com/help/topic/com.arm.doc.ihi0055b/IHI0055B_aapcs64.pdf
 +
*** x86 CPU Instruction Set and Software Developer Manuals
 +
**** AMD: http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/
 +
**** Intel: http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
 +
*** x86 Assembler Web sites
 +
**** http://ref.x86asm.net/
 +
**** http://sandpile.org/
  
 
== Topics ==
 
== Topics ==
  
 
{|class="wikimedia sortable" border="1" cellpadding="5" cellspacing="0"
 
{|class="wikimedia sortable" border="1" cellpadding="5" cellspacing="0"
!Topic!!Question/Topic Description!!Student
+
!Topic!!Question/Topic Description!!Presenter!!Links to resources (Wiki page, handout, web resources)!!Link to your blog post on this topic
 
|-
 
|-
|x86 Registers||What are the names and sizes of all of the x86_64 registers? Which ones have special significance, unusual operation, or are required for specific operations?||
+
|x86 Registers||What are the names and sizes of all of the x86_64 registers? Why are they named this way? Which ones have special significance, unusual operation, or are required for specific operations?|| Kieran Sedgwick|| ||
 
|-
 
|-
|Aarch64 Registers||What are the names and sizes of all of the Aarch64 registers? Which ones have special significance, unusual operation, or are required for specific operations?||
+
|Aarch64 Registers||What are the names and sizes of all of the Aarch64 registers? Why are they named this way? Which ones have special significance, unusual operation, or are required for specific operations?|| Edwin Lum|| ||
 
|-
 
|-
|Absolute addressing and Immediate values on Aarch64||In Aarch64 systems, the total instruction is limited to 64 bits. Since some bits are required to encode the operation, addressing mode, and registers, the number of bits available to specify an address or immediate value (constant) are limited. What are the limitations? How can you work around these limitations?||
+
|Address and immediate values on Aarch64||In Aarch64 systems, the size of each instruction is limited to 32 bits. Since some bits are required to encode the operation, addressing mode, and registers, the number of bits available to specify an address or immediate value (constant) are much less than the 64 bits required for a full address or integer value on this on this architecture. How are constant values represented, and what are the limitations on the values that can be specified? How can you work around these limitations?|| [[User:Chris Tyler|Chris Tyler]]|| ||
 
|-
 
|-
|NASM Syntax||What is NASM, and what are the basic rules of NASM syntax? How do you use preprocessor directives (such as #include and #define) or equivalent?||
+
|NASM Syntax||What is NASM, and what are the basic rules of NASM syntax? How do you use preprocessor directives (such as #include and #define) or equivalent?|| Omid Djahanpour|| ||
 
|-
 
|-
|GNU x86_64 gas Syntax||What are the basic rules of GNU Assembler (gas) syntax for x86_64 platforms? How do you use preprocessor directives (such as #include or #define) or equivalent?||
+
|GNU x86_64 gas Syntax||What are the basic rules of GNU Assembler (gas) syntax for x86_64 platforms? How do you use preprocessor directives (such as #include or #define) or equivalent?|| Brendan Henderson|| ||
 
|-
 
|-
|GNU aarch64 Syntax||What are the basic rules of GNU Assembler (gas) syntax for aarch64 platforms? How do you use preprocessor directives (such as #include or #define) or equivalent?||
+
|GNU aarch64 Syntax||What are the basic rules of GNU Assembler (gas) syntax for aarch64 platforms? How do you use preprocessor directives (such as #include or #define) or equivalent?|| [[User:Chris Tyler|Chris Tyler]]|| ||
 
|-
 
|-
|Argument storage on x86_64||When a function/procedure is called on an x86_64 Linux system, where are the arguments stored? What if there are many arguments?||
+
|Argument storage on x86_64||When a function/procedure is called on an x86_64 Linux system, where are the arguments stored? What if there are many arguments?|| Adam Sharpe||[http://www.x86-64.org/documentation/abi.pdf Pages 13-22 of this thing]||[http://adamsharpe8.blogspot.ca/2014/09/assembly-generated-from-function-calls.html Blog Post]
 
|-
 
|-
|Argument storage on aarch64||When a function/procedure is called on an aarch64 Linux system, where are the arguments stored? What if there are many arguments?||
+
|Argument storage on aarch64||When a function/procedure is called on an aarch64 Linux system, where are the arguments stored? What if there are many arguments?|| [[User:Chris Tyler|Chris Tyler]] || ||
 
|-
 
|-
|System call numbers on x86_64||What are the system call numbers on an x86_64 Linux system? Where are they defined and how do you use them?||
+
|System call numbers on x86_64||What are the system call numbers on an x86_64 Linux system? Where are they defined and how do you use them?|| [[User:Chris Tyler|Chris Tyler]]|| ||
 
|-
 
|-
|System call numbers on aarch64||What are the system call numbers on an aarch64 Linux system? Where are they defined and how do you use them?||
+
|System call numbers on aarch64||What are the system call numbers on an aarch64 Linux system? Where are they defined and how do you use them?|| [[User:Chris Tyler|Chris Tyler]] || ||
 
|-
 
|-
|PLT||In an ELF file, what is a PLT and how is it used? When does an ELF file not contain a PLT?||
+
|PLT||In an ELF file, what is a PLT and how is it used? When does an ELF file not contain a PLT?|| [[User:Chris Tyler|Chris Tyler]] || ||
 
|-
 
|-
|Static and dynamic linking||What are the differences between static and dynamic linking? Advantages of each from the point of view of performance, resource utilization, and security?||
+
|Assembling using gas||How do you use the GNU assembler (gas) to compile an assembly-language program ("assemble" it) from the command line, producing an executable file? What are some useful command-line options?|| [[User:Chris Tyler|Chris Tyler]] || ||
 
|-
 
|-
|Assembling using gas||How do you use the GNU assembler (gas) to compile an assembly-language program ("assemble" it) from the command line?||
+
|Single-stepping with gdb||How do you execute a program one instruction at a time (single-stepping) using the GNU debugger (gdb)? How do you view register contents between steps?|| Hunter Jansen|| [http://calmlycoding.com:7777 slides], [https://docs.google.com/presentation/d/1pLEKHT13PxNEpJ06Xa_tBwJXVlr8mjBpme7acNL93AI/edit?usp=sharing slides] || [http://rawkamatic.github.io/open%20source/2014/09/22/SPO-Lab3-GDB-Stepping.html blog post] ||
 
|-
 
|-
|Single-stepping with gdb||How do you execute a program one instruction at a time (single-stepping) using the GNU debugger (gdb)? How do you view register contents between steps?||
+
|Dividing integers on x86_64 and aarch64||How do the integer division instructions work on x86_64 and aarch64? How are they different? What are the advantages of each?|| Gabriel Castro|| ||
 
|-
 
|-
|Dividing integers on x86_64 and aarch64||How do the division instructions work on x86_64 and aarch64? How are they different? What are the advantages of each?||
+
|Static and dynamic linking||What are the differences between static and dynamic linking? What are the advantages of each from the point of view of performance, resource utilization, and security?|| Linpei Fan||[http://cs-fundamentals.com/c-programming/static-and-dynamic-linking-in-c.php reference1], [http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dai0242a/ch04.html reference2], [http://stackoverflow.com/questions/1993390/static-linking-vs-dynamic-linking reference3] || [http://linpei.blogspot.ca/2014/09/static-linking-vs-dynamic-linking.html blog post]
 
|-
 
|-
|The Mysterious XOR||x86 and x86_64 code often contains instructions that XOR a register with itself (e.g., <code>xor %eax,%eax</code>). What does this do and why is it used? What is the equivalent in Aarch64?||
+
|The Mysterious XOR||x86 and x86_64 code often contains instructions that XOR a register with itself (e.g., <code>xor %eax,%eax</code>). What does this do and why is it used? What is the equivalent in Aarch64?|| Emmanuel Ho Fidelino|| ||
 
|-
 
|-
 
|}
 
|}

Latest revision as of 20:47, 23 September 2014


Assignment

  1. Select one of the topics below by placing your name in the "Student" column (first come, first served - one student per topic).
  2. During week 3, research the topic and prepare a 3- to 5-minute presentation to teach the answer to the class.
  3. Be prepared to teach this presentation during week 4. You may want to draw whiteboard diagrams, use presentation slides, or have a 1-page handout. Please avoid taking more than 5 minutes in total for your presentation.

Deadlines

  • Topic selection: 11:35 am, Tuesday, September 16
  • Presentation ready: 9:50 am, Tuesday, September 23

FAQ

  • Q: How much detail should the presentation include?
    • A: Each of these topics is pretty small and straightforward. Provide enough detail that your colleagues in this course will know what they need to know going forward -- the focus is practical knowledge necessary to understand, modify, and write code. Where appropriate, provide some type of resource for future reference -- a link to an existing web resource, a 1-page handout, or a blog post or wiki page about the topic.
  • Q: How will this be marked?
    • A: In week 4, I will ask you to write a short blog post summarizing your presentation.
  • Q: What about the topics not selected by a student?
    • A: Feel free to grab a second topic if you're interested. I'll teach the unclaimed topics.
  • Q: Can we work with others preparing our topic?
    • A: Yes. In many cases, one topic is complimentary to another topic, and it would be great if you coordinated on your presentations.

Topics

Topic Question/Topic Description Presenter Links to resources (Wiki page, handout, web resources) Link to your blog post on this topic
x86 Registers What are the names and sizes of all of the x86_64 registers? Why are they named this way? Which ones have special significance, unusual operation, or are required for specific operations? Kieran Sedgwick
Aarch64 Registers What are the names and sizes of all of the Aarch64 registers? Why are they named this way? Which ones have special significance, unusual operation, or are required for specific operations? Edwin Lum
Address and immediate values on Aarch64 In Aarch64 systems, the size of each instruction is limited to 32 bits. Since some bits are required to encode the operation, addressing mode, and registers, the number of bits available to specify an address or immediate value (constant) are much less than the 64 bits required for a full address or integer value on this on this architecture. How are constant values represented, and what are the limitations on the values that can be specified? How can you work around these limitations? Chris Tyler
NASM Syntax What is NASM, and what are the basic rules of NASM syntax? How do you use preprocessor directives (such as #include and #define) or equivalent? Omid Djahanpour
GNU x86_64 gas Syntax What are the basic rules of GNU Assembler (gas) syntax for x86_64 platforms? How do you use preprocessor directives (such as #include or #define) or equivalent? Brendan Henderson
GNU aarch64 Syntax What are the basic rules of GNU Assembler (gas) syntax for aarch64 platforms? How do you use preprocessor directives (such as #include or #define) or equivalent? Chris Tyler
Argument storage on x86_64 When a function/procedure is called on an x86_64 Linux system, where are the arguments stored? What if there are many arguments? Adam Sharpe Pages 13-22 of this thing Blog Post
Argument storage on aarch64 When a function/procedure is called on an aarch64 Linux system, where are the arguments stored? What if there are many arguments? Chris Tyler
System call numbers on x86_64 What are the system call numbers on an x86_64 Linux system? Where are they defined and how do you use them? Chris Tyler
System call numbers on aarch64 What are the system call numbers on an aarch64 Linux system? Where are they defined and how do you use them? Chris Tyler
PLT In an ELF file, what is a PLT and how is it used? When does an ELF file not contain a PLT? Chris Tyler
Assembling using gas How do you use the GNU assembler (gas) to compile an assembly-language program ("assemble" it) from the command line, producing an executable file? What are some useful command-line options? Chris Tyler
Single-stepping with gdb How do you execute a program one instruction at a time (single-stepping) using the GNU debugger (gdb)? How do you view register contents between steps? Hunter Jansen slides, slides blog post
Dividing integers on x86_64 and aarch64 How do the integer division instructions work on x86_64 and aarch64? How are they different? What are the advantages of each? Gabriel Castro
Static and dynamic linking What are the differences between static and dynamic linking? What are the advantages of each from the point of view of performance, resource utilization, and security? Linpei Fan reference1, reference2, reference3 blog post
The Mysterious XOR x86 and x86_64 code often contains instructions that XOR a register with itself (e.g., xor %eax,%eax). What does this do and why is it used? What is the equivalent in Aarch64? Emmanuel Ho Fidelino