0% found this document useful (0 votes)
23 views47 pages

Week 11 A

Uploaded by

2dbf02
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
23 views47 pages

Week 11 A

Uploaded by

2dbf02
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PPT, PDF, TXT or read online on Scribd
You are on page 1/ 47

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[] is conceptually 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

Mnemonic Number Special use


A 0 Accumulator
X 1 Index register
L 2 Linkage register
PC 8 Program counter
SW 9 Status word
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

8 1 15
opcode x address

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

Mode Indication Target address calculation


Direct x=0 TA=address
Indexed x=1 TA=address+(X)

(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
LDA ZERO
1.5a)
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

Mnemonic Number Special use


B 3 Base register
S 4 General working register
T 5 General working register
F 6 Floating-point accumulator (48 bits)
SIC/XE Machine Architecture (3/13)
• There is a 48-bit floating-point data type

1 11 36
s exponent fraction

F*2(e-1024)
SIC/XE Machine Architecture (4/13)
• Instruction Formats
8
Format 1 (1 byte)
op
8 4 4
Format 2 (2 bytes) op r1 r2

6 1 1 1 1 1 1 12
Format 3 (3 bytes) op n i x b p e disp

6 1 1 1 1 1 1 20
Format 4 (4 bytes)
op n i x b p e address

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 i x b p e
opcode 1 1 1 0 disp

n=1, i=1, b=1, p=0, TA=(B)+disp (0disp 4095)

• Program-Counter Relative Addressing Mode


n i x b p e
opcode 1 1 0 1 disp

n=1, i=1, b=0, p=1, TA=(PC)+disp (-2048disp 2047)


SIC/XE Machine Architecture (7/13)
• Direct Addressing Mode
n i x b p e
opcode 1 1 0 0 disp

n=1, i=1, b=0, p=0, TA=disp (0disp 4095)

n i x b p e
opcode 1 1 1 0 0 disp

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 i x b p e
opcode 0 1 0 disp

n=0, i=1, x=0, operand=disp

• Indirect Addressing Mode


n i x b p e
opcode 1 0 0 disp

n=1, i=0, x=0, TA=(disp)


SIC/XE Machine Architecture (9/13)
• Simple Addressing Mode
n i x b p e
opcode 0 0 disp

i=0, n=0, TA=bpe+disp (SIC standard)

n i x b p e
opcode 1 1 disp

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 LDA #5
STA ALPHA STA ALPHA
LDCH CHARZ LDCH #90
STCH C1 STCH C1
. .
. .
. .
ALPHA RESW 1 ALPHA RESW 1
FIVE WORD 5 C1 RESB 1
CHARZ BYTE C’Z’
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
SIC/XE Programming Example (Fig 1.7b)

You might also like