331 lines
12 KiB
Plaintext
331 lines
12 KiB
Plaintext
|
|
INTRODUCTION TO ASSEMBLY LANGUAGE PROGRAMMING
|
|
|
|
CHARLES R. SMITH
|
|
|
|
REPRINTED FROM: THE MAPLE ORCHARD
|
|
BOX 696, STATION B
|
|
WILLOWDALE, ONTARIO
|
|
|
|
WHAT IS ASSEMBLER AND MACHINE LANGUAGE ?
|
|
|
|
MOST OF US HAVE SOME FAMILIARITY WITH BASIC, WITH ITS ENGLISH LIKE
|
|
COMMANDS SUCH AS 'PRINT', 'INPUT' AND 'FOR .. NEXT'. THERE ARE OTHER
|
|
HIGH-LEVEL LANGUAGES, LIKE FORTRAN AND PASCAL, WHICH SIMILARLY ARE
|
|
FORMED OF ENGLISH LIKE COMMANDS. THE APPLE'S CENTRAL PROCESSING UNIT
|
|
(CPU) CANNOT UNDERSTAND SUCH ENGLISH COMMANDS, BUT INSTEAD THE CPU
|
|
MUST 'INTERPRET' THE COMMANDS OR 'TRANSLATE' THEM INTO A FORM WHICH IT
|
|
CAN UNDERSTAND. WHEN RUNNING A PROGRAM IN BASIC, THE APPLE TAKES EACH
|
|
LINE OF THE PROGRAM AND INTERPRETS IT INTO A MACHINE LANGUAGE FORM
|
|
WHICH FOR THE CPU. ONCE INTERPRETED, THE CPU THEN EXECUTES THE LINE.
|
|
APPLESOFT IS THEREFORE CALLED A 'BASIC INTERPRETER' OR IS AN
|
|
'INTERPRETED BASIC'.
|
|
|
|
THE OPPOSITE OF THE HIGH-LEVEL, STRUCTURED LANGUAGES ARE ASSEMBLER AND
|
|
MACHINE LANGUAGE. THE TERMS 'ASSEMBLY LANGUAGE' AND 'MACHINE LANGUAGE'
|
|
ARE OFTEN USED INTERCHANGABLY, ALTHOUGH THERE IS A DIFFERENCE.
|
|
PROGRAMMING IN MACHINE LANGUAGE IS ACCOMPLISHED WHEN HEXADECIMAL OR
|
|
BINARY DATA IS LOADED INTO THE COMPUTER BYTE-BY-BYTE (EG. ENTERING THE
|
|
MONITOR BY CALL -151 AND INPUTTING '300: A9 0A ...'). WHEN COMPUTERS
|
|
WERE IN THEIR INFANCY, THIS WAS THE ONLY OPTION AVAILABLE. THIS FORM
|
|
OF PROGRAMMING CAN ONLY BE INTELLIGIBLE TO PEOPLE WHO THINK LIKE A
|
|
COMPUTER. TO WE LESSER MORTALS, WRITING A PROGRAM IN MACHINE LANGUAGE
|
|
IS THE ULTIMATE EXERCISE IN FRUSTRATION. (AN ASIDE: WHEN STEVE
|
|
WOZNIAK AND STEVE JOBS FIRST BUILT AN APPLE I COMPUTER, THEY TOOK IT
|
|
TO PARTIES AND ENTERED HUNDREDS OF HEX CODES BY HAND JUST TO LOAD IN A
|
|
PROGRAM TO DEMONSTRATE THIS FIRST APPLE'S ABILITY. ALLEGEDLY, DOS WAS
|
|
FIRST WRITTEN THIS WAY!)
|
|
|
|
ENTER ASSEMBLERS. AN ASSEMBLER IS SIMPLY A TOOL WHICH ALLOWS A PERSON
|
|
TO WRITE A PROGRAM USING SOMEWHAT MORE INTELLIGIBLE COMMANDS, AND THEN
|
|
THE ASSEMBLER PROGRAM CONVERTS ("ASSEMBLES") THE ENGLISH-LIKE COMMANDS
|
|
INTO THE CORRESPONDING MACHINE-LANGUAGE CODE.
|
|
|
|
WHILE THERE IS A DEFINITE AND SIGNIFICANT DIFFERENCE BETWEEN
|
|
'ASSEMBLY' LANGUAGE AND 'MACHINE' LANGUAGE, THE TWO TERMS ARE OFTEN
|
|
USED INTERCHANGABLY. THROUGHOUT THIS ARTICLE, SUCH INTERCHANGABILITY
|
|
SHALL BE USED.
|
|
|
|
|
|
WHY PROGRAM IN MACHINE LANGUAGE ?
|
|
|
|
IF ASSEMBLY LANGUAGE IS TOUGHER THAN BASIC, WHY BOTHER BEING A GLUTTON
|
|
FOR PUNISHMENT? IS THERE SOMETHING TO BE SAID FOR SUCH AN ARCANE
|
|
LANGUAGE? CONSIDER THESE THREE REASONS: SPEED, FLEXIBILITY AND MEMORY
|
|
MANAGEMENT.
|
|
|
|
THE MOST PROMINENT BENEFIT OF A MACHINE LANGUAGE PROGRAM CAN BE SEEN
|
|
ANYTIME YOU PLAY A COMMERCIALLY-PRODUCED, ARCADE STYLE GAME. SUCH
|
|
GAMES ARE INVARIABLY WRITTEN ON AN ASSEMBLER (THE PEOPLE AT
|
|
SOUTHWESTERN DATA SYSTEMS TELL ME THAT THE GAMES FROM SIRIUS ARE
|
|
WRITTEN ON MERLIN). THE EXECUTION SPEED OF A MACHINE LANGUAGE PROGRAM
|
|
IS MUCH FASTER THAN A CORRESPONDING BASIC PROGRAM ARCADE QUALITY GAMES
|
|
SIMPLY CANNOT BE WRITTEN IN BASIC. EVEN BASIC WHICH HAS BEEN COMPILED
|
|
|
|
|
|
|
|
INTO MACHINE LANGUAGE (BY APPLESOFT COMPILERS SUCH AS TASC OR
|
|
SPEEDSTAR) IS STILL SLOWER AND MORE MEMORY-HUNGRY THAN AN EQUIVALENT
|
|
PROGRAM WRITTEN IN ASSEMBLER. THE ADVANTAGE OF SPEED CAN BE USED IN
|
|
OTHER SITUATIONS WHICH WILL SIGNIFICANTLY ENHANCE THE APPLE'S
|
|
CAPABILITY. SORTING, MATRIX OPERATIONS AND DISK UTILITIES ARE BUT A
|
|
FEW REASONS TO USE THE SPEED OF MACHINE LANGUAGE.
|
|
|
|
THE SECOND REASON TO PROGRAM IN MACHINE LANGUAGE IS THE INCREASED
|
|
FLEXIBILITY WHICH IT OFFERS. THE COMMANDS IN APPLESOFT CAN BE ENHANCED
|
|
BY THE USE OF SHORT MACHINE LANGUAGE ROUTINES HIDDEN AWAY IN MEMORY.
|
|
PRINT FORMATTING FUNCTIONS, SOUND GENERATION, SORTING, STRING HANDLING
|
|
AND SWAPPING, DECIMAL TO HEX CONVERSIONS, GARBAGE COLLECTION AND
|
|
MEMORY CLEARANCE, AND ARRAY OPERATIONS ARE BUT SOME OF THE MORE
|
|
COMMONLY USED SUBROUTINES. WHILE SUCH MACHINE LANGUAGE ENHANCEMENTS
|
|
ARE AVAILABLE COMMERCIALLY, THEY CAN ALSO BE HAD AT A VERY LOW COST,
|
|
AS THEY ARE LISTED IN SUCH PUBLICATIONS AS NIBBLE AND CALL-APPLE.
|
|
|
|
THE THIRD ADVANTAGE RELATES TO MEMORY MANAGEMENT. MACHINE LANGUAGE
|
|
PROGRAMS ARE MORE EFFICIENT IN THEIR COMSUMPTION OF MEMORY THAN ARE
|
|
THEIR BASIC COUNTERPARTS. BECAUSE OF THIS, IT IS POSSIBLE TO HAVE
|
|
SEVERAL MACHINE LANGUAGE ROUTINES RESIDING IN MEMORY CUNCURRENTLY,
|
|
THEREBY ENHANCING APPLESOFT WHILE AT THE SAME TIME AVOIDING A
|
|
SIGNIFICANT REDUCTION IN THE MEMORY AVAILABLE TO THE USER.
|
|
|
|
|
|
WHAT IS NEEDED TO GET STARTED
|
|
|
|
TO BEGIN PROGRAMMING IN ASSEMBLER/ MACHINE LANGUAGE, IT IS NOT
|
|
NECESSARY TO PURCHASE ANY SOFTWARE TOOLS. A GOOD BOOK, HOWEVER, CAN BE
|
|
INVALUABLE. ONCE YOUR INTEREST IS SPARKED, YOU MAY DEVELOP A SUDDEN
|
|
URGE TO PURCHASE AN ASSEMBLER. OTHER MACHINE LANGUAGE UTILITIES ARE
|
|
HELPFUL.
|
|
|
|
THERE ARE THREE DIFFERENT LEVELS OF SOPHISTICATION AT WHICH YOU MAY
|
|
ENTER MACHINE LANGUAGE PROGRAMMING:
|
|
|
|
1) MACHINE LANGUAGE USING THE MONITOR
|
|
2) ASSEMBLY LANGUAGE USING THE MINI-ASSEMBLER
|
|
3) ASSEMBLY LANGUAGE USING AN ASSEMBLER.
|
|
|
|
LET'S LOOK AT EACH OF THESE IN ORDER.
|
|
|
|
|
|
MACHINE LANGUAGE USING THE MONITOR
|
|
|
|
ALTHOUGH NOT THE MOST FLEXIBLE APPROACH TO MACHINE LANGUAGE, THIS IS
|
|
THE CHEAPEST ROUTE TO GO, AND IT FORMS A GOOD STARTING PLACE. THE WAY
|
|
TO BEGIN IS TO EXIT APPLESOFT AND GET INTO THE MONITOR BY MEANS OF THE
|
|
COMMAND:
|
|
|
|
]CALL -151
|
|
|
|
WHICH YIELDS THE '*' PROMPT.
|
|
|
|
|
|
FROM HERE WE CAN ENTER A PROGRAM BY GIVING THE STARTING ADDRESS AND
|
|
THE HEXADECIMAL DATA. TRY THE FOLLOWING:
|
|
|
|
*300:AD 30 C0 88 D0 FD 4C 00 30 <RET>
|
|
|
|
WHERE YOU ENTERED THE NUMBER 300, A COLON, THEN 9 SETS OF HEXADECIMAL
|
|
DATA. BE SURE THAT YOU DO NOT LEAVE A SPACE BETWEEN THE COLON AND THE
|
|
FIRST NUMBER. AT THE END OF THE LINE, ENTER A <CARRIAGE RETURN>. UP TO
|
|
|
|
|
|
|
|
85 HEXADECIMAL NUMBERS CAN BE ENTERED AT ONCE THIS WAY.
|
|
|
|
WHAT THIS PROGRAM DOES IS TOGGLE THE SPEAKER BY ADDRESSING ITS MEMORY
|
|
LOCATIO (AD 30 C0), COUNTING DOWNWARDS FROM 255 TO 0 (88 D0 FD) AND
|
|
THEN JUMPING BACK TO THE START (4C 00 30). IN OTHER WORDS, THIS SHORT
|
|
ROUTINE KEEPS A CONSTANT TONE GOING ON THE SPEAKER UNTIL YOU HIT
|
|
<RESET> TO GET OUT OF IT. TO START THIS CPROGRAM ONCE YOU HAVE TYPED
|
|
IN THE ABOVE LINE, SIMPLY GO TO LOCATION $300 AND DO WHAT'S THERE BY
|
|
THE COMMAND:
|
|
|
|
*300G <RET>
|
|
|
|
YOU HAVE JUST ENTERED YOUR FIRST MACHINE LANGUAGE PROGRAM (THIS
|
|
PROGRAM EXAMPLE IS COURTESY OF SC MACRO ASSEMBLER).
|
|
|
|
NOW GO ON TO GREATER THINGS. GRAB AN ASSEMBLY/MACHINE LANGUAGE LISTING
|
|
AND ENTER IT INTO YOUR COMPUTER. IF YOU ARE ENTERING AN ASSEMBLY
|
|
LISTING, YOU WILL SEE THE HEX CODE IN THE LEFT HAND COLUMNS. FOR
|
|
EXAMPLE, THE ABOVE PROGRAM LOOKS LIKE:
|
|
|
|
0300 - AD 30 C0 1 TONE LDA $C030 0303 - 88 2 LOOP DEY 0304 - D0 FD 3
|
|
BNE LOOP 0306 - 4C 00 03 4 JMP TONE
|
|
|
|
REMEMBER TO SAVE YOUR WORK ON DISK. THIS IS DONE WITH THE BSAVE
|
|
COMMAND. IT IS NECESSARY TO SPECIFY THE STARTING ADDRESS AND LENGTH
|
|
PARAMETERS USING THE 'A$___' AND 'L$___' COMMANDS. IF A PROGRAM WENT
|
|
FROM 0300 TO 0320, IT WOULD BE (HEX) 20 OR (DECIMAL) 32 BYTES LONG.
|
|
THEREFORE IT WOULD BE SAVED BY THE COMMAND:
|
|
|
|
*BSAVE MYPROGRAM,A$300,L$20
|
|
|
|
WHERE A$ IS THE STARTING ADDRESS IN HEXADECIMAL AND L$ IS THE LENGTH
|
|
IN HEX. IT COULD ALSO BE SAVED BY THE COMMAND:
|
|
|
|
*BSAVE MYPROGRAM,A768,L32
|
|
|
|
WHERE A IS THE STARTING ADDRESS IN DECIMAL (768=300 HEX) AND L IS THE
|
|
LENGTH IN BYTES.
|
|
|
|
TO CHECK A PROGRAM LISTING, ENTER THE START AND END ADDRESS, SEPERATED
|
|
BY A PERIOD. FOR THE SHORT TONE PROGRAM ABOVE, ENTER:
|
|
|
|
*300.308 <RET>
|
|
|
|
IF YOU WANT TO SEE THE DISASSEMBLED CODE, ENTER THE STARTING ADDRESS
|
|
AND "L" TO LIST 20 COMMANDS. TO SEE THIS PROGRAM, ENTER:
|
|
|
|
*300L <RET>
|
|
|
|
(TO MAKE THE ENTRY AND CORRECTION OF MACHINE LANGUAGE PROGRAMS, ONE OF
|
|
THE DISKS FROM THE INTERNATIONAL APPLE CORE (DISK 25, MACHINE LANGUAGE
|
|
UTILITIES) CONTAINS A UTILITY TO FACILITATE THIS PROCESS. IT IS CALLED
|
|
BEU (FOR BINARY ENTRY UTILITY) AND WILL LOCATE ITSELF EITHER ON A 16K
|
|
RAM CARD OR IN THE APPLE'S 48K RAM.)
|
|
|
|
PROGRAMMING WITH THE MINI-ASSEMBLER
|
|
|
|
IN THE ORIGINAL APPLE II MACHINE WAS A MONITOR FUNCTION ENTITLED THE
|
|
"MINI-ASSEMBLER". ITS JOB WAS TO FACILITATE ENTRY OF MACHINE CODE INTO
|
|
THE COMPUTER. WHEN APPLESOFT WAS DEVELOPED FOR THE APPLE II PLUS, THIS
|
|
FUNCTION (ALONG WITH STEP AND TRACE IN THE MONITOR ROM) WERE DELETED.
|
|
THAT IS THE BAD NEWS. NOW FOR THE GOOD NEWS. IF YOU HAVE A 16K RAM
|
|
CARD, LOADING INTEGER BASIC UPON BOOTING UP THE DOS 3.3 SYSTEM MASTER
|
|
|
|
|
|
|
|
DISK WILL LOAD THE MINI-ASSEMBLER INTO YOUR MACHINE. THIS CAN BE
|
|
ACCESSED BY ENTERING INTEGER WITH THE COMMAND:
|
|
|
|
]INT
|
|
|
|
WHICH YIELDS THE '>' PROMPT. THEN ENTER:
|
|
|
|
>CALL -151
|
|
|
|
TO GET THE MONITOR '*' PROMPT. THEN GO TO THE MINI-ASSEMBLER WITH THE
|
|
COMMAND:
|
|
|
|
*F666G
|
|
|
|
WHICH YIELDS THE EXCLAMATION (!) PROMPT.
|
|
|
|
THE MINI-ASSEMBLER IS STILL AVAILABLE TO THE OWNER OF A 48K APPLE ][
|
|
PLUS, AS IT HAS BEEN MODIFIED AND INCLUDED ON THE IAC DISK #25.
|
|
INSTRUCTIONS FOR ITS USE ARE GIVEN IN AN ACCOMPANYING FILE, WHILE MORE
|
|
COMPLETE INSTRUCTIONS ARE GIVEN IN THE APPLE ][ REFERENCE MANUAL.
|
|
APPLE //E OWNERS CAN ACCESS THE MINI-ASSEMBLER THROUGH INTEGER BASIC.
|
|
|
|
3) ASSEMBLER
|
|
|
|
ONCE YOU'VE GOTTEN YOUR FEET WET BY GAINING ACCESS TO THE MONITOR AND
|
|
ENTERING A HEX LISTING, YOU WILL REALIZE THE FACT THAT THERE HAS TO BE
|
|
A BETTER WAY. OBTAINING AN ASSEMBLER IS THAT WAY. THERE ARE AT LEAST
|
|
TEN COMMERCIALLY AVAILABLE EDITOR/ASSEMBLERS, AND THE PERFECT ONE IS
|
|
PROBABLY STILL TO BE WRITTEN. BUYING AN ASSEMBLER IS LIKE OBTAINING
|
|
ANY OTHER SOFTWARE, AS THE AMOUNT OF MONEY TO BE SPENT AND THE
|
|
CONFIGURATION OF YOUR MACHINE WILL BE CONTROLLING FACTORS. SEVERAL
|
|
ASSEMBLERS ARE REVIEWED IN THIS ISSUE. A PUBLIC DOMAIN ASSEMBLER
|
|
CALLED MASM IS INCLUDED IN THE IAC'S SPECIAL MACHINE LANGUAGE UTILITY
|
|
DISK.
|
|
|
|
OTHER AIDS
|
|
|
|
OTHER TYPES OF AIDS ARE ALSO WORTHY OF CONSIDERATION. A DISASSEMBLER
|
|
IS A HANDY TOOL WHICH WILL PERMIT YOU TO TAKE MACHINE LANGUAGE
|
|
(HEXADECIMAL) CODE AND RE-CONVERT IT INTO AN ASSEMBLER SOURCE LISTING.
|
|
FROM THERE, YOU CAN EDIT, ALTER AND RE-ASSEMBLE THE CODE TO MAKE IT
|
|
FUNCTION IN A DIFFERENT MANNER OR AT A NEW MEMORY LOCATION. A
|
|
DISASSEMBLER IS AVAILABLE IN THE APPLE'S MONITOR AND IS ABLE TO
|
|
DISASSEMBLE TO THE SCREEN, USING THE
|
|
|
|
*XXXX L <RETURN>
|
|
|
|
COMMAND, WHERE XXXX IS THE MEMORY LOCATION AT WHICH TO BEGIN
|
|
DISASSEMBLY. A PUBLIC DOMAIN DISASSEMBLER IS INCLUDED ON THE MACHINE
|
|
LANGUAGE DISK, AND SOME VERY GOOD ASSEMBLERS ARE INCLUDED WITH SOME
|
|
ASSEMBLER AS PART OF THE PACKAGE (EG. MERLIN AND LISA). OTHERS ARE
|
|
AVAILABLE AS A STAND-ALONE PRODUCT (SUCH AS DISASM FROM RAK-WARE).
|
|
|
|
DEBUGGERS ARE FOR THOSE WHO ARE VERY SERIOUS - THEY PERMIT STEP AND
|
|
TRACE FUNCTIONS AND A HOST OF OTHER ADVANCED FEATURES. TWO EXAMPLES
|
|
OF COMMERCIAL PRODUCTS ARE BUG BYTER AND MUNCH-A-BUG. BEU ON THE
|
|
MACHINE LANGUAGE DISK ALSO CONTAINS DEBUG ROUTINES.
|
|
|
|
THERE IS EVEN A NEW PRODUCT WHICH WILL TURN YOUR MACHINE INTO A
|
|
'VISIBLE' APPLE AS IT SHOWS YOU ON THE HI-RES SCREEN HOW YOUR APPLE
|
|
WORKS, DISPLAYING THE INSTRUCTIONS, REGISTERS, FLAGS AND MEMORY
|
|
LOCATIONS AS IT EXECUTES A PROGRAM ONE STEP AT A TIME.
|
|
|
|
|
|
|
|
|
|
AND WHERE WOULD WE BE WITHOUT BOOKS? A VARIETY ARE AVAILABLE, EACH ONE
|
|
FOR A SLIGHTLY DIFFERENT READER. THERE ARE SOME GENERAL REFERENCES ON
|
|
PROGRAMMING THE 6502 MICROPROCESSORS, SEVERAL GOOD BOOKS SPECIFICALLY
|
|
WRITTEN FOR APPLE 6502 MACHINE LANGUAGE (REVIEWED IN THIS ISSUE), AND
|
|
BOOKS WHICH SERVE AS A ROAD-MAP OR ATLAS TO THE APPLE'S INTERNALS
|
|
(ALSO REVIEWED HERE). MUCH IS WRITTEN IN THE MONTHLY MAGAZINES, AND
|
|
THERE IS EVEN A MONTHLY PUBLICATION ON MACHINE LANGUAGE PROGAMMING.
|
|
BUT THE BEST STARTING PLACE IS THE APPLE ][ REFERENCE MANUAL, WHICH
|
|
LISTS THE OPCODES AVAILABLE ON THE 6502 AND SOME IMPORTANT INTERNAL
|
|
ROUTINES.
|
|
|
|
WHEN ALL IS SAID AND DONE, A PERSON WHO KNOWS A FEW BASIC COMMANDS CAN
|
|
EASILY FIND THEIR WAY AROUND MACHINE LANGUAGE. THERE IS A CERTAIN JOY
|
|
IN ENTERING, DEBUGGING AND RUNNING A PROGRAM, BE IT IN BASIC,
|
|
ASSEMBLER OR WHATEVER. AND ISN'T THAT JOY A BIG REASON FOR OWNING AN
|
|
APPLE?
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|