130 likes | 236 Views
An “interactive” application. An introduction to “structured” assembly language programming. A human-computer dialogue. Typical pattern: Computer asks a question Human types in a response Simple example: Computer says: How many dots? Human replies: 125 <ENTER>
E N D
An “interactive” application An introduction to “structured” assembly language programming
A human-computer dialogue • Typical pattern: • Computer asks a question • Human types in a response • Simple example: • Computer says: How many dots? • Human replies: 125 <ENTER> • Computer does as requested.
Standard C functions • How can we do input/output in assembly? • We can call standard C library functions • But we need to know their “prototypes” • For output (where STDOUT equals 1): write( STDOUT, &query, sizeof( query ) ); • For input (where STDIN equals 0): read( STDIN, &buffer, sizeof( buffer ) );
Structured programming • A discipline for faster program design • Idea: break a big task into simple pieces • It’s known as “task decomposition” • We can use a diagram to illustrate it • Diagram is called a “Structure Chart”
Structure Chart example main obtain_input process_data print_output
Code for the ‘main’ function .section .text main: call obtain_input call process_data call print_output ret .globl main
Stubs • You can write empty ‘stubs’ (for testing) obtain_input: ret process_data: ret print_output: ret • Now you can ‘test’ your skeleton program (e.g. assemble, link, and execute)
Add details for each ‘stub’ • First write your final subroutine, so you can see “something” on the screen • You can use ‘dummy’ data temporarily • Get it working correctly (debugged) • Then you can focus on you next ‘stub’
Main algorithm • Converting user’s input-string to a number • That is “the hard part” in this example • Idea: “scan” the array of character-codes • Test each code (to see if it’s a valid digit) • It must lie between ‘0’ and ‘9’ (ascii codes) • If code is not not valid, the scanning stops • Otherwise, adjust the accumulated total
Some new directives .ascii .asciz .long .byte .space
Some new CPU instructions sub dec cmp jg jl jz jnz movzx loop imul
Exercise with ASCII codes • See what happens if you change the ascii code used for as value of the ‘dot’ variable • Try using ascii value 7 • Try using ascii value 9 • Try using ascii value 10 • Try using ascii value 111 • Try using ascii value 250