3.1: Descripción general del formato de instrucciones de código de máquina
- Page ID
- 80657
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Todas las instrucciones de código de máquina para nuestra computadora consistirán en dos segmentos de 4 bits y un segmento de 8 bits, como se muestra a continuación.
El primer segmento de 4 bits representará el tipo de operación. Los posibles tipos de operaciones son los siguientes:
- 1 —Este opcode representa una operación inmediata que utiliza la ALU para producir un resultado. Esta instrucción consiste en el código de operación de 4 bits, una opción ALU de 4 bits (ALUOpt) para decirle a la ALU qué operación ejecutar, y un valor inmediato de datos de 8 bits para un operando. Según se implementa la ALU solo ejecuta 2 operaciones, 0x0 es sumar y 0x1 es restar, aunque los ejercicios al final del texto agregan más operaciones. Se pueden implementar un máximo de 16 operaciones en la CPU.
A continuación se muestran ejemplos de traducción de estas instrucciones de montaje en código de máquina.
La instrucción:
addi 2
se traduce en el siguiente código de máquina:
0x1002
La instrucción:
subi 15
se traduce al siguiente código de máquina
0x110f
- 2 — Este opcode representa una operación de dirección de memoria que utiliza la ALU para producir un resultado. Esta instrucción consiste en el código de operación de 4 bits, un AluOpt de 4 bits para decirle a la ALU qué operación ejecutar, y una dirección de memoria de datos de 8 bits para un operando. Según se implementa la ALU solo ejecuta 2 operaciones, 0x0 es sumar y 0x1 es restar, aunque los ejercicios al final del texto agregan más operaciones. Se pueden implementar un máximo de 16 operaciones en la CPU.
A continuación se muestran ejemplos de traducción de estas instrucciones de montaje en código de máquina.
La instrucción:
add 2
se traduce en el siguiente código de máquina:
0x2002
La instrucción
sub 15
se traduce en el siguiente código de máquina
0x210f
Tenga en cuenta que durante el proceso de ensamblaje las etiquetas en el código de ensamblaje se traducen en direcciones, por lo que las etiquetas nunca aparecerán en el código
- 3 — Este opcode ejecuta la operación clac (por ejemplo, establece el
$ac
en 0). En esta instrucción se ignoran todos los bits posteriores después del 0x3, por lo que pueden contener cualquier valor. Por convención, los bits adicionales siempre deben establecerse en 0.Por ejemplo, las siguientes instrucciones de montaje
clac
se traduce en
0x3000
- 4 — Este opcode ejecuta la operación stor. En esta instrucción no se utiliza el ALU opt de 4 bits, y debe establecerse en 0. El valor de la dirección es la dirección en la que almacenar el valor en el
$ac
. Por ejemplo, la siguiente instrucciónstor 15
se traduce en:
0x400f
- 0x5 — El opcode ejecuta la operación beqz. En esta instrucción no se utiliza la operación ALU de 4 bits, y se debe poner en blanco. El resultado de esta operación es que
$pc
se establece en el valor de dirección si el$ac
es cero. Establecer el valor para el$pc
hace que el programa se ramifique a esa dirección.Por ejemplo, la siguiente instrucción
beqz 40
se traduce en:
0x5028