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]
Feb 23, 2016
CSCI 2510 Tutorial 3A “Tutorial3_x86Basics” Program in Assembly
Language
ZONG Wen
Department of Computer Science and EngineeringThe Chinese University of Hong Kong
Main topic:
1, IA-32 Manuals
2, Tutorial3_x86Basics
3, Assembly Language Syntax
4, Related links and exercises
IA-32 Manuals
Volume 1: Basic ArchitectureVolume 2A: Instruction Set Reference, A-MVolume 2B: Instruction Set Reference, N-Z
Tutorial3_x86Basics
Download Tutorial3_x86Basics.ziphttp://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 on Editor Window (assembly code,) click “Go to Disassembly”
Tutorial3_x86Basics
View the values of variables in Registers, Memory 1 and Watch windows.(in Debug->Window)
Assembly Language Syntax
.686Target processor. Use instructions for Pentium class machines.
.MODEL FLAT, StdCallUse the flat memory model. Use Standard calling conventions.
.DATACreate a near data segment. Local variables are declared after this directive.
.CODEIndicates the start of a code segment.
Assembly Language Syntax
option casemap:noneCase sensitive to avoid messing up function names.
include include\msvcrt.incincludelib lib\msvcrt.lib
Include external library function definitions.MicroSoft Visual C RunTime
Assembly Language Syntax
; comment linemain PROC ; begin of procedurelabel1: ; define an address label
jmp label1 ; jump to label1, i.e., infinite loop!main ENDP ; end of procedure
times2 PROC ; begin of procedureshl 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
Assembly Language Syntax
DB, DW, DWORD, DQDefine 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 DB 12hTWOBYTE DW 1234hFOURBYTE DWORD 12345678h EIGHTBYTE DQ 123456789abcdef0h
Assembly Language Syntax
Use DB to define a string, ended with 0 (null terminator)HELLO DB "Hello world!", 0FORMAT DB "ebx = %d (base 10)", 10, 0ASCII 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 byten DUP(X) means duplicate X n times
PI EQU 3.14159MYREG EQU eax
Symbolic constants for MASM substitution
Assembly Language Syntax
Assembly Language Syntax
mov eax, 0a34abcdfh ; eax = 0a34abcdfhxor eax, eax ; eax = 0add MYREG, ebx ; eax = eax + ebx
Refer to x86Basic.asm for more details and examples.
Related link
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.