Download PPT - Department of Computer Science and Engineering, CUHK

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
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.