ÍACHINE ÌANGUAGE LESSON FOR BEGINNERS #3 ÄATE - ÍARCH 17, 1994 ÔIME - 10:30 PM ÅÓÔ <[ÔONY] Á.ÔÏÌÌÅ> ÏK, THE LAST THING WE WERE COVERING LAST WEEK WAS THE CONCEPT OF MNEMONIC INSTRUCTIONS LIKE THE "ÌÄÁ" INSTRUCTION IN ÍÌ. <[ÔONY] Á.ÔÏÌÌÅ> ÍNEMONICS ARE THE CONVENTIONAL ABBREVIATIONS FOR TYPING IN ÍÌ INSTRUCTIONS WHEN USING AN ASSEMBLER OR AN ÍÌ MONITOR. <[ÔONY] Á.ÔÏÌÌÅ> ÔHEY HAVE NO REAL RELATIONSHIP TO THE ACTUAL INSTRUCTION, WHICH IS JUST A NUMBER, EXCEPT THAT THEY JUST REPRESENT THE INSTRUCTION SO THAT WE DON'T HAVE TO REMEMBER ALL THE DIFFERENT NUMBERS FOR THE COMMANDS. <ÇÅÏÓ-ÔÉÍ> AFK <[ÔONY] Á.ÔÏÌÌÅ> ÔHE "ÌÄÁ" INSTRUCTION HAS SEVERAL DIFFERENT FORMS, ALL OF WHICH ARE REPRESENTED BY THE "ÌÄÁ" MNEMONIC (ÌOAÄ ÁCCUMULATOR). <[ÔONY] Á.ÔÏÌÌÅ> ÆOR EXAMPLE, THE TWO INSTRUCTIONS ÌÄÁ #$05 AND ÌÄÁ $05 ARE DIFFERENT INSTRUCTIONS BUT BOTH LOAD THE ACCUMULATOR REGISTER WITH SOME SORT OF DATA. <[ÔONY] Á.ÔÏÌÌÅ> ÆRANK, YOU DOWNLOADED THE "MEGAMON" MONITOR PROGRAM, CORRECT? <[ÆRANK] ÂÕÆÆ.ÐÈÏÏÎ> YES <[ÔONY] Á.ÔÏÌÌÅ> ÏK, WELL TONIGHT É WILL GIVE YOU AN EXAMPLE ÍÌ PROGRAM TO TRY OUT WITH THE MEGAMON MONITOR. <[ÔONY] Á.ÔÏÌÌÅ> ÉT IS PERHAPS THE BEST WAY TO TEACH BOTH THE CONCEPT OF AN ÍÌ PROGRAM AND HOW TO USE THE MONITOR. <[ÔONY] Á.ÔÏÌÌÅ> ÔHE MEGAMON PROGRAM IS STORED ON DISK UNDER THE NAME "MEGAMON.40950". ÔHE REASON THIS NAME IS USED IS BECAUSE 40950 IS THE MEMORY ADDRESS THAT MEGAMON LOADS INTO MEMORY AT WHEN YOU ÌÏÁÄ THE PROGRAM. <[ÔONY] Á.ÔÏÌÌÅ> ÔO LOAD IT YOU MUST TYPE LOAD"MEGAMON.40950",8,1 AND PRESS ÒÅÔÕÒÎ. ÙOU MUST REMEMBER TO PUT ",8,1" AT THE END OF THE ÌÏÁÄ COMMAND TO LOAD THE PROGRAM IN AT THE CORRECT ADDRESS. <[ÔONY] Á.ÔÏÌÌÅ> ÏNCE THE PROGRAM IS LOADED, YOU SHOULD IMMEDIATELY TYPE THE COMMAND ÓÙÓ40950 AND PRESS ÒÅÔÕÒÎ. ÔHIS TELLS ÂÁÓÉÃ TO ACTUALLY START RUNNING THE ÍÌ PROGRAM THAT IS IN MEMORY AT ADDRESS 40950. <[ÔONY] Á.ÔÏÌÌÅ> ×HEN THE PROGRAM RUNS, YOU WILL SEE THE SCREEN CLEAR AND THE MONITOR WILL PRINT AN INTRODUCTION AND THEN A PROMPT FOR YOU TO TYPE INPUT. <[ÔONY] Á.ÔÏÌÌÅ> ÙOU WILL SEE A LINE ABOVE THE CURSOR THAT LOOKS SOMETHING LIKE THIS: <[ÔONY] Á.ÔÏÌÌÅ> PC AR XR YR SP SR <[ÔONY] Á.ÔÏÌÌÅ> ; 9FFF 05 20 32 F0 30 <[ÔONY] Á.ÔÏÌÌÅ> ÔHE NUMBERS LIKE THE "9FFF" PROBABLY WON'T BE THE SAME AS É HAVE RIGHT HERE. <[ÔONY] Á.ÔÏÌÌÅ> ×HAT THESE TWO LINES TELL YOU IS THE VALUES OF ALL THE INTERNAL REGISTERS... ÔHE PROGRAM COUNTER (ÐÃ), ACCUMULATOR (ÁÒ), Ø REGISTER (ØÒ), Ù REGISTER (ÙÒ), ÓTACK POINTER (ÓÐ), AND STATUS REGISTER (ÓÒ) <[ÔONY] Á.ÔÏÌÌÅ> ÔHIS IS A DIAGNOSTIC TOOL FOR CHECKING YOUR ÍÌ PROGRAM TO SEE IF IT IS RUNNING CORRECTLY. <[ÔONY] Á.ÔÏÌÌÅ> ÙOU CAN RUN A SHORT SECTION OF THE PROGRAM AND THEN EXAMINE THE REGISTERS TO SEE IF THEY ARE CURRENTLY HOW THEY ARE SUPPOSED TO BE. <[ÔONY] Á.ÔÏÌÌÅ> ÏK, NOW É WILL SHOW YOU WHAT COULD BE ONE OF THE SHORTEST ÍÌ PROGRAMS. ÔO ACTUALLY "ASSEMBLE" AN ÍÌ PROGRAM IN MEMORY, WE USE THE "Á" COMMAND IN THE MONITOR. ** <[ÅDDIE] Å.ÂÏÕÒÄÏÎ1> IS HERE. <[ÔONY] Á.ÔÏÌÌÅ> ÈIYA ÅDDIE. <ÇÅÏÓ-ÔÉÍ> ÈI ÅDDIE <[ÅDDIE] Å.ÂÏÕÒÄÏÎ1> ÈI ÔONY,ÔIM, ÆRANK <[ÆRANK] ÂÕÆÆ.ÐÈÏÏÎ> 'LO ÅDDIE <[ÔONY] Á.ÔÏÌÌÅ> ÆOR NOW, MOST OF OUR PROGRAMS WILL BEGIN AT ADDRESS $C000, WHICH IS 49152 IN DECIMAL. ÔHIS IS A CONVENIENT LOCATION BECAUSE IT DOESN'T INTEREFERE WITH OTHER PROGRAMS IN MEMORY. <[ÔONY] Á.ÔÏÌÌÅ> ÓO TO TYPE IN THIS PROGRAM YOU WOULD TYPE: <[ÔONY] Á.ÔÏÌÌÅ> Á $Ã000 ÌÄÁ #$10 <[ÔONY] Á.ÔÏÌÌÅ> AND PRESS ÒÅÔÕÒÎ. <[ÔONY] Á.ÔÏÌÌÅ> ÔHIS MEANS TO START ASSEMBLING AN ÍÌ PROGRAM AT $C000 AND THE FIRST INSTRUCTION IS ÌÄÁ #$10. <[ÔONY] Á.ÔÏÌÌÅ> ÔHE COMPUTER WILL RESPOND BY PRINTING: <[ÔONY] Á.ÔÏÌÌÅ> Á $Ã002 <[ÔONY] Á.ÔÏÌÌÅ> AND THEN DISPLAYING THE CURSOR RIGHT AFTER THE $C002. <[ÔONY] Á.ÔÏÌÌÅ> ÔHIS TELLS YOU TWO THINGS: ÔHE COMPUTER ACCEPTED YOUR FIRST INSTRUCTION, AND NOW IT IS READY FOR ANOTHER INSTRUCTION (NOTICE THAT THE ADDRESS INCREASED BY TWO, BECAUSE THE ÌÄÁ #$10 INSTRUCTION TAKES UP TWO BYTES). <[ÔONY] Á.ÔÏÌÌÅ> ÒEMEMBER THAT THE PROGRAM ISN'T ACTUALLY RUNNING RIGHT NOW, BUT YOU ARE JUST ENTERING IT INTO MEMORY USING THE MONITOR'S MINI-ASSEMBLER TO CONVERT THE MNEMONIC INSTRUCTIONS (I.E. THE ÌÄÁ INSTRUCTION) INTO THE PURE ÍÌ NUMBERS. <[ÔONY] Á.ÔÏÌÌÅ> ÎEXT YOU WOULD TYPE: <[ÔONY] Á.ÔÏÌÌÅ> ÂÒË <[ÔONY] Á.ÔÏÌÌÅ> AND PRESS ÒÅÔÕÒÎ. ÔHIS ENTERS IN THE ÂÒË (ÂÒEAË) INTO MEMORY. ÍESSAGE SENT TO ÊOB 4 <[ÔONY] Á.ÔÏÌÌÅ> ÔHE ÂÒË INSTRUCTION IS SIMPLY AN INSTRUCTION THAT TELLS THE PROCESSOR TO INTERRUPT THE CURRENT PROGRAM AND START EXECUTING AN ÍÌ PROGRAM AT A DIFFERENT ADDRESS. <[ÔONY] Á.ÔÏÌÌÅ> ÉT IS USED IN ÍÌ MONITORS TO END THE PROGRAM AND RETURN CONTROL TO THE MONITOR, WHERE IT WILL DISPLAY THE VALUES OF THE REGISTERS FOR YOU. <[ÔONY] Á.ÔÏÌÌÅ> ÎOW THAT YOU HAVE ENTERED THAT INSTRUCTION, YOU WILL SEE: <[ÔONY] Á.ÔÏÌÌÅ> Á $Ã003 <[ÔONY] Á.ÔÏÌÌÅ> WITH A CURSOR. <[ÔONY] Á.ÔÏÌÌÅ> ÎOW THAT YOU ARE FINISHED TYPING IN THE PROGRAM, YOU WOULD PRESS ÒÅÔÕÒÎ TO EXIT THE MINI-ASSEMBLER. <[ÔONY] Á.ÔÏÌÌÅ> ÎOW YOU ARE READY TO ACTUALLY RUN THE ÍÌ PROGRAM TO SEE WHAT IT DOES. ÂEFORE YOU DO THAT THOUGH, YOU CAN DO WHAT IS CALLED "DISASSEMBLING" THE PROGRAM, WHICH IS JUST A FANCY WAY OF SAYING THAT YOU WANT TO LIST THE ÍÌ PROGRAM IN MEMORY. <[ÔONY] Á.ÔÏÌÌÅ> ÔYPE THE COMMAND: <[ÔONY] Á.ÔÏÌÌÅ> Ä $Ã000 $Ã002 <[ÔONY] Á.ÔÏÌÌÅ> ×HICH MEANS, "DISASSEBLE THE ÍÌ PROGRAM FROM ADDRESS $Ã000 TO $Ã002". ÐRESS ÒÅÔÕÒÎ AND YOU WILL SEE: <[ÔONY] Á.ÔÏÌÌÅ> *Ã000 Á9 10 ÌÄÁ #$10 <[ÔONY] Á.ÔÏÌÌÅ> *Ã002 00 ÂÒË <[ÔONY] Á.ÔÏÌÌÅ> ÔHE HEX NUMBERS SHOWN TO THE LEFT OF THE MNEMONIC INSTRUCTIONS ARE THE ACTUAL ÍÌ INTRUCTION CODES THAT ARE STORED IN MEMORY. ÎOTICE THAT THE ÍÌ PROGRAM ONLY TAKES UP THREE BYTES OF MEMORY. <[ÔONY] Á.ÔÏÌÌÅ> ÂEFORE WE RUN THE PROGRAM, WE SHOULD ALSO DO ONE OTHER THING. ÎOTICE THAT THE PROGRAM IS SUPPOSED TO ALTER THE ÁCCUMULATOR; WE NEED TO RESET THE VALUE OF THE ACCUMULATOR BEFORE RUNNING THE PROGRAM SO THAT WE CAN SEE WHAT THE PROGRAM DOES. ÄO THIS BYTE TYPING "Ò" AND PRESSING ÒÅÔÕÒÎ. <[ÔONY] Á.ÔÏÌÌÅ> ÔHIS WILL SHOW THE VALUES OF THE REGISTERS LIKE THIS: <[ÔONY] Á.ÔÏÌÌÅ> ÐÃ ÁÒ ØÙ ÙÒ ÓÐ ÓÒ <[ÔONY] Á.ÔÏÌÌÅ> ; ØØØØ ØØ ØØ ØØ ØØ ØØ <[ÔONY] Á.ÔÏÌÌÅ> ÔHE VALUES THAT ARE PRINTED DON'T REALLY MATTER, BUT WE DO WANT TO CHANGE ONE OF THEM. ÍOVE THE CURSOR TO THE FIRST DIGIT OF THE HEX NUMBER BELOW THE ÁÒ HEADING. <[ÔONY] Á.ÔÏÌÌÅ> ÔYPE OVER THE NUMBER THERE AND PUT "00" INSTEAD. ÔHE LINE SHOULD LOOK LIKE THIS: <[ÔONY] Á.ÔÏÌÌÅ> ;ØØØØ 00 ØØ ØØ ØØ ØØ <[ÔONY] Á.ÔÏÌÌÅ> ×HERE THE ONLY NUMBER YOU HAVE CHANGED IS THE SECOND NUMBER, THE ACCUMULATOR. ÔHEN PRESS ÒÅÔÕÒÎ TO CHANGE THE VALUE. <[ÅDDIE] Å.ÂÏÕÒÄÏÎ1> ×HAT DO THE ABOVE LETTERS STAND FOR? <[ÔONY] Á.ÔÏÌÌÅ> ÏK, THEY ARE THE NAMES OF THE REGISTERS. ÐROGRAM ÃOUNTER (ÐÃ), ÁCCUMULATOR (ÁÒ), Ø REGISTER (ØÒ), Ù REGISTER (ÙÒ), ÓTACK ÐOINTER (ÓÐ), ÓTATUS ÒEGISTER (ÓÒ) <[ÔONY] Á.ÔÏÌÌÅ> ÎOW WE ARE READY TO RUN THE PROGRAM. ÔYPE THE FOLLOWING: <[ÔONY] Á.ÔÏÌÌÅ> Ç $Ã000 <[ÔONY] Á.ÔÏÌÌÅ> AND PRESS ÒÅÔÕÒÎ. <[ÔONY] Á.ÔÏÌÌÅ> ÉT WILL SEEM AT FIRST AS IF NOTHING REALLY HAPPENED, BUT THE MONITOR WILL DISPLAY THE REGISTERS AGAIN LIKE THIS: <[ÔONY] Á.ÔÏÌÌÅ> ÐÃ ÁÒ ØÒ ÙÒ ÓÐ ÓÒ <[ÔONY] Á.ÔÏÌÌÅ> ;ØØØØ 10 ØØ ØØ ØØ ØØ <[ÔONY] Á.ÔÏÌÌÅ> ÙOU WILL SEE THAT THE VALUE OF THE ÁCCUMULATOR (ÁÒ) HAS CHANGED TO HEXADECIMAL 10. ÔHIS WHAT THE PROGRAM DID WITH THE ÌÄÁ #$10 INSTRUCTION. <[ÔONY] Á.ÔÏÌÌÅ> ÎOW THAT WE HAVE DONE THIS SIMPLE PROGRAM, WE CAN TRY ONE THAT DOES SOMETHING A LITTE MORE EVIDENT. <[ÔONY] Á.ÔÏÌÌÅ> ×E CAN GO AHEAD AND PUT THE NEW PROGRAM IN PLACE OF THE OLD ONE. ÕSING THE MINI-ASSEMBLER TYPE THE FOLLOWING PROGRAM: <[ÔONY] Á.ÔÏÌÌÅ> Á $Ã000 ÌÄÁ #$30 <[ÔONY] Á.ÔÏÌÌÅ> Á $Ã002 ÓÔÁ $0400 <[ÔONY] Á.ÔÏÌÌÅ> Á $Ã005 ÂÒË <[ÔONY] Á.ÔÏÌÌÅ> ÎOW THAT THE PROGRAM IS TYPED IN, CLEAR THE SCREEN AND PRESS ÒÅÔÕÒÎ A COUPLE TIMES. <[ÅDDIE] Å.ÂÏÕÒÄÏÎ1> ÓEE YA ALL LATER ** <[ÅDDIE] Å.ÂÏÕÒÄÏÎ1> HAS LEFT. <[ÔONY] Á.ÔÏÌÌÅ> ÔHEN TYPE "Ç $Ã000" AND PRESS ÒÅÔÕÒÎ, BUT BE SURE TO BE WATCHING THE UPPER LEFT CORNER OF THE SCREEN WHEN YOU ARE PRESSING ÒÅÔÕÒÎ. <[ÔONY] Á.ÔÏÌÌÅ> ÙOU SHOULD SEE A "0" CHARACTER APPEAR IN THE UPPER LEFT CORNER OF THE SCREEN WHEN YOU RUN THE PROGRAM. <[ÔONY] Á.ÔÏÌÌÅ> ÈERE IS HOW THE PROGRAM WORKS: <[ÔONY] Á.ÔÏÌÌÅ> ÌÄÁ #$30 LOADS THE ACCUMULATOR WITH THE HEX VALUE $30, WHICH IS 48 IN DECIMAL. ÔHIS IS THE NUMBER THAT THE COMPUTER USES TO REPRESENT THE "0" CHARACTER ON THE SCREEN. ÔHE NEXT INSTRUCTION, ÓÔÁ $0400, STORES THE VALUE OF THE ACCUMULATOR ($30) IN THE FIRST LOCATION OF ÓCREEN ÍEMORY. ÓCREEN MEMORY IS A RANGE OF ADDRESSES, <[ÔONY] Á.ÔÏÌÌÅ> $0400 TO $07ÆÆ, THAT IS THE COMPUTER'S INTERNAL REPRESENTATION OF EVERY CHARACTER DISPLAYED ON THE SCREEN. ÔO DISPLAY DIFFERENT CHARACTERS, THE COMPUTER CHANGES SCREEN MEMORY IN A WAY THAT IS USUALLY TRANSPARENT TO US. ×HEN YOU CLEAR THE SCREEN THE COMPUTER IS ACTUALLY FILLING SCREEN MEMORY WITH $20 BYTES, WHICH IS SIMPLY THE VALUE THAT REPRESENTS THE "SPACE" CHARACTER. <[ÆRANK] ÂÕÆÆ.ÐÈÏÏÎ> ÔIME IS ABOUT UP, ÔONY. <[ÔONY] Á.ÔÏÌÌÅ> ÙOU ARE RIGHT... É DIDN'T EVEN NOTICE HEHEHEHE. <[ÔONY] Á.ÔÏÌÌÅ> ×ELP, IF THERE ARE ANY QUESTIONS ABOUT WHAT É COVERED É'D BE HAPPY TO ANSWER THEM NOW. <[ÆRANK] ÂÕÆÆ.ÐÈÏÏÎ> ÙOU WANT US TO TRY WHAT WE'VE TALK ABOUT TONIGHT BEFORE WE COME BACK NEXT WEEK? <[ÔONY] Á.ÔÏÌÌÅ> ÙES. TRY OUT THOSE SAMPLE PROGRAMS SO É CAN FIND OUT WHAT KIND OF TROUBLE YOU MIGHT HAVE ENCOUNTERED... <[ÔONY] Á.ÔÏÌÌÅ> É WILL UPLOAD THE TRANSCRIPT OF THIS AS SOON AS É CAN SO YOU CAN ÄÌ IT IF NECESSARY FOR REFERENCE, OR YOU CAN USE YOUR OWN BUFFER, <[ÔONY] Á.ÔÏÌÌÅ> EVERYTHING SHOULD WORK AS DESCRIBED FOR THE PROGRAMS THOUGH. <[ÆRANK] ÂÕÆÆ.ÐÈÏÏÎ> ÏË. É'LL TRY IT THIS WEEK-END. :: ÂUFFER OFF ::