150 likes | 326 Views
CSCI 2510 Tutorial 3 A “Tutorial3_x86Basics” Program in Assembly Language. ZONG Wen Department of Computer Science and Engineering The Chinese University of Hong Kong wzong@cse.cuhk.edu.hk. Main topic:. 1, IA-32 Manuals 2, Tutorial3_x86Basics 3, Assembly Language Syntax
E N D
CSCI 2510 Tutorial 3A “Tutorial3_x86Basics” Program in Assembly Language ZONG Wen Department of Computer Science and Engineering The Chinese University of Hong Kongwzong@cse.cuhk.edu.hk
Main topic: 1, IA-32 Manuals 2, Tutorial3_x86Basics 3, Assembly Language Syntax 4, Related links and exercises
IA-32Manuals • Volume 1: Basic Architecture • Volume 2A: Instruction Set Reference, A-M • Volume 2B: Instruction Set Reference, N-Z
Tutorial3_x86Basics • Download Tutorial3_x86Basics.zip • http://www.cse.cuhk.edu.hk/csci2510
Tutorial3_x86Basics • Extract Tutorial3_x86Basics.zip • Open Tutorial3_x86Basics.sln (Visual Studio Solution file) in Visual C++ 2008 • Press F7 to Build Solution (assemble) • Antivirus software may need to be temporarily shutdown to avoid false alarm • Add a Break Point . Press F10 to Start Debugging • Right click onEditor Window (assembly code,) click “Go to Disassembly”
Tutorial3_x86Basics • View the values of variables in Registers, Memory 1 and Watch windows.(in Debug->Window)
AssemblyLanguageSyntax • .686 • Target processor. Use instructions for Pentium class machines. • .MODEL FLAT, StdCall • Use the flat memory model. Use Standard calling conventions. • .DATA • Create a near data segment. Local variables are declared after this directive. • .CODE • Indicates the start of a code segment.
AssemblyLanguageSyntax • option casemap:none • Case sensitive to avoid messing up function names. • include include\msvcrt.inc • includeliblib\msvcrt.lib • Include external library function definitions. • MicroSoftVisual C RunTime
AssemblyLanguageSyntax • ; comment line • main PROC ; begin of procedure • label1: ; define an address label • jmp label1 ; jump to label1, i.e., infinite loop! • main ENDP ; end of procedure • times2 PROC ; begin of procedure • shl eax, 1 ; shift left by 1 bit, i.e., multiply by 2 in binary! • ret ; return • times2 ENDP ; end of procedure • END times2 ;end of this assembly file AND define entry point
AssemblyLanguageSyntax • DB, DW, DWORD, DQ • Define 1-byte, 2-byte, 4-byte, 8-byte data items. • Intel uses little-endian, i.e. the least significant byte of a word is stored at its lowest address. • Examples: • SINGLEBYTE DB12h • TWOBYTEDW1234h • FOURBYTE DWORD12345678h • EIGHTBYTE DQ123456789abcdef0h
AssemblyLanguageSyntax • Use DB to define a string, ended with 0 (null terminator) • HELLODB"Hello world!", 0 • FORMATDB"ebx = %d (base 10)", 10, 0 • ASCII code of new-line is 10, \n is NOT supported! • SIXBYTE DB6 DUP(99h) • Define 6 bytes, with 99h as the content of each byte • n DUP(X) means duplicate X n times • PI EQU 3.14159 • MYREG EQU eax • Symbolic constants for MASM substitution
AssemblyLanguageSyntax • moveax, 0a34abcdfh;eax = 0a34abcdfh • xoreax, eax ;eax = 0 • addMYREG, ebx ;eax = eax + ebx • Refer to x86Basic.asm for more details and examples.
Relatedlink • Intel® 64 and IA-32 Architectures Software Developer's Manuals: • http://www.intel.com/products/processor/manuals/
Exercises • Define two 32-bit integers in data segment, compute their average (floored to integer), and use crt_printf() to output the result. • Try to use crt_scanf() to read a 32-bit integer from user, multiply it by 2, and output the result.