470 likes | 587 Views
CS2422 Assembly Language & System Programming. November 21, 2006. Today’s Topics (1/2). Assignment 3 Windows (graphics mode) programming. Linking to an assembly procedure. Setting up Visual C++ 2005 Express. References. Setting up Platform SDK: see the course webpage.
E N D
CS2422 Assembly Language & System Programming November 21, 2006
Today’s Topics (1/2) • Assignment 3 • Windows (graphics mode) programming. • Linking to an assembly procedure. • Setting up Visual C++ 2005 Express.
References • 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 • theForger’s Win32 API Tutorial http://winprog.org/tutorial. (Read at least the first two articles.)
Demo • 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.)
Assembly Code to Be Written Mosaic(img, resX, resY, x, y, blockX, blockY)
Example 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.
Img: a 2D Array • The img[] isconceptually 2D, but stored as if it is a 1D array. • A pixel at location (x, y) is stored at img[x + 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;
Basic 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.)
WinMain 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 program’s icon and mouse cursor • Register the program’s main window class and identify the procedure that will process event messages for the window • Create the main window • Show and update the main window • Begin a loop that receives and dispatches messages
WinProc 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, hWnd:DWORD, ; handle to the window localMsg:DWORD, ; message ID wParam:DWORD, ; parameter 1 (varies) lParam:DWORD ; parameter 2 (varies) (Contents of wParam and lParam vary, depending on the message.)
What Will You Learn from This Assignment? • Linking C and Assembly. • The first step in Windows programming. • Array processing. • Implementation of nontrivial loops.
Today’s Topic (2/2) • Chapter 1 of Beck’s “System Software” book.
Study 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
Introduction • 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, ….
System 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.
System 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
The 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
SIC 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
SIC Machine Architecture (2/7) • Registers • Five registers • Each register is 24 bits in length
SIC Machine Architecture (3/7) • Data Formats • Integers are stored as 24-bit binary number • 2’s complement representation for negative values • Characters are stored using 8-bit ASCII codes • No floating-point hardware on the standard version of SIC
SIC Machine Architecture (4/7) • Instruction Formats • Standard version of SIC The flag bit x is used to indicate indexed-addressing mode
SIC 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
SIC 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
SIC 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)
SIC Programming Examples (Fig 1.2a) LDA FIVE STA ALPHA LDCH CHARZ STCH C1 . . . ALPHA RESW 1 one-word variable FIVE WORD 5 one-word constant CHARZ BYTE C’Z’ one-byte constant C1 RESB 1 one-byte variable
SIC Programming Example (Fig 1.3a) LDA ALPHA ADD INCR SUB ONE STA BETA LDA GAMMA 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 INCR RESW 1
SIC 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 C’TEST STRING’ STR2 RESB 11 ZERO WORD 0 ELEVEN WORD 11
SIC 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 variables—100 words each BETA RESW 100 GAMMA RESW 100 ZERO WORD 0 one-word constants THREE WORD 3 K300 WORD 300
SIC 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 test output device JEQ OUTLP loop until device is ready LDCH DATA WD OUTDEV write one byte to output device . . INDEV BYTE X’F1’ input device number OUTDEV BYTE X’05’ output device number DATA RESB 1
SIC/XE Machine Architecture (1/13) • Memory • Maximum memory available on a SIC/XE system is 1 megabyte (220 bytes)
SIC/XE Machine Architecture (2/13) • Registers • Additional registers are provided by SIC/XE
SIC/XE Machine Architecture (3/13) • There is a 48-bit floating-point data type F*2(e-1024)
SIC/XE Machine Architecture (4/13) • Instruction Formats 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
SIC/XE Machine Architecture (5/13) • Addressing modes • Base relative (n=1, i=1, b=1, p=0) • Program-counter relative (n=1, i=1, b=0, p=1) • Direct (n=1, i=1, b=0, p=0) • Immediate (n=0, i=1, x=0) • Indirect (n=1, i=0, x=0) • Indexing (both n & i = 0 or 1, x=1) • Extended (e=1)
SIC/XE Machine Architecture (6/13) • Base Relative Addressing Mode n=1, i=1, b=1, p=0, TA=(B)+disp (0disp 4095) • Program-Counter Relative Addressing Mode n=1, i=1, b=0, p=1, TA=(PC)+disp (-2048disp 2047)
SIC/XE Machine Architecture (7/13) • Direct Addressing Mode n=1, i=1, b=0, p=0, TA=disp (0disp 4095) n=1, i=1, b=0, p=0, TA=(X)+disp (with index addressing mode)
SIC/XE Machine Architecture (8/13) • Immediate Addressing Mode n=0, i=1, x=0, operand=disp • Indirect Addressing Mode n=1, i=0, x=0, TA=(disp)
SIC/XE Machine Architecture (9/13) • Simple Addressing Mode i=0, n=0, TA=bpe+disp (SIC standard) i=1, n=1, TA=disp (SIC/XE standard)
SIC/XE Machine Architecture (10/13) • Addressing Modes Summary (p.499)
SIC/XE Machine Architecture (11/13) • Instruction Format
SIC/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
SIC/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
SIC/XE Programming Examples (Fig 1.2b) SIC version SIC/XE version LDA FIVE STA ALPHA LDCH CHARZ STCH C1 . . . ALPHA RESW 1 FIVE WORD 5 CHARZ BYTE C’Z’ C1 RESB 1 LDA #5 STA ALPHA LDCH #90 STCH C1 . . . ALPHA RESW 1 C1 RESB 1
SIC/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
SIC/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 C’TEST STRING’ STR2 RESB 11
SIC/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 variables—100 words each BETA RESW 100 GAMMA RESW 100