Survey
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
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 [email protected] Main topic: 1, IA-32 Manuals 2, Tutorial3_x86Basics 3, Assembly Language Syntax 4, Related links and exercises Volume 1: Basic Architecture Volume 2A: Instruction Set Reference, A-M Volume 2B: Instruction Set Reference, N-Z Download Tutorial3_x86Basics.zip http://www.cse.cuhk.edu.hk/csci2510 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 on Editor Window (assembly code,) click “Go to Disassembly” View the values of variables in Registers, Memory 1 and Watch windows.(in Debug>Window) .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. option casemap:none Case sensitive to avoid messing up function names. include include\msvcrt.inc includelib lib\msvcrt.lib Include external library function definitions. MicroSoft Visual C RunTime ; comment line main PROC label1: jmp label1 main ENDP ; begin of procedure ; define an address label ; jump to label1, i.e., infinite loop! ; end of procedure times2 PROC shl eax, 1 ret times2 ENDP ; begin of procedure ; shift left by 1 bit, i.e., multiply by 2 in binary! ; return ; end of procedure END times2 ; end of this assembly file AND define entry point 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 TWOBYTE FOURBYTE EIGHTBYTE DB DW DWORD DQ 12h 1234h 12345678h 123456789abcdef0h Use DB to define a string, ended with 0 (null terminator) HELLO DB "Hello world!", 0 FORMAT DB "ebx = %d (base 10)", 10, 0 ASCII code of new-line is 10, \n is NOT supported! SIXBYTE DB 6 DUP(99h) Define 6 bytes, with 99h as the content of each byte n DUP(X) means duplicate X n times PI MYREG EQU 3.14159 EQU eax Symbolic constants for MASM substitution mov xor add eax, 0a34abcdfh eax, eax MYREG, ebx ; eax = 0a34abcdfh ; eax = 0 ; eax = eax + ebx Refer to x86Basic.asm for more details and examples. Intel® 64 and IA-32 Architectures Software Developer's Manuals: http://www.intel.com/products/processor/manuals/ 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.