// sum_of_constants.iml (c) 1997 - 2000 Kari Laitinen // This program calculates the sum of two numbers stored // as constants "first_number" and "second_number". // The calculated sum as well as the two numbers are // printed with subroutine "print_register_a_in_decimal_form". beginning_of_main_program: set_memory_pointer first_number load_register_a_from_memory set_memory_pointer second_number load_register_b_from_memory add_register_b_to_a set_memory_pointer sum_of_numbers store_register_a_to_memory set_memory_pointer first_number load_register_a_from_memory call_subroutine print_register_a_in_decimal_form set_memory_pointer plus_sign_text call_subroutine display_text set_memory_pointer second_number load_register_a_from_memory call_subroutine print_register_a_in_decimal_form set_memory_pointer equal_sign_text call_subroutine display_text set_memory_pointer sum_of_numbers load_register_a_from_memory call_subroutine print_register_a_in_decimal_form end_of_main_program: stop_processing first_number: CONSTANT 33 second_number: CONSTANT 199 sum_of_numbers: DATA 1 plus_sign_text: STRING " + " equal_sign_text: STRING " = " display_text: load_register_a_from_memory jump_if_register_a_zero end_of_display_text output_byte_from_register_a increment_memory_pointer jump_to_address display_text end_of_display_text: return_to_calling_program print_register_a_in_decimal_form: // First we zero all the data-areas used by this subroutine. load_register_b_with_value 0 set_memory_pointer hundreds_in_byte store_register_b_to_memory set_memory_pointer tens_in_byte store_register_b_to_memory set_memory_pointer ones_in_byte store_register_b_to_memory find_hundreds_in_byte: load_register_b_with_value 100 jump_if_register_a_smaller_than_b find_tens_in_byte subtract_register_b_from_a set_memory_pointer hundreds_in_byte load_register_b_from_memory increment_register_b store_register_b_to_memory jump_to_address find_hundreds_in_byte find_tens_in_byte: load_register_b_with_value 10 jump_if_register_a_smaller_than_b find_ones_in_byte subtract_register_b_from_a set_memory_pointer tens_in_byte load_register_b_from_memory increment_register_b store_register_b_to_memory jump_to_address find_tens_in_byte find_ones_in_byte: set_memory_pointer ones_in_byte store_register_a_to_memory print_hundreds_tens_and_ones: set_memory_pointer hundreds_in_byte load_register_a_from_memory add_value_to_register_a '0' output_byte_from_register_a set_memory_pointer tens_in_byte load_register_a_from_memory add_value_to_register_a '0' output_byte_from_register_a set_memory_pointer ones_in_byte load_register_a_from_memory add_value_to_register_a '0' output_byte_from_register_a end_of_print_register_a_in_decimal_form: return_to_calling_program // The following are the "local data" of subroutine // print_register_a_in_decimal_form. This data is local because // only this subroutine uses them. hundreds_in_byte: DATA 1 tens_in_byte: DATA 1 ones_in_byte: DATA 1