home *** CD-ROM | disk | FTP | other *** search
/ ftp.whtech.com / ftp.whtech.com.tar / ftp.whtech.com / Geneve / 9640news / CAT14 / ASMTTR1.ARK < prev    next >
Text File  |  2006-10-19  |  15KB  |  299 lines

  1. ?
  2.                        TUTORIAL 1 - THE BEGINNING
  3.                             by Mack McCormick
  4.  
  5.  
  6. Here are the objectives of this first tutorial: 1. To introduce you to the
  7. Hexadecimal and Binary Numbering systems.  2. To introduce you to the assembler
  8. instruction format.  3. To introduce you to addressing modes.  4. First
  9. program. Adding two numbers and displaying them on the screen.  5. How to
  10. assemble.
  11.  
  12. Just a few words on Assembly language before we begin.  It's not as difficult
  13. as you may believe.  You will be communicating with the microprocessor at the
  14. first level above machine language, assembler.  As you know, the machine
  15. actually communicates in binary 0's and 1's, on or off.  Assembler allows us to
  16. talk to the machine in a language we can understand (Although I'm sure the
  17. uninformed would disagree).  With these tutorials I will assume no prior
  18. knowledge of assembler or other number systems.  Please bear with me, I won't
  19. insult your intelligence and things will become more complex soon.  Stick with
  20. the tutorials.  Read every book about assembler you can get your hands on.  I
  21. will publish a bibliography of books soon.  Don't get discouraged! Compuserve
  22. is a difficult medium thru which to provide assistance.  I promise to answer
  23. your questions and if I don't know the answer, I'll find someone else that can.
  24. Please make this an interactive process, as we grow and learn with each other.
  25.  
  26. Numbering Systems
  27.  
  28. Hexadecimal (HEX) and binary are merely different base numbering
  29. systems for counting.  It's important we understand both of these systems in
  30. addition to base 10 or the decimal system because assembler uses all three.  I
  31. will tell you up front that I use a calculator designed for these numbering
  32. systems usually but we need to understand the principles also.  If you want to
  33. get a calculator, and I recommend that you do, there are several inexpensive
  34. models on the market.  I use the Casio solar powered fx-451 scientific
  35. calculator for $35.  It supports HEX, OCT, BIN, LOGICAL OPERATORS, and all
  36. scientific functions.  Works great! Craig Miller and others have also published
  37. programs which will allow you to use your computer but this has the
  38. disadvantage of requiring you to load another program every time you need to
  39. make a calculation, a real pain.
  40.  
  41. Binary Number System
  42.  
  43. As already mentioned, binary is the native language for your computer.
  44. Everything eventually gets converted to binary. Let's look at a decimal number
  45. first.  As you know decimal means powers of 10.  Each number represents a power
  46. of ten.  For example 4175:
  47. 10^3=1000  4 X 1000=4000
  48. 10^2= 100  1 X  100= 100
  49. 10^1=  10  7 X   10=  70
  50. 10^0=   1  5 X    1=   5
  51.                     ______
  52.                     4175
  53.  
  54. Binary numbers can be 1 or 0 only, hence base 2. The individual number is
  55. called a bit. A group of eight of these is called a byte. To convert the binary
  56. number 00001011 to decimal follow the same procedures you used with the decimal
  57. number:
  58. Ignore any leading zeros.
  59. 2^3=8      1 X 8=8
  60. 2^2=4      0 X 4=0
  61. 2^1=2      1 X 2=2
  62. 2^0=1      1 X 1=1
  63.                 ___
  64.                 11
  65. To make it easier to communicate with the computer we most often use HEX.  From
  66. now on I will use a > to indicate a number is in hex.  Hex is base 16.  That is
  67. a number may be 0 thru 15.  To represent numbers greater than 9 we use letters
  68. of the alphabet. 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F. Just remember to  use >A for
  69. 10 and count to 15 ending with >F. Let's convert >394F to decimal:
  70. 16^3=4096  3 X 4096=12,288
  71. 16^2= 256  9 X  256= 2,304
  72. 16^1=  16  4 X   16=    64
  73. 16^0=   1  F X    1=    15
  74.                    _________
  75.                     14,671
  76.  
  77. The largest number you may represent in one byte is >FF or decimal 255.  The
  78. largest value in a word (two bytes) is >FFFF or 65,535.  Enough on numbering
  79. systems for now, we'll cover minus numbers (twos compliment) and additional
  80. points as we encounter them in programs.
  81.  
  82. Assembler Instruction Syntax.
  83.  
  84. Like every computer language there are certain rules we must follow for
  85. inputting instructions.  Unlike BASIC, assembler will not give you a warning or
  86. error until you assemble the program. Here's the general syntax:
  87. LABEL  OPCODE  OPERAND  COMMENT
  88. labels must begin in the 1st column and may be up to 6 characters long.  One or
  89. more spaces follow.  Next is the OPCODE. This is the actual instruction to be
  90. performed followed by one or more spaces. Next are one or more operands or data
  91. for the instruction to operate on followed by one or more spaces.  Finally is
  92. an optional comment which may extend to column 80. Each time we use a new
  93. instruction I will fully explain it.
  94.  
  95. Addressing Modes.
  96.  
  97. There are five general addressing modes and one special addressing mode used
  98. for assembler instructions.  We will examine each one in detail as we encounter
  99. them in a program.  There is one type of addressing we need to look at now.  We
  100. are going to be operating on individual bits, bytes, and words of memory.
  101. Think of the computers memory as a series of consecutive small pieces of memory
  102. laid out end to end.  We can address any single byte of memory by hanging a
  103. label on it but frequently we must address a byte of memory some distance from
  104. that label.  Think of it like an array.  To get to the 5th byte from the label
  105. we could say LABEL+4.  We used 4 instead of 5 because we must start counting
  106. from 0.  Think of it like OPTION BASE 0 in BASIC. Lot's more on this later.
  107.  
  108. First Program.  I strongly recommend you enter the program manually by typing
  109. it in instead of just cleaning it up using TI-Writer or Editor/Assembler.  The
  110. only way to gain experience programming is to practice.
  111. I've place the program separately in DL3 to meke it easier to read.  It's name
  112. is PRO1.ASM.
  113.  
  114. Program explanation .  These comments supplement the comments contained in the
  115. program itself. Any statement with an * in column 1 is a comment and you may
  116. enter anything else on that line.  One fairly unique thing about the 9900
  117. microprocessor in the TI-99 is the ability to designate your own workspace
  118. registers anyplace in memory or more than one set at a time.  Think of
  119. registers as 32 consecutive bytes of memory that are used as your scratch paper
  120. for calculations.  Thirty-two bytes is of course 16 words of memory.  Because
  121. this is a 16 bit (1 word) machine (something many of your friends can't brag
  122. about) that gives us 16 registers to use for our computations.  We place an R
  123. in front of the number to designate that we are refering to a register. For
  124. example, R0 is register zero and R15 is register fifteen (really the 16th word
  125. of memory because we started counting with zero.) Here's the detailed
  126. explanation of the program:
  127.        DEF START
  128. DEFines the entry point of the program so the computer may find it.  Places the
  129. name START in the Reference/Definition table. More on this next time.
  130.  
  131.        REF VSBW,VMBW
  132. REFerence refers to console routine the program will use.  In the advanced
  133. tutorials we'll create our own utilities.
  134.  
  135. WSREG  BSS >20
  136. WSREG is the label we decided on for our workspace registers. Could have been
  137. any label 1 to 6 characters long. Block Starting Symbol (BSS) sets aside a
  138. block of memory, unititialized for use as our workspace. >20 means set aside
  139. >20 or 32 bytes (16 words) for R0 to R15.
  140.  
  141. X      DATA 10
  142. Initializes one word of memory to 10 (0010). Hangs the label X on that word.
  143.  
  144. START  LWPI WSREG
  145. Load Workspace Register Immediate (LWPI).  Tells the computer to use the 32
  146. bytes of memory for our workspace which begin at WSREG. START is the entry
  147. point (beginning) of our program.
  148.  
  149. Logic for clear routine. Writes the space character >20 or 32 to the screen 768
  150. times to the screen to clear it. R0 is the counter. R1 contains the space
  151. character.  We increment R0 to point to the next screen location and check it
  152. against 767 to insure we haven't gone too far.
  153.        CLR  R0
  154. CLeaRs the contents of R0 to zero.
  155.  
  156.        LI   R1,>2000
  157. Load Immediate R1 with >2000.
  158.  
  159. LOOP   BLWP @VSBW
  160. Branch and Link Workspace Pointer to the Video Single Byte Write Routine.
  161. Brances to the console routine for writing single bytes of information to the
  162. screen.  R0 always contains the address on the screen to write to. Briefly,
  163. there are 768 screen positions 24 rows X 32 Columns=768. This routine writes to
  164. VDP RAM in the screen image table (SIT) which is 768 bytes long.  Any ASCII
  165. value you write to the SIT is displayed on the screen.  For example to display
  166. the number 3 at row one column one, R0 would have 0 in it (because we begin
  167. counting at 0) and R1 would contain >3300 or 5100 in it. Note the number to be
  168. written is in the left byte of the word.  The VSBW routine always writes on the
  169. Most Significant Byte and disregards the LSB. Here's the easy way to remember
  170. it. R0 always contains the address in VDP RAM.  R1 always contains the address
  171. or data in CPU RAM.
  172.  
  173.       INC   R0
  174. INCrement R0 by one.  Add one to the contents of R0.
  175.  
  176.       CI    R0,767
  177. Compare Immediate whats in R0 to 767.
  178.  
  179.       JLE   LOOP
  180. Jump Less than or EQUAL to the label LOOP. IF R0<=767 THEN GOTO LOOP.
  181.  
  182. Logic for the addition routine. We add the two number together.  Because only
  183. ASCII numbers may be displayed on the screen we must add >30 to each byte
  184. before we display it.  In this case our number is 37.  We must place a 3 and 7
  185. on the screen. To do this we divide 37 by 10 resulting in a quotient of 3 and
  186. remainder of 7.  We add >30 to the 7 to make ASCII >37. We move this value to
  187. the right most byte of our ANS word. We then divide 3 (old quotient) by 10
  188. resulting in 0 quotient and 3 remainder. We again mask up by >30 and shift it
  189. left 8 bits (1 byte) in the register. We then move this byte to the left (MSB)
  190. of ANS. ANS looks like >3337 when we're finished.
  191.  
  192.       A @Y,@X
  193. Adds two words of memory. Places the sum in the second operand. May also use
  194. registers (eg. A R0,R1). Adds whats at the word of memory with label Y to whats
  195. at the word of memory label X.
  196.  
  197.       DIV   @TEN,R5
  198. DIVides uses two registers. In this case R5 and R6. Divides whats in R6 by
  199. whats at TEN or 10. The quotient is placed in R5 and the remainder at R6. That
  200. is why we clear R5 before we divide.
  201.  
  202.       MOV   R6,@ANS
  203. MOVe the contents of R6 to whats at the label ANS.
  204.  
  205.       SLA   R6,8
  206. Shift Left Arithmetic. Shift the contents of R6 left 8 bits (1 byte) to the
  207. MSB. Fills the shifted out positions with 0.
  208.       MOVB  R6,@ANS
  209. MOVe Byte moves the Most Significant Byte (MSB) or leftmost to the word at ANS
  210. without disturbing the LSB of ANS.
  211.  
  212. Logic for display on the screen routine.  R0 contains the position on the
  213. screen to display the answer. Found by SCREEN ADDRESS=((ROW-1)*32)+(COLUMN-1).
  214. In this case 366. R1 contains the address of the beginning of the data to write
  215. to the screen. In this case R1 contains the address of ANS. R2 contains the
  216. number of bytes to write beginning at the VDP address in R0 and the CPU address
  217. in R1.
  218.  
  219.      JMP  $
  220. Instructs the computer to JuMP to the current location of the program counter.
  221. Same as 100 GOTO 100. This locks up the computer so you may see the result. If
  222. you want to see how quickly the computer executes place an * in column 1 in
  223. front of this instruction and reassemble.
  224.  
  225. Logic for the Return to the Calling Routine. Clears the GPL status byte at
  226. >837C. Much more on this important byte later. Loads the workspace pointer back
  227. to the GPL workspace and branches to the routine at >0070. END is a directive
  228. to inform the assembler there are no more instructions.
  229.  
  230. How to Assemble.
  231.  
  232. If you have the Molesworth book refer to page 42 or page 30-36 in the
  233. Editor/Assembler manual. Here's a brief step by step.
  234. 1.  Select EDITOR/ASSEMBLER from the main menu. Place your editor assembler
  235. disk A in drive 1.
  236. 2.  Select 1-EDIT from the E/A menu.
  237. 3.  Select 2-EDIT from the EDIT menu.
  238. 4.  Enter your program just as shown. You may omit any comments if you desire.
  239. 5.  Press FCTN ESCAPE twice to return to the EDIT title screen.
  240. 6.  Select 3-SAVE. Answer Y to the VAR/80 prompt. Enter your source file name
  241. such as DSK2.SOURCE. If you only have one drive place another disk in drive one
  242. first and use DSK1 instead of DSK2.
  243. 7.  Press FCTN ESCAPE to return to E/A title screen.
  244. 8.  Select 2-ASSEMBLE. Answer Y to the load assembler question. Insure the E/A
  245. disk A is in drive 1.
  246. 9.  At the SOURCE FILE NAME enter the same file name you used in 6 above. ie.
  247. DSK2.SOURCE, press enter.
  248. 10. At the OBJECT FILE NAME enter DSK2.OBJECT and press enter.
  249. 11. Press enter at the LIST FILE NAME. More on this feature next time.
  250. 12. At the OPTIONS prompt enter R. Press enter. R means you used R in front of
  251. your register numbers in the source code. You may also enter CLST. C is
  252. compressed object code (will not load from X/B loader). L is a source listing
  253. if you entered a LIST FILE NAME at the prompt. S prints the symbols and
  254. registers used in the program on your source list. T prints the full text
  255. string in your source listing. More on these features later. Assembler
  256. executing will appear followed by 0000 errors (you hope). Press enter.
  257. 13. Press 3-LOAD AND RUN.
  258. 14. At the FILE NAME prompt enter your OBJECT file name ie. DSK2.OBJECT. Press
  259. enter. Press enter again to get to the PROGRAM NAME prompt.
  260. 15. This is the name we DEF in our program in this case START.
  261. 16  Your program will execute.
  262.  
  263. SUMMARY.
  264. I realize this has been long but there has been much to cover to get started.
  265. Don't get discouraged.  We'll go at this together.  I strongly recommend you
  266. study these references in your Editor-Assembler manual and experiment on your
  267. own. Until next time, "ASSEMBLER EXECUTING".
  268. Page 20-36      Using the Editor-Assembler Cartridge.
  269. Page 39 Sec 3.1 Registers
  270. Page 46-48      Source Statement Format
  271. Page 53         Predefined Symbols. ($)
  272. Page 57-62 Sec 4.1.1, 4.1.4, 4.2, 4.4 Addressing.
  273. Page 80         Add Instruction
  274. Page 85         Add Immediate
  275. Page 88         Divide
  276. Page 90         Increment
  277. Page 107        Branch
  278. Page 115        Jump Less Than or Equal.
  279. Page 143        Compare Immediate
  280. Page 163        Load Immediate
  281. Page 165        Load Workspace Pointer Immediate
  282. Page 166        Move Word
  283. Page 168        Move Byte
  284. Page 200        Shift Left Arithmetic
  285. Page 212        Block Starting Symbol
  286. Page 225        Data
  287. Page 227        DEF
  288. Page 228        REF
  289. Page 248        VSBW,VMBW
  290. Page 329-330    Graphics Mode Tables
  291. Page 394-396    Numbering Systems
  292. Page 428-429    ASCII character set
  293. Page 442        Other Returns
  294.  
  295.  
  296. Download complete.  Turn off Capture File.
  297.  
  298.  
  299.