diff options
| author | Juan Marín Noguera <juan@mnpi.eu> | 2025-05-16 22:18:44 +0200 |
|---|---|---|
| committer | Juan Marín Noguera <juan@mnpi.eu> | 2025-05-16 22:18:44 +0200 |
| commit | 4f670b750af5c11e1eac16d9cd8556455f89f46a (patch) | |
| tree | e0f8d7b33df2727d89150f799ee8628821fda80a /vol1/1.4.3.2.lyx | |
| parent | 16ccda6c459c0fd7ca2081e9d541124c28b0c556 (diff) | |
Changed layout for more manageable volumes
Diffstat (limited to 'vol1/1.4.3.2.lyx')
| -rw-r--r-- | vol1/1.4.3.2.lyx | 294 |
1 files changed, 294 insertions, 0 deletions
diff --git a/vol1/1.4.3.2.lyx b/vol1/1.4.3.2.lyx new file mode 100644 index 0000000..7c36188 --- /dev/null +++ b/vol1/1.4.3.2.lyx @@ -0,0 +1,294 @@ +#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 Note Note +status open + +\begin_layout Plain Layout +TODO 3, + 4, + 7 (1p, + 1:09) +\end_layout + +\end_inset + + +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +exerc3[10] +\end_layout + +\end_inset + +The previous exercise suggests having the trace program write its output onto tape. + Discuss why this would be preferable to printing it directly. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +The output of the tracer would be large, + and so it would need to be analyzed by another program in order to focus on interesting parts or gather some statistics. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc4[25] +\end_layout + +\end_inset + +What would happen if the trace routine were tracing +\emph on +itself +\emph default +? + Specifically, + consider the behavior if the two instructions +\family typewriter +ENTX LEAVEX +\family default +; + +\family typewriter +JMP *+1 +\family default + were placed just before +\family typewriter +ENTER +\family default +. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +Unfortunately this wouldn't work, + as the registers A and J of the tracing tracing program and the traced traced program would be stored in the same addresses. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +rexerc7[25] +\end_layout + +\end_inset + +Discuss how to write an efficient +\emph on +jump trace +\emph default + routine, + which emits much less output than a normal trace. + Instead of displaying the register contents, + a jump trace simply records the jumps that occur. + It outputs a sequence of pairs +\begin_inset Formula $(x_{1},y_{1}),(x_{2},y_{2}),\dots$ +\end_inset + +, + meaning that the program jumped from location +\begin_inset Formula $x_{1}$ +\end_inset + + to +\begin_inset Formula $y_{1}$ +\end_inset + +, + then (after performing the instructions in locations +\begin_inset Formula $y_{1},y_{1}+1,\dots,x_{2}$ +\end_inset + +) it jumped from +\begin_inset Formula $x_{2}$ +\end_inset + + to +\begin_inset Formula $y_{2}$ +\end_inset + +, + etc. +\end_layout + +\begin_layout Standard +\begin_inset ERT +status open + +\begin_layout Plain Layout + + +\backslash +answer +\end_layout + +\end_inset + +We could save this information right at the +\family typewriter +JUMP +\family default + label. + At this point, + +\family typewriter +PREG +\family default + contains the current instruction and +\family typewriter +INST1 +\family default + contains the instruction to jump to, + so it should be easy to move those to values to a buffer and call a subroutine to write to tape when the buffer is full. +\end_layout + +\begin_layout Standard +If the code wasn't self-modifying, + we could just scan up to the next jump instruction, + modify that one, + and run up to that point, + and the solution from the book specifies just that except that it allows +\family typewriter +STJ +\family default + to modify jump calls by handling this case separately during the scan. + Since modern processors can raise an exception when modifying their own code (W^X), + it should be possible to save all the jump calls in some table and substitute them by calls to a debugger routine before running, + accepting that the program may detect that it's being debugged by looking at its own jump calls. +\end_layout + +\end_body +\end_document |
