A Structured Approach to Assembly Language Programming. I, = 0.45 e-15b. I = 0.9 el /88/ $01.OO IEEE - PDF

Please download to get full document.

View again

of 6
All materials on our website are shared by users. If you have any questions about copyright issues, please report us to resolve them. We are always happy to assist you.
Information Report

Press Releases


Views: 22 | Pages: 6

Extension: PDF | Download: 0

Related documents
IEEE TRANSACTIONS ON EDUCATION, VOL. 31, NO. 2, MAY and the considerably more unbalanced currents I = 0.9 el0 I, = 0.45 e-15b to the stator. The elliptical nature of the resulting field is immediately
IEEE TRANSACTIONS ON EDUCATION, VOL. 31, NO. 2, MAY and the considerably more unbalanced currents I = 0.9 el0 I, = 0.45 e-15b to the stator. The elliptical nature of the resulting field is immediately evident. IV. CONCLUSIONS AND EXTENSIONS A simple but effective means is described for dynamically demonstrating the nature of the revolving field of a polyphase machine under any condition of balance or unbalance and for either abc or acb phase sequence. The algorithm is straightforward to program, understand, and use. It can be employed as an instructional medium in the classroom and can also be used by students to explore additional cases of machine stator excitation besides those discussed in class. The dynamic progression of the plot on the screen reinforces the concept of rotation much better than the frequently used snapshot technique of evaluating the field pattern at two or three points. For power-systems students who have studied the theory of symmetrical components [2], [3], such a demonstrator can be expanded to graphically illustrate the interaction of positive- and negativesequence fields [4] to produce a single revolving field, as well as to show the behavior of the sequence-component fields themselves. This is beyond the intended scope of the simple software discussed in this paper. However, it should be immediately evident to the student who applies an acb sequence to the program that a backward-revolving field is produced; and this observation could possibly be used as a takeoff point for the introduction of symmetricalcomponent theory. In a computational laboratory or as an out-ofclass assignment, the student can be asked to augment the basic program to include the calculation and graphing of both sequences point by point as well as the display of the phasor value of each of the three sequence quantities for comparison. REFERENCES H. A. Smolleck, A phasor explanation of the revolving-field concept for use in polyphase machine analysis, leee Trans. Educ., vol. E- 21, pp , Feb W. D. Stevenson, Jr., Elemenrs of Power System Analysis. 4th ed. New York: McGraw-Hill, J. D. Glover and M. Sarma, Power Sysrem Analysis and Design with Personal Computer Applications. Boston, MA: PWS Publishers, C. F. Wagnerand R. D. Evans, Symmetrical Components. New York: McGraw-Hill, A Structured Approach to Assembly Language Programming SCOTT MACKENZIE Abstract-A method is described for teaching structured programming techniques to students of assembly language programming. Structured programming, historically, has only been within the realm of high-level languages (Pascal, C, etc.), while a more loose approachone lacking a formal syntax-has traditionally been applied to low-level Manuscript received January 26, 1987; revised July 14, The author is with Seneca College of Applied Arts and Technology, Toronto, Ont., Canada. IEEE Log Number programming in assembly language. Borrowing words and symbols from Pascal and C, a simple syntax has been devised, called Pseudo Code, that uses three basic structures: linear, conditional, and loop. Upon learning that all programs can be written using only these three structures, students become convinced of the reduced complexity brought by Pseudo Code. A method is adopted that proceeds from the problem definition to the assembly language program using Pseudo Code as an interim step. Using this method, students at Seneca College in Toronto have successfully developed software in assembly language that would have been too complex for them to attempt without coding their solutions in a structured form. INTRODUCTION Students of electronics, sooner or later, must learn to program microprocessors in assembly language. The well-developed structured programming techniques used in high-level languages (the techniques that computer science students must master) are known, but are little applied in the low-level world of assembly language programming, with the result that students tend to adopt a chaotic, brute-force approach to problem solving. The code is often difficult to debug, impossible to read, and resembles unstructured Basic where programmers routinely paint themselves into a comer, and use a GOTO statement to escape. A pedagogy is presented that provides students with a systematic approach to assembly language programming, one which adheres to a small but complete set of structures. The method is not exhaustive; its intent is to introduce the concept of structuring while learning assembly language programming. Using this method, students at Seneca College have successfully tackled complex programming problems in assembly language. The following paragraphs describe a method ; little is new except the packaging. The key to success is to simplify the complex, to give shape and form to a problem, and not to expect too much too soon. The method is presented to the students in three stages, beginning with the rudiments of structuring, then progressing to subroutines and parameter passing, and then finishing with a polished syntax. Many programming exercises are given to the students at each level before progressing to the next. Five sample exercises are given as representative of the problems that students can be expected to solve using this method. The structures are presented to the students as the constituent parts of a small hypothetical language which we call Pseudo Code. This language borrows words and symbols from Pascal and C, so as to strike a balance between legibility and brevity. Pseudo Code exists purely on paper and is used only as an interim stage in problem solving. While forcing a strict adherence to structure through the use of keywords and indentation, the language places statements and conditions in square brackets and encourages students, at least initially, to use whatever wording they feel appropriate to describe operations and conditions. THE USE OF FLOWCHARTS Flowcharts are used initially but become optional after students develop problem-solving cognition and master Pseudo Code. Solutions are reached by progressing from the problem definition to the assembly language program via Pseudo Code, using a flowchart if necessary. This is illustrated in Fig. 1. The disadvantage of flowcharts is that they are bulky and unruly: small routines take entire pages, they cannot be typed into a computer using word processing software, and they are difficult to edit. Their advantage lies in the shape they give to a solution by using decision blocks and flow arrows to enhance the visual representation. Parallel operations are shown as such by juxtaposing statement blocks on the page. This visual property of flowcharts, which does not exist in programming languages due to their line-by-line notation, is invaluable to many students. Flowcharts are eventually /88/ $01.OO IEEE I I 124 IEEE TRANSACTIONS ON EDUCATION, VOL. 31, NO. 2, MAY 1988 FLOWCHART: PSEUDO CODE: PROBLEM DEFINITION FLOWCHART PSEUDO ASSEMBLY (optional) CODE 4 LANGUAGE PROGRAM Fig. 1. The stages in problem solving use Pseudo Code as an interim step between the problem definition and the final program. Flowcharts are used initially but are discarded or used optionally after students become familiar with Pseudo Code. statement 1 statement 2 statement 3 LJ [statement 11 [statement 21 [statement 31 etc. Fig. 2. The solution to all programming problems can be expressed using discarded when students demonstrate proficiency in proceeding directly from the problem definition to Pseudo Code. only three structures. The linear structure-the statement-is horse of computer programs. the work- Step I) Rigid Structures; Liberal Use of Language: Students are gradually introduced to Pseudo Code by allowing them to notate their solutions in comfortable terms, while adhering to the available structures. Before proceeding to the sample exercises, the structures are defined and illustrated in Pseudo Code and flowchart FLOWCHART: PSEUDO CODE: form. (The use of flowcharts will not be elaborated on further.) fa Three structures are sufficient to solve any programming prob- WHILE [condition] lem: the linear structure, the loop structure, and the choose struc- DO [statement] ture [I]. The linear structure, shown in Fig. 2, is the familiar statement -the workhorse of computer programs. Via statements, programs accomplish their tasks. The loop structure repeatedly performs an operation until a terminating condition becomes true. The two common arrangements, which are also called statements, are WHILE/DO and REPEAT/ UNTIL. These are illustrated in Fig. 3. A WHILE/DO structure is required when the operation should not be performed in the event that the terminating condition already exists. On the other hand, the REPEAT~NTIL structure is used when the operation must be performed at least once. statement REPEAT [statement] UNTIL [condition] Although any WHILE/DO statement can be rearranged into a RE- PEAT/UNTIL statement and vice versa, both are used in Pseudo Code since they are commonplace and translate easily into assem- false bly language. Another variation of the loop structure is the FOR statement which we avoid to keep the language small. A common programming bug is an infinite loop. Students can guard against this by verifying that at least one operation in the loop affects the terminating condition. For example, if a counter is used, then the counter value must be affected (typically, it will be incremented or decremented) by an operation within the loop. true Fig. 3. The loop structure is used to repeatedly execute a block of code. The REPEAT variation executes the statement block at least once, whereas the WHILE variation checks the terminating condition before the statement is executed. The choose structure, shown in Fig. 4, is the IF/THEN/ELSE statement. The CASE statement, which can be constructed from IF/THEN/ ELSE statements, is not used. The few rules adhered to at this stage are as follows. FLOWCHART: 1) Enclose conditions and statements in brackets [ ] and use any convenient language to describe the operation. false 2) Statements within a CHOOSE or LOOP structure are indented to the next tab stop. 3) Multiple statements in the choose or loop structures are bracketed by BEGIN/END. (Note: Not necessary for REPEAT~NTIL.) 4) Any structure can be inserted into the statement block of any other structure. 5) Keywords are WHILE, Do, REPEAT, UNTIL, IF, THEN, ELSE, BEGIN, END, AND, OR, and NOT. statement 2 statement 1 6) Keywords are written using uppercase characters; all other PSEUDO CODE: IF [condition] THEN [statement words are written using lowercase characters. 11 ELSE [statement 21 7) Machine-dependent language should be avoided (i.e., use terms like pointer rather than index register ). Note: statement 2 is optional 8) Use the Commercial At sign to indicate indirect addressing. Fig. 4. The choose structure executes one of two statement blocks depending on a true/false condition. The ELSE statement is optional. 9) Enclose comments within I* AND */. (For example: /* this is a comment */.) After students have learned the instruction set of the microprocessor and are capable of writing programs using conditional branch instructions, they are ready to structure their solutions using Pseudo Code. Initially, the most appropriate problems are those that result in self-contained programs. Subroutines and parameter passing are introduced at Step 2). In this note, the solutions to exercises are given in Pseudo Code and in the assembly language of Intel s 8051 Microcontroller, 1 I 1- IEEE TRANSACTIONS ON EDUCATION, VOL. 31, NO. 2, MAY which is used in courses at Seneca College. The benefit of using machine-independent terminology becomes apparent when switching to a different microprocessor. Notice that the Pseudo Code solutions do not suggest a particular target machine. Example 1: Write a program to add a series of bytes and store the result. The length of the series is in memory location 41H and the series begins starting at memory location 42H. Store the SUM in memory location 40H. Example 2: Search a null-terminated string of ASCII codes and count the number of digit characters ( 0-9 ). The string is stored in memory beginning at location 50H. Put the count in the accumulator. The Pseudo Code and assembly language solutions are shown in Figs. 5 and 6. Note that the solution to Example 1 works for a zero-length series since the WHILE/DO structure checks the terminating condition before an addition is performed. With a bit of coaching and more exercises, students should be able to design the Pseudo Code solutions easily. The translation to assembly language, however, requires considerable focus and, to assist, Pseudo Code statements should be used as comments in the assembly language program. This establishes a line-for-line correlation between the Pseudo Code and the assembly language program. For those students using a personal computer and word processor, the assembly language program can be written by editing the Pseudo Code file and inserting assembly language instructions into each line while pushing the Pseudo Code statements to the right into comments. This approach greatly simplifies the translation to assembly language. The conditional sections of the structures are the most critical. It is in their use of conditional branch instructions that students falter, a problem arising out of the disparity between a microprocessor s instruction set and the way humans think and use language. This is particularly evident in Example 2 where a compound condition is required. An effective approach uses language within the condition brackets that, although not machine dependent, suggests the type of instructions that will be used during the translation to assembly language. Hence, in Example 2, the IF condition is stated as IF [character = 0 AND character = 9 ] rather than IF [character is a digit]. Although the latter is more akin to the way we think, it does not give any hint of the instructions required to implement the condition. A message to the byte counters : the argument that most of these solutions can be rearranged with a slight reduction in size is conceded; however, this must be weighed against the loss of code clarity and the loss of structure. This method is intended primarily for students of electronics using microprocessors (or microcontrollers) for small applications. These students are not writing code for file servers and compilers; they are writing code that interfaces microprocessors to terminals, printers, and other I/O devices; they are writing code to read from inputs, manipulate bits and bytes in some way, and write to outputs. With the high-capacity memory IC s available today, there is no need to shoehorn code into the smallest possible space. At Seneca College, students have designed microprocessor-based hardware and software for robotic arms, pen plotters, logic analyzers, etc.-the firmware required has never exceeded the capacity of a single EPROM. Step 2) Modular Programming: Programming at the introductory level will likely be carried out in parallel with lectures introducing students to subroutines and parameter passing-the main ingredients of modular programming. Modular programming and structured programming are two mutually beneficial approaches to programming. Modules are subroutines with explicitly defined entry and exit conditions that exist in a hierarchy with complex modules building upon and using simple modules. Complex modules /* Example 1: Pseudo Code */ BEGIN [initialize pointer to 42Hl [initialize counter from location 41Hl [clear sum] WHILE [counter not equal zero] DO BEGIN to sum] [increment pointer] [decrement counter1 END /* while */ [store sum in location 40H1 END /* example 1 */ ; Example 1: Assembly Language YOV RO,#42H MOV R7,41H CLR A WHILE: CJNE R7,#O,DONE ADD INC RO DEC R7 SJYP WHILE DONE: YOV 40H,A HERE: SJMP HERE END Listing 1 ;initial pointer to 42H ;initialize counter from 41H ;clear sum ;counter not = zero do begin to sum ;increment pointer ;decrement counter ;end while ;store sum in location 40H ;example 1 Fig. 5. Pseudo Code and assembly language solution for Example I. /* Example 2: Pseudo Code */ BEGIN [init pointer to 0050Hl [init count = 01 REPEAT [char [increment pointer] IF [char = 0 AND char = 9 1 THEN [increment count] UNTIL [char is OOH] [store count in accumulator] END /* example 2 */ ; Example 2: Assembly Language EXAMPLE2: YOV DPTR,#SOH MOV R7,XO REPEAT: YOVX INC DPTR IF: CJNE A,# 0,$+3 JC UNTIL CJNE A,# 9 +1,$+3 JNC UNTIL THEN: INC R7 UNTIL: CJNE A,#O,REPEAT MOV A,R7 HERE: SJMP HERE END Listing 2 ;init pointer to 0050H ;init count = 0 ;char ;increment pointer ;if char = 0 AND ; char = 9 ;then increment counter ;char is OOH ;store count in acc ;example 2 Fig. 6. Pseudo Code and assembly language solution for Example 2 will call simple modules, passing parameters to them or receiving results back. At this level, all parameter passing uses the microprocessor s internal registers. The following rules are added. IO) All modules begin with the module name followed by a pair of parentheses containing the names of parameters (if any) passed to the module. 11) All modules end with the keyword URN followed by a pair of parentheses containing the names of parameters (if any) returned by the module. 12) Module names are written using uppercase characters. Although only the concept of modular programming has been added, a considerable leap forward has occurred. Students are now I l- 1 126 IEEE TRANSACTIONS ON EDUCATION, VOL. 31, NO. 2, MAY 1988 creating larger programs each centered around one main module with a hierarchy of modules below. Many useful subroutines can be written by the students as exercises, leaving them with a library of routines useful to them as they advance towards high-level applications. Standard C functions [2] serve as excellent programming problems in Pseudo Code with subsequent translation to assembly language. A brief description of some of these follows. Character class testing subroutines are those that enter with an ASCII character in the accumulator, perform a test on the character, and return with a flag bit-typically the carry flag-set if the test passed or cleared if the test failed (Table I). Code conversion subroutines enter with a code in the accumulator, perform a conversion on the code, and return with the converted code in the accumulator (Table 11). String manipulation subroutines perform operations on null-terminated stringsstrings of ASCII codes terminated with a null byte (OOH). These subroutines are entered with one or two pointers to strings and perform an operation on the string(s), such as a copy or compare (Table 111). As Pseudo Code is a learning tool rather than a real or compilable language, it does not include many of the features of highlevel languages. The absence of data types, local versus global parameters, arrays, etc., is not a concern since the applications are usually small and hardware oriented, dealing with interfacing and control rather than with data processing. Example 3: Write a subroutine called INLINE that inputs a line of characters from the console (echoing back each character as it is received) and places them in memory starting at location 60H. Maximum line length is 31 characters including the carriage return. Put 0 at the end of the line. Assume the existence of INCHAR and OUTCHAR subroutines that input and output characters to the serial port using the accumulator. Example 4: Write a subroutine called HTOA that performs hex to ASCII conversion. A hex nibble is passed to the subroutine in the accumulator with the ASCII equivalent returned in the accumulator (example: input = OBH, output = 42H). The solutions are shown in Figs. 7 and 8. Since the students are now writing subroutines that are general in nature and useful for many applications, they should learn to include an appropriate comment block at t
We Need Your Support
Thank you for visiting our website and your interest in our free products and services. We are nonprofit website to share and download documents. To the running of this website, we need your help to support us.

Thanks to everyone for your continued support.

No, Thanks

We need your sign to support Project to invent "SMART AND CONTROLLABLE REFLECTIVE BALLOONS" to cover the Sun and Save Our Earth.

More details...

Sign Now!

We are very appreciated for your Prompt Action!