Title: CS2422 Assembly Language
1CS2422 Assembly Language System Programming
2Todays Topics (1/2)
- Assignment 3
- Windows (graphics mode) programming.
- Linking to an assembly procedure.
- Setting up Visual C 2005 Express.
3References
- Setting up Platform SDK see the course webpage.
- Setting up Visual C 6.0 to compile and link
assembly code with C or C code included in the
download file - theForgers Win32 API Tutorial http//winprog.org/
tutorial. (Read at least the first two articles.)
4Demo
- The program creates a mosaic effect on your
windows desktop. - You need to set your display to use 24-bit or
32-bit colors. - Using ML.exe /Zi option to enable debugging
directly within your assembly code at Visual C.
(Already done for you if you use VC 2005
Express.)
5Assembly Code to Be Written
- Mosaic(img, resX, resY,
- x, y, blockX, blockY)
6Example Code
- Mosaic_C_version() in main.c shows the algorithm.
- To run the assembly code, remember to comment
out - define MOSAIC_C_VERSION
- The Mosaic procedure in mosaic.asm gives an
example of accessing parameters and local
variables.
7Img a 2D Array
- The img is conceptually 2D, but stored as if it
is a 1D array. - A pixel at location (x, y) is stored at
- imgx y xRes
- Each pixel stores the Red, Green, Blue components
of a color in 4 bytes - struct
- BYTE rgbBlue
- BYTE rgbGreen
- BYTE rgbRed
- BYTE rgbReserved
- RGBQUAD
8Basic Structure of a Windows Program
- WinMain procedure.
- WinProc procedure.
- Section 11.2 explains the above in assembly. The
C version in main.c might be easier to read. - An excellent introductory material can be found
at http//winprog.org/tutorial. (Read at least
the first two articles.)
9WinMain Procedure
- Every Windows application needs a startup
procedure, usually named WinMain, which is
responsible for the following tasks
- Get a handle to the current program
- Load the programs icon and mouse cursor
- Register the programs main window class and
identify the procedure that will process event
messages for the window
- Show and update the main window
- Begin a loop that receives and dispatches messages
10WinProc Procedure
- WinProc receives and processes all event messages
relating to a window - Some events are initiated by clicking and
dragging the mouse, pressing keyboard keys, and
so on - WinProc decodes each message, carries out
application-oriented tasks related to the message
WinProc PROC, hWndDWORD, handle to the
window localMsgDWORD, message
ID wParamDWORD, parameter 1
(varies) lParamDWORD parameter 2 (varies)
(Contents of wParam and lParam vary, depending on
the message.)
11What Will You Learn from This Assignment?
- Linking C and Assembly.
- The first step in Windows programming.
- Array processing.
- Implementation of nontrivial loops.
12Todays Topic (2/2)
- Chapter 1 of Becks System Software book.
13Study Guide
- 1.1 Introduction
- 1.2 System Software and Machine Architecture
- 1.3 The Simplified Instructional Computer (SIC)
- SIC Machine Architecture
- SIC/XE Machine Architecture
- SIC Programming Examples
14Introduction
- Definition of System software
- System software consists of a variety of programs
that support the operation of a computer - E.g. of system software
- Text editor, compiler, loader or linker,
debugger, macro processors, operating system,
database management systems, software engineering
tools, .
15System Software and Machine Architecture (1/2)
- One characteristic in which most system software
differs from application software is machine
dependency - System programs are intended to support the
operation and use of the computer itself, rather
than any particular application.
16System Software and Machine Architecture (2/2)
- Because most system software is
machine-dependent, we must include real machines
and real pieces of software in our study. - Simplified Instructional Computer (SIC)
- SIC is a hypothetical computer that has been
carefully designed to include the hardware
features most often found on real machines, while
avoiding unusual or irrelevant complexities
17The Simplified Instructional Computer (SIC)
- Like many other products, SIC comes in two
versions - The standard model
- An XE version
- extra equipments, extra expensive
- The two versions has been designed to be upward
compatible
18SIC Machine Architecture (1/7)
- Memory
- Memory consists of 8-bit bytes
- Any 3 consecutive bytes form a word (24 bits)
- Total of 32768 (215) bytes in the computer memory
19SIC Machine Architecture (2/7)
- Registers
- Five registers
- Each register is 24 bits in length
20SIC Machine Architecture (3/7)
- Data Formats
- Integers are stored as 24-bit binary number
- 2s complement representation for negative values
- Characters are stored using 8-bit ASCII codes
- No floating-point hardware on the standard
version of SIC
21SIC Machine Architecture (4/7)
- Instruction Formats
- Standard version of SIC
The flag bit x is used to indicate
indexed-addressing mode
22SIC Machine Architecture (5/7)
- Addressing Modes
- There are two addressing modes available
- Indicated by x bit in the instruction
(X) the contents of register X
23SIC Machine Architecture (6/7)
- Instruction Set
- Load and store registers
- LDA, LDX, STA, STX, etc.
- Integer arithmetic operations
- ADD, SUB, MUL, DIV
- All arithmetic operations involve register A and
a word in memory, with the result being left in A - COMP
- Conditional jump instructions
- JLT, JEQ, JGT
- Subroutine linkage
- JSUB, RSUB
- See appendix A, Page 495
24SIC Machine Architecture (7/7)
- Input and Output
- Input and output are performed by transferring 1
byte at a time to or from the rightmost 8 bits of
register A - Test Device TD instruction
- Read Data (RD)
- Write Data (WD)
25SIC Programming Examples (Fig 1.2a)
LDA FIVE STA ALPHA LDCH CHARZ STCH C1 . . .
ALPHA RESW 1 one-word variable FIVE WORD 5 one-wo
rd constant CHARZ BYTE CZ one-byte
constant C1 RESB 1 one-byte variable
26SIC Programming Example (Fig 1.3a)
LDA ALPHA ADD INCR SUB ONE STA BETA LDA GAMM
A ADD INCR SUB ONE STA DELTA ... ... ONE WORD
1 one-word constant ALPHA RESW 1 one-word
variables BETA RESW 1 GAMMA RESW 1 DELTA RESW 1 IN
CR RESW 1
27SIC Programming Example (Fig 1.4a)
LDX ZERO initialize index register to
0 MOVECH LDCH STR1,X load char from STR1 to reg
A STCH STR2,X TIX ELEVEN add 1 to index,
compare to 11 JLT MOVECH loop if less
than . . . STR1 BYTE CTEST
STRING STR2 RESB 11 ZERO WORD 0 ELEVEN WORD 11
28SIC Programming Example (Fig 1.5a)
LDA ZERO initialize index value to
0 STA INDEX ADDLP LDX INDEX load index value to
reg X LDA ALPHA,X load word from ALPHA into reg
A ADD BETA,X STA GAMMA,X store the result in a
word in GAMMA LDA INDEX ADD THREE add 3 to
index value STA INDEX COMP K300 compare new
index value to 300 JLT ADDLP loop if less than
300 ... ... INDEX RESW 1 ALPHA RESW 100 array
variables100 words each BETA RESW 100 GAMMA RESW
100 ZERO WORD 0 one-word constants THREE WORD 3 K3
00 WORD 300
29SIC Programming Example (Fig 1.6)
INLOOP TD INDEV test input device JEQ INLOOP loop
until device is ready RD INDEV read one byte
into register A STCH DATA . . OUTLP TD OUTDEV t
est output device JEQ OUTLP loop until device is
ready LDCH DATA WD OUTDEV write one byte to
output device . . INDEV BYTE XF1 input device
number OUTDEV BYTE X05 output device
number DATA RESB 1
30SIC/XE Machine Architecture (1/13)
- Memory
- Maximum memory available on a SIC/XE system is 1
megabyte (220 bytes)
31SIC/XE Machine Architecture (2/13)
- Registers
- Additional registers are provided by SIC/XE
32SIC/XE Machine Architecture (3/13)
- There is a 48-bit floating-point data type
F2(e-1024)
33SIC/XE Machine Architecture (4/13)
Format 1 (1 byte)
Format 2 (2 bytes)
Format 3 (3 bytes)
Format 4 (4 bytes)
Formats 1 and 2 are instructions that do not
reference memory at all
34SIC/XE Machine Architecture (5/13)
- Addressing modes
- Base relative (n1, i1, b1, p0)
- Program-counter relative (n1, i1, b0, p1)
- Direct (n1, i1, b0, p0)
- Immediate (n0, i1, x0)
- Indirect (n1, i0, x0)
- Indexing (both n i 0 or 1, x1)
- Extended (e1)
35SIC/XE Machine Architecture (6/13)
- Base Relative Addressing Mode
n1, i1, b1, p0, TA(B)disp (0?disp
?4095)
- Program-Counter Relative Addressing Mode
n1, i1, b0, p1, TA(PC)disp (-2048?disp
?2047)
36SIC/XE Machine Architecture (7/13)
n1, i1, b0, p0, TAdisp (0?disp ?4095)
n1, i1, b0, p0, TA(X)disp (with index
addressing mode)
37SIC/XE Machine Architecture (8/13)
- Immediate Addressing Mode
n0, i1, x0, operanddisp
n1, i0, x0, TA(disp)
38SIC/XE Machine Architecture (9/13)
i0, n0, TAbpedisp (SIC standard)
i1, n1, TAdisp (SIC/XE standard)
39SIC/XE Machine Architecture (10/13)
- Addressing Modes Summary (p.499)
40SIC/XE Machine Architecture (11/13)
41SIC/XE Machine Architecture (12/13)
- Instruction Set
- Instructions to load and store the new registers
- LDB, STB, etc.
- Floating-point arithmetic operations
- ADDF, SUBF, MULF, DIVF
- Register move instruction
- RMO
- Register-to-register arithmetic operations
- ADDR, SUBR, MULR, DIVR
- Supervisor call instruction
- SVC
42SIC/XE Machine Architecture (13/13)
- Input and Output
- There are I/O channels that can be used to
perform input and output while the CPU is
executing other instructions
43SIC/XE Programming Examples (Fig 1.2b)
SIC version
SIC/XE version
LDA 5 STA ALPHA LDCH 90 STCH C1 . . . ALP
HA RESW 1 C1 RESB 1
LDA FIVE STA ALPHA LDCH CHARZ STCH C1 . . .
ALPHA RESW 1 FIVE WORD 5 CHARZ BYTE CZ C1 RE
SB 1
44SIC/XE Programming Example (Fig 1.3b)
LDS INCR LDA ALPHA ADDR S,A SUB 1 STA BETA
LDA GAMMA ADDR S,A SUB 1 STA DELTA ... ...
ALPHA RESW 1 one-word variables BETA RESW 1 GAMMA
RESW 1 DELTA RESW 1 INCR RESW 1
45SIC/XE Programming Example (Fig 1.4b)
LDT 11 initialize register T to
11 LDX 0 initialize index register to
0 MOVECH LDCH STR1,X load char from STR1 to reg
A STCH STR2,X store char into STR2 TIXR T add 1
to index, compare to 11 JLT MOVECH loop if less
than 11 . . . STR1 BYTE CTEST
STRING STR2 RESB 11
46SIC/XE Programming Example (Fig 1.5b)
LDS 3 LDT 300 LDX 0 ADDLP LDA ALPHA,X
load from ALPHA to reg A ADD BETA,X STA GAMMA,X
store in a word in GAMMA ADDR S,X add 3 to
index value COMPR X,T compare to
300 JLT ADDLP loop if less than
300 ... ... ALPHA RESW 100 array variables100
words each BETA RESW 100 GAMMA RESW 100
47SIC/XE Programming Example (Fig 1.7b)