#LyX 2.4 created this file. For more info see https://www.lyx.org/ \lyxformat 620 \begin_document \begin_header \save_transient_properties true \origin unavailable \textclass book \begin_preamble \input defs \end_preamble \use_default_options true \maintain_unincluded_children no \language english \language_package default \inputencoding utf8 \fontencoding auto \font_roman "default" "default" \font_sans "default" "default" \font_typewriter "default" "default" \font_math "auto" "auto" \font_default_family default \use_non_tex_fonts false \font_sc false \font_roman_osf false \font_sans_osf false \font_typewriter_osf false \font_sf_scale 100 100 \font_tt_scale 100 100 \use_microtype false \use_dash_ligatures true \graphics default \default_output_format default \output_sync 0 \bibtex_command default \index_command default \float_placement class \float_alignment class \paperfontsize default \spacing single \use_hyperref false \papersize default \use_geometry false \use_package amsmath 1 \use_package amssymb 1 \use_package cancel 1 \use_package esint 1 \use_package mathdots 1 \use_package mathtools 1 \use_package mhchem 1 \use_package stackrel 1 \use_package stmaryrd 1 \use_package undertilde 1 \cite_engine basic \cite_engine_type default \biblio_style plain \use_bibtopic false \use_indices false \paperorientation portrait \suppress_date false \justification true \use_refstyle 1 \use_formatted_ref 0 \use_minted 0 \use_lineno 0 \index Index \shortcut idx \color #008000 \end_index \secnumdepth 3 \tocdepth 3 \paragraph_separation indent \paragraph_indentation default \is_math_indent 0 \math_numbering_side default \quotes_style english \dynamic_quotes 0 \papercolumns 1 \papersides 1 \paperpagestyle default \tablestyle default \tracking_changes false \output_changes false \change_bars false \postpone_fragile_content false \html_math_output 0 \html_css_as_file 0 \html_be_strict false \docbook_table_output 0 \docbook_mathml_prefix 1 \end_header \begin_body \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash exerc1[00] \end_layout \end_inset The text remarked that ` \family typewriter X EQU 1000 \family default ' does not assemble any instruction that sets the value of a variable. Suppose that you are writing a \family typewriter MIX \family default program in which the algorithm is supposed to set the value contained in certain memory cell (whose symbolic name is \family typewriter X \family default ) equal to 1000. How could you express this in \family typewriter MIXAL \family default ? \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset \begin_inset listings inline false status open \begin_layout Plain Layout ENTA 1000 \end_layout \begin_layout Plain Layout STA X \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash rexerc2[10] \end_layout \end_inset Line 12 of program M says ` \family typewriter JMP * \family default ', where \family typewriter * \family default denotes the location of that line. Why doesn't the program go into an infinite loop, endlessly repeating this instruction? \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset Because, at the entry point of the function, the code self-modifies, changing that instruction to a jump to the next instruction of the routine that called program M. \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash rexerc3[23] \end_layout \end_inset What is the effect of the following program, if it is used in conjunction with Program M? \end_layout \begin_layout Standard \begin_inset listings inline false status open \begin_layout Plain Layout START IN X+1(0) \end_layout \begin_layout Plain Layout JBUS *(0) \end_layout \begin_layout Plain Layout ENT1 100 \end_layout \begin_layout Plain Layout 1H JMP MAXIMUM \end_layout \begin_layout Plain Layout LDX X,1 \end_layout \begin_layout Plain Layout STA X,1 \end_layout \begin_layout Plain Layout STX X,2 \end_layout \begin_layout Plain Layout DEC1 1 \end_layout \begin_layout Plain Layout J1P 1B \end_layout \begin_layout Plain Layout OUT X+1(1) \end_layout \begin_layout Plain Layout HLT \end_layout \begin_layout Plain Layout END START \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset It reads 100 numbers from tape 0 and prints them sorted in nondecreasing order to tape 1. It first reads the 100 numbers, and then it finds the maximum of the elements, exchanges it with the last element in the list and repeats that with the list made of of all the remaining elements. Finally, it outputs the result. This is known as \emph on bubble sort \emph default , the slowest sensible sorting algorithm, with complexity \begin_inset Formula $O(n^{2})$ \end_inset . \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash rexerc4[25] \end_layout \end_inset Assemble Program P by hand. (It won't take as long as you think.) What are the actual numerical contents of memory, corresponding to that symbolic program? \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset See figure \begin_inset CommandInset ref LatexCommand ref reference "fig:e1234" plural "false" caps "false" noprefix "false" nolink "false" \end_inset . \end_layout \begin_layout Standard \begin_inset Float figure placement document alignment document wide false sideways false status open \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash soffsets \end_layout \end_inset \end_layout \begin_layout Plain Layout \align center \begin_inset Tabular \begin_inset Text \begin_layout Plain Layout \begin_inset space ~ \end_inset \family typewriter 3000 \family default \begin_inset space ~ \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte0 \backslash byte{18} \backslash byte{35} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3001 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{2051} \backslash byte0 \backslash byte5 \backslash byte9 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3002 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{2050} \backslash byte0 \backslash byte5 \backslash byte{10} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3003 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes1 \backslash byte0 \backslash byte0 \backslash byte{49} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3004 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{499} \backslash byte1 \backslash byte5 \backslash byte{26} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3005 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{3016} \backslash byte0 \backslash byte1 \backslash byte{41} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3006 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes2 \backslash byte0 \backslash byte0 \backslash byte{50} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3007 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes2 \backslash byte0 \backslash byte2 \backslash byte{51} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3008 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte0 \backslash byte2 \backslash byte{48} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3009 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte2 \backslash byte2 \backslash byte{55} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3010 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte- \backslash twobytes1 \backslash byte3 \backslash byte5 \backslash byte4 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3011 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{3006} \backslash byte0 \backslash byte1 \backslash byte{47} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3012 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte- \backslash twobytes1 \backslash byte3 \backslash byte5 \backslash byte{56} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3013 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes1 \backslash byte0 \backslash byte0 \backslash byte{51} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3014 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{3008} \backslash byte0 \backslash byte6 \backslash byte{39} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3015 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{3003} \backslash byte0 \backslash byte0 \backslash byte{39} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3016 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{1995} \backslash byte0 \backslash byte{18} \backslash byte{37} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3017 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{2035} \backslash byte0 \backslash byte2 \backslash byte{52} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3018 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte- \backslash twobytes{50} \backslash byte0 \backslash byte2 \backslash byte{53} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3019 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{501} \backslash byte0 \backslash byte0 \backslash byte{53} \end_layout \end_inset \end_layout \end_inset \end_inset \begin_inset ERT status open \begin_layout Plain Layout \backslash hfil{} \end_layout \end_inset \begin_inset Tabular \begin_inset Text \begin_layout Plain Layout \begin_inset space ~ \end_inset \family typewriter 3020 \family default \begin_inset space ~ \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte- \backslash twobytes1 \backslash byte5 \backslash byte5 \backslash byte8 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3021 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte0 \backslash byte1 \backslash byte5 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3022 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte4 \backslash byte{12} \backslash byte{31} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3023 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes1 \backslash byte0 \backslash byte1 \backslash byte{52} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3024 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{50} \backslash byte0 \backslash byte1 \backslash byte{53} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3025 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{3020} \backslash byte0 \backslash byte2 \backslash byte{45} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3026 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte4 \backslash byte{18} \backslash byte{37} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3027 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{24} \backslash byte4 \backslash byte5 \backslash byte{12} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3028 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes{3019} \backslash byte0 \backslash byte0 \backslash byte{45} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 3029 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash twobytes0 \backslash byte0 \backslash byte2 \backslash byte5 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 0000 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash fivebytes2 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 1995 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash byte6 \backslash byte9 \backslash byte{19} \backslash byte{22} \backslash byte{23} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 1996 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash byte0 \backslash byte6 \backslash byte9 \backslash byte{25} \backslash byte5 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 1997 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash byte0 \backslash byte8 \backslash byte{24} \backslash byte{15} \backslash byte4 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 1998 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash byte{19} \backslash byte5 \backslash byte4 \backslash byte0 \backslash byte{17} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 1999 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash byte{19} \backslash byte9 \backslash byte{14} \backslash byte5 \backslash byte{22} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 2024 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash fivebytes{2035} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 2049 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash fivebytes{2010} \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 2050 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte+ \backslash fivebytes3 \end_layout \end_inset \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \family typewriter 2051 \end_layout \end_inset \begin_inset Text \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash byte- \backslash fivebytes{499} \end_layout \end_inset \end_layout \end_inset \end_inset \end_layout \begin_layout Plain Layout \begin_inset ERT status open \begin_layout Plain Layout \backslash eoffsets \end_layout \end_inset \end_layout \begin_layout Plain Layout \begin_inset Caption Standard \begin_layout Plain Layout \begin_inset CommandInset label LatexCommand label name "fig:e1234" \end_inset Machine code for Program P. \end_layout \end_inset \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash exerc7[10] \end_layout \end_inset \end_layout \begin_layout Enumerate What is the meaning of ` \family typewriter 4B \family default ' in line 34 of Program P? \end_layout \begin_layout Enumerate What effect, if any, would be cause if the location of line 15 were changed to ` \family typewriter 2H \family default ' and the address of line 20 were changed to ` \family typewriter 2B \family default '? \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset \end_layout \begin_layout Enumerate It references the address at line 29, the first previous line with label ` \family typewriter 4H \family default '. \end_layout \begin_layout Enumerate Line 14 would reference line 15 instead of line 25 and line 24 would reference line 15 instead of line 12. \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash rexerc8[24] \end_layout \end_inset What does the following program do? (Do not run it on a computer, figure it out by hand!) \end_layout \begin_layout Standard \begin_inset listings inline false status open \begin_layout Plain Layout * MYSTERY PROGRAM \end_layout \begin_layout Plain Layout BUF ORIG *+3000 \end_layout \begin_layout Plain Layout 1H ENT1 1 \end_layout \begin_layout Plain Layout ENT2 0 \end_layout \begin_layout Plain Layout LDX 4F \end_layout \begin_layout Plain Layout 2H ENT3 0,1 \end_layout \begin_layout Plain Layout 3H STZ BUF,2 \end_layout \begin_layout Plain Layout INC2 1 \end_layout \begin_layout Plain Layout DEC3 1 \end_layout \begin_layout Plain Layout J3P 3B \end_layout \begin_layout Plain Layout STX BUF,2 \end_layout \begin_layout Plain Layout INC2 1 \end_layout \begin_layout Plain Layout INC1 1 \end_layout \begin_layout Plain Layout CMP1 =75= \end_layout \begin_layout Plain Layout JL 2B \end_layout \begin_layout Plain Layout ENN2 2400 \end_layout \begin_layout Plain Layout OUT BUF+2400,2(18) \end_layout \begin_layout Plain Layout INC2 24 \end_layout \begin_layout Plain Layout J2N *-2 \end_layout \begin_layout Plain Layout HLT \end_layout \begin_layout Plain Layout 4H ALF AAAAA \end_layout \begin_layout Plain Layout END 1B \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset An analysis shows that the code is not self-modifying and that it's equivalent to the following pseudo-C: \end_layout \begin_layout Standard \begin_inset listings inline false status open \begin_layout Plain Layout r2 = 0; \end_layout \begin_layout Plain Layout x = * \begin_inset Quotes erd \end_inset AAAAA \begin_inset Quotes erd \end_inset ; \end_layout \begin_layout Plain Layout for (r1 = 1; r1 < 75; r1++) { \end_layout \begin_layout Plain Layout for (or3m75 = 0; or3m75 < r1; or3m75++) \end_layout \begin_layout Plain Layout *r2++ = 0; \end_layout \begin_layout Plain Layout *r2++ = x; \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout for (f2i24p100 = 0; r2i24p100 < 100; r2i24p100++) \end_layout \begin_layout Plain Layout write(PRINTER, r2i24p100 * 24); \end_layout \end_inset \end_layout \begin_layout Standard The program code begins at position 3000, and the programs writes until position \begin_inset Formula \[ (2+\dots+75)-1=(1+\dots+74)+74-1=\frac{74\cdot75}{2}+74-1=\frac{74\cdot77}{2}-1=2848, \] \end_inset so the code is indeed not self-modifying. For each iteration \begin_inset Formula $i$ \end_inset from 1 to 74, the code stores \begin_inset Formula $5i$ \end_inset spaces and then 5 A's, and then the code prints the first 12000 characters from those. \end_layout \begin_layout Standard As an aside, the same effect can be obtained with the following actual C code, provided there are no runtime errors: \end_layout \begin_layout Standard \begin_inset listings inline false status open \begin_layout Plain Layout #include \end_layout \begin_layout Plain Layout #include \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout int main() \end_layout \begin_layout Plain Layout { \end_layout \begin_layout Plain Layout char buffer[15000]; \end_layout \begin_layout Plain Layout int i, j, k = 0; \end_layout \begin_layout Plain Layout \end_layout \begin_layout Plain Layout for (i = 1; i < 75; i++) { \end_layout \begin_layout Plain Layout for (j = 0; j < i; j++) \end_layout \begin_layout Plain Layout strcpy(buffer + 5*(k++), " "); \end_layout \begin_layout Plain Layout strcpy(buffer + 5*(k++), "AAAAA"); \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout for (i = 0; i < 100; i++) { \end_layout \begin_layout Plain Layout fwrite(buffer + 120*i, 120, 1, stdout); \end_layout \begin_layout Plain Layout putchar(' \backslash n'); \end_layout \begin_layout Plain Layout } \end_layout \begin_layout Plain Layout return 0; \end_layout \begin_layout Plain Layout } \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash rexerc9[25] \end_layout \end_inset Location \family typewriter INST \family default contains a \family typewriter MIX \family default word that purportedly is a \family typewriter MIX \family default instruction. Write a \family typewriter MIX \family default program that jumps to location \family typewriter GOOD \family default if the word has a valid C-field, valid \begin_inset Formula $\pm\text{AA}$ \end_inset -field, valid I-field, and valid F-field, according to Table 1.3.1–1; your program should jump to location \family typewriter BAD \family default otherwise. Remember that the test for a valid F-field depends on the C-field; for example, if \begin_inset Formula $\text{C}=7$ \end_inset ( \family typewriter MOVE \family default ), any F-field is acceptable, but if \begin_inset Formula $\text{C}=8$ \end_inset ( \family typewriter LDA \family default ), the F-field must have the form \begin_inset Formula $8L+R$ \end_inset where \begin_inset Formula $0\leq L\leq R\leq5$ \end_inset . The \begin_inset Quotes eld \end_inset \begin_inset Formula $\pm\text{AA}$ \end_inset \begin_inset Quotes erd \end_inset -field is to be considered valid \emph on unless \emph default C specifies an instruction requiring a memory address and \begin_inset Formula $\text{I}=0$ \end_inset and \begin_inset Formula $\pm\text{AA}$ \end_inset is not a valid memory address. \end_layout \begin_layout Standard \emph on Note \emph default : Inexperienced programmers tend to tackle a problem like this by writing a long series of tests on the C-field, such as ` \family typewriter LDA C \family default ; \family typewriter JAZ 1F \family default ; \family typewriter DECA 5 \family default ; \family typewriter JAN 2F \family default ; \family typewriter JAZ 3F \family default ; \family typewriter DECA 2 \family default ; \family typewriter JAN 4F \family default ; ...'. This is \emph on not \emph default good practice! The best way to make multiway decisions is to prepare an auxiliary \emph on table \emph default containing information that encapsulates the desired logic. If there were, for example, a table of 64 entries, we could write ` \family typewriter LD1 C \family default ; \family typewriter LD1 TABLE,1 \family default ; \family typewriter JMP 0,1 \family default '— thereby jumping very speedily to the desired routine. Other useful information can also be kept in such a table. A tabular approach to the present problem makes the program only a little bit longer (including the table) and greatly increases its speed and flexibility. \end_layout \begin_layout Standard \begin_inset ERT status open \begin_layout Plain Layout \backslash answer \end_layout \end_inset \end_layout \begin_layout Standard \begin_inset listings inline false status open \begin_layout Plain Layout ADDR EQU 0:2 \end_layout \begin_layout Plain Layout INDEX EQU 3:3 \end_layout \begin_layout Plain Layout FIELD EQU 4:4 \end_layout \begin_layout Plain Layout CODE EQU 5:5 \end_layout \begin_layout Plain Layout LD1 INST(CODE) \end_layout \begin_layout Plain Layout LD3 INST(INDEX) ; Load I-field \end_layout \begin_layout Plain Layout ENTA -6,3 ; Check if I-field > 6 \end_layout \begin_layout Plain Layout JAP BAD \end_layout \begin_layout Plain Layout J3NZ 2F ; I-field nonzero, skip AA test \end_layout \begin_layout Plain Layout LDX TABLE,1(0:0) \end_layout \begin_layout Plain Layout ENTX 1(5:5) ; 1 when AA is address, -1 otherwise \end_layout \begin_layout Plain Layout JXN 2F \end_layout \begin_layout Plain Layout LDA INST(ADDR) \end_layout \begin_layout Plain Layout JAN BAD ; Addr relevant, index 0, addr negative \end_layout \begin_layout Plain Layout 2H LDA INST(FIELD) ; Field test: dispatch \end_layout \begin_layout Plain Layout LD1 TABLE,1(4:5) \end_layout \begin_layout Plain Layout JMP 0,1 \end_layout \begin_layout Plain Layout BOUND CMPA TABLE,1(3:3); F-field in [0,CONTENTS(TABLE,1(3:3))] \end_layout \begin_layout Plain Layout JL GOOD \end_layout \begin_layout Plain Layout JMP BAD \end_layout \begin_layout Plain Layout RANSX CMPA =6= ; F-field in range or 6 \end_layout \begin_layout Plain Layout JE GOOD \end_layout \begin_layout Plain Layout RANGE SRAX 5 ; rAX is the F-field \end_layout \begin_layout Plain Layout DIV =8= ; rA:rX is the F-field \end_layout \begin_layout Plain Layout CMPA FIVE \end_layout \begin_layout Plain Layout JG BAD \end_layout \begin_layout Plain Layout CMPX FIVE \end_layout \begin_layout Plain Layout JG BAD \end_layout \begin_layout Plain Layout STA *+1(0:2) ; rX -= rA \end_layout \begin_layout Plain Layout DECX * \end_layout \begin_layout Plain Layout JXN BAD ; If rX < rA, dat's bad \end_layout \begin_layout Plain Layout JMP GOOD \end_layout \begin_layout Plain Layout ; Format is Sign(0:0), F-field test (4:5), where Sign is \end_layout \begin_layout Plain Layout ; positive iff the +/-AA field represents an address and \end_layout \begin_layout Plain Layout ; F-field test jumps to GOOD if the F-field is valid for the \end_layout \begin_layout Plain Layout ; given case or to BAD otherwise. Fields 1:3 may contain \end_layout \begin_layout Plain Layout ; specific information \end_layout \begin_layout Plain Layout IODEV EQU 21(0:3),BOUND(4:5) ; Field is I/O device \end_layout \begin_layout Plain Layout JMPBY EQU 6(0:3),BOUND(4:5) ; Field is Jx+ \end_layout \begin_layout Plain Layout IMMAT EQU 4(0:3),BOUND(4:5) ; Field is INCx/DECx/ENTx/ENNx \end_layout \begin_layout Plain Layout TABLE CON -GOOD ; NOP \end_layout \begin_layout Plain Layout CON RANSX ; ADD/FADD \end_layout \begin_layout Plain Layout CON RANSX ; SUB/FSUB \end_layout \begin_layout Plain Layout CON RANSX ; MUL/FMUL \end_layout \begin_layout Plain Layout CON RANSX ; DIV/FDIV \end_layout \begin_layout Plain Layout CON -3(0:3),BOUND(4:5) ; NUM/CHAR/HLT \end_layout \begin_layout Plain Layout CON -6(0:3),BOUND(4:5) ; SLA/SRA/SLAX/SRAX/SLC/SRC \end_layout \begin_layout Plain Layout CON GOOD ; MOVE \end_layout \begin_layout Plain Layout CON RANGE ; LDA \end_layout \begin_layout Plain Layout CON RANGE ; LD1 \end_layout \begin_layout Plain Layout CON RANGE ; LD2 \end_layout \begin_layout Plain Layout CON RANGE ; LD3 \end_layout \begin_layout Plain Layout CON RANGE ; LD4 \end_layout \begin_layout Plain Layout CON RANGE ; LD5 \end_layout \begin_layout Plain Layout CON RANGE ; LD6 \end_layout \begin_layout Plain Layout CON RANGE ; LDX \end_layout \begin_layout Plain Layout CON RANGE ; LDAN \end_layout \begin_layout Plain Layout CON RANGE ; LD1N \end_layout \begin_layout Plain Layout CON RANGE ; LD2N \end_layout \begin_layout Plain Layout CON RANGE ; LD3N \end_layout \begin_layout Plain Layout CON RANGE ; LD4N \end_layout \begin_layout Plain Layout CON RANGE ; LD5N \end_layout \begin_layout Plain Layout CON RANGE ; LD6N \end_layout \begin_layout Plain Layout CON RANGE ; LDXN \end_layout \begin_layout Plain Layout CON RANGE ; STA \end_layout \begin_layout Plain Layout CON RANGE ; ST1 \end_layout \begin_layout Plain Layout CON RANGE ; ST2 \end_layout \begin_layout Plain Layout CON RANGE ; ST3 \end_layout \begin_layout Plain Layout CON RANGE ; ST4 \end_layout \begin_layout Plain Layout CON RANGE ; ST5 \end_layout \begin_layout Plain Layout CON RANGE ; ST6 \end_layout \begin_layout Plain Layout CON RANGE ; STX \end_layout \begin_layout Plain Layout CON RANGE ; STJ \end_layout \begin_layout Plain Layout CON RANGE ; STZ \end_layout \begin_layout Plain Layout CON IODEV ; JBUS \end_layout \begin_layout Plain Layout CON -IODEV ; IOC \end_layout \begin_layout Plain Layout CON IODEV ; IN \end_layout \begin_layout Plain Layout CON IODEV ; OUT \end_layout \begin_layout Plain Layout CON IODEV ; JRED \end_layout \begin_layout Plain Layout CON 10(0:3),BOUND(4:5) ; JMP/JSJ/JOV/JNOV/* \end_layout \begin_layout Plain Layout CON JMPBY ; JA+ \end_layout \begin_layout Plain Layout CON JMPBY ; J1+ \end_layout \begin_layout Plain Layout CON JMPBY ; J2+ \end_layout \begin_layout Plain Layout CON JMPBY ; J3+ \end_layout \begin_layout Plain Layout CON JMPBY ; J4+ \end_layout \begin_layout Plain Layout CON JMPBY ; J5+ \end_layout \begin_layout Plain Layout CON JMPBY ; J6+ \end_layout \begin_layout Plain Layout CON JMPBY ; JX+ \end_layout \begin_layout Plain Layout CON IMMAT ; INCA/DECA/ENTA/ENNA \end_layout \begin_layout Plain Layout CON IMMAT ; INC1/... \end_layout \begin_layout Plain Layout CON IMMAT ; INC2/... \end_layout \begin_layout Plain Layout CON IMMAT ; INC3/... \end_layout \begin_layout Plain Layout CON IMMAT ; INC4/... \end_layout \begin_layout Plain Layout CON IMMAT ; INC5/... \end_layout \begin_layout Plain Layout CON IMMAT ; INC6/... \end_layout \begin_layout Plain Layout CON IMMAT ; INC7/... \end_layout \begin_layout Plain Layout CON RANSX ; CMPA/FCMP \end_layout \begin_layout Plain Layout CON RANGE ; CMP1 \end_layout \begin_layout Plain Layout CON RANGE ; CMP2 \end_layout \begin_layout Plain Layout CON RANGE ; CMP3 \end_layout \begin_layout Plain Layout CON RANGE ; CMP4 \end_layout \begin_layout Plain Layout CON RANGE ; CMP5 \end_layout \begin_layout Plain Layout CON RANGE ; CMP6 \end_layout \begin_layout Plain Layout CON RANGe ; CMPX \end_layout \begin_layout Plain Layout FIVE CON 5 \end_layout \end_inset \end_layout \end_body \end_document