#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