Manual de referencia de Pep/8

Pep/8 es una Computadora con Conjunto de Instrucciones Complejas de 16 bits (CISC). Está diseñado para enseñar arquitectura de computadoras y los principios de programación en lenguaje ensamblador. Sus 39 instrucciones están basadas en un código de operación y expansión; son ya sea unario (un byte) o nonunarias (tres bytes). Los ocho modos de direccionamiento están diseñados para la traducción directa entre C/C++ y el lenguaje ensamblador.

Temas: Conjunto de instrucciones, Estableciendo el bit C en la resta, Estableciendo el bit N en CPr, Comandos de punto, Modos de direccionamiento, Campo del registro, Etiquetas de seguimiento, Resumen de la sintaxis del lenguaje ensamblador.

Conjunto de instrucciones

,
Especificador de la Instrucción Mnemotécnico Instrucción Modos de direccionamiento Bits de estado
0000 0000 STOP Detener ejecución U
0000 0001 RETTR Retorno de la trampa U
0000 0010 MOVSPA Mover SP a A U
0000 0011 MOVFLGA Mover banderas NZVC a A U
0000 010a BR Branch unconditional i, x
0000 011a BRLE Branch if less than or equal to i, x
0000 100a BRLT Branch if less than i, x
0000 101a BREQ Branch if equal to i, x
0000 110a BRNE Branch if not equal to i, x
0000 111a BRGE Branch if greater than or equal to i, x
0001 000a BRGT Branch if greater than i, x
0001 001a BRV Branch if V i, x
0001 010a BRC Branch if C i, x
0001 011a CALL Call subroutine i, x
0001 100r NOTr Bitwise invert r U N Z
0001 101r NEGr Negate r U N Z V
0001 110r ASLr Arithmetic shift left r U N Z V C
0001 111r ASRr Arithmetic shift right r U N Z C
0010 000r ROLr Rotate left r U C
0010 001r RORr Rotate right r U C
0010 01nn NOPn Unary no operation trap U
0010 1aaa NOP Nonunary no operation trap i
0011 0aaa DECI Decimal input trap d, n, s, sf, x, sx, sxf N Z V
0011 1aaa DECO Decimal output trap i, d, n, s, sf, x, sx, sxf
0100 0aaa STRO String output trap d, n, sf
0100 1aaa CHARI Character input d, n, s, sf, x, sx, sxf
0101 0aaa CHARO Character output i, d, n, s, sf, x, sx, sxf
0101 1nnn RETn Return from call with n local bytes U
0110 0aaa ADDSP Add to stack pointer (SP) i, d, n, s, sf, x, sx, sxf N Z V C
0110 1aaa SUBSP Subtract from stack pointer (SP) i, d, n, s, sf, x, sx, sxf N Z V C
0111 raaa ADDr Add to r i, d, n, s, sf, x, sx, sxf N Z V C
1000 raaa SUBr Subtract from r i, d, n, s, sf, x, sx, sxf N Z V C
1001 raaa ANDr Operación bit a bit AND a r i, d, n, s, sf, x, sx, sxf N Z
1010 raaa ORr Operación bit a bit OR a r i, d, n, s, sf, x, sx, sxf N Z
1011 raaa CPr Compara r i, d, n, s, sf, x, sx, sxf N Z V C
1100 raaa LDr Carga r de la memoria i, d, n, s, sf, x, sx, sxf N Z
1101 raaa LDBYTEr Carga byte r de la memoria i, d, n, s, sf, x, sx, sxf N Z
1110 raaa STr Guarda r en la memoria d, n, s, sf, x, sx, sxf
1111 raaa STBYTEr Guarda el byte r en la memoria d, n, s, sf, x, sx, sxf

Ir a temas.

Estableciendo el bit C en la resta

A BRC después de una instrucción SUBR o RCP es equivalente a "sucursal si overflow sin signo" en este caso. Hay dos filosofías diferentes para establecer el bit de acarreo después de la sustracción.

Z80, x86 y SPARC tratan la bandera de acarreo como una "bandera prestada" al hacer una resta. Al restar x - y, si x es menor que y (tratamiento de los dos operandos como sin signo), la bandera de acarreo se establece porque se había "prestado". A BRC after a SUBr or CPr instruction is equivalent to "branch if unsigned overflow" in this case.

On other processor families, such as ARM and PowerPC, the carry flag after a subtraction is set to the adder carry output after computing (x + ~y + 1). When subtracting x - y, if x is greater than or equal to y (treating both operands as unsigned), the carry flag is set. A BRC after a SUBr or CPr instruction is equivalent to "branch if not unsigned overflow" in this case.

Previous versions of Pep/8 set the C bit on subtraction according to the first philosophy. However, starting with version 8.1.0, the C bit on subtraction is set according to the second philosophy. This is consistent with the section "The Carry Bit" in Chapter 3, and the adder/subtracter circuit in Figure 10.53 in the text.

En otras familias de procesadores, tales como ARM y PowerPC, la bandera de acarreo después de una sustracción se establece en el sumador de salida después de llevar a la computación (~ x + y + 1). Al restar x - y, si x es mayor o igual a y (tratamiento de los dos operandos como sin signo), se establece la bandera de acarreo. A BRC después de una instrucción SUBR o RCP es equivalente a "deriva cuando se desborda sin firmar" en este caso. Las versiones anteriores de Pep / 8 establece el bit C en la resta de acuerdo con la filosofía primera. Sin embargo, comenzando con la versión 8.1.0, el bit C en la resta se establece de acuerdo con la segunda filosofía. Esto es consistente con la sección "El bit de acarreo" en el Capítulo 3, y el circuito sumador / restador en la Figura 10.53 en el texto.

Ir a temas.

Estableciendo el bit N en CPr

Normalmente, el bit N duplica el bit de signo, de modo que N es 1 cuando el resultado de la operación es negativo. La instrucción de comparación CPr resta el operando en el Registro y establece los bits de estado sin almacenar el resultado de la resta.

Mientras no hay desbordamiento cuando los operandos se interpretan como números enteros con signo, el bit N se establece apropiadamente para un instrucción de ramificación condicional posterior. Si el resultado de la sustracción produce un desbordamiento y el bit N se establecieron como de costumbre, la subsiguiente instrucción de ramificación condicional podría ejecutar una rama errónea. En consecuencia, si el CPr resta desbordamientos de operación y establece el bit V, el bit N se invierte de su valor normal y no duplica el bit de signo.

Con este ajuste, la operación de comparación se extiende el rango de comparaciones válidas. A pesar de que hay un desbordamiento, el bit N se establece como si no existiera el desbordamiento, de modo que una rama condicional subsiguiente operará como se esperaba.

Ir a temas.

Comandos de punto

Commando de punto/th> Descripción
.ADDRSS símbolo La dirección de un símbolo (dos bytes)
.ASCII "cadena" Una cadena de bytes ASCII
.BLOCK n Un blogue de n bytes
.BURN 0xFFFF Iniciado ROM quemar terminando en 0xFFFF
Constante .BYTE El valor de byte (un byte)
.END El centinela para el ensamblador
Constante .EQUATE Equiparar un símbolo al valor de una constante
Constante .WORD El valor de una palabra (dos bytes)

Ir a temas.

Modos de direccionamiento

Addressing Mode aaa-field Letters Operand
Immediate 000 i OprndSpec
Direct 001 d Mem [OprndSpec ]
Indirect 010 n Mem [Mem [OprndSpec ] ]
Stack-relative 011 s Mem [SP + OprndSpec ]
Stack-relative deferred 100 sf Mem [Mem [SP + OprndSpec ] ]
Indexed 101 x Mem [OprndSpec + X ]
Stack-indexed 110 sx Mem [SP + OprndSpec + X ]
Stack-indexed deferred 111 sxf Mem [Mem [SP + OprndSpec ] + X ]

Ir a temas.

Modo de direccionamiento campo-a Letras Operando
Inmediato 0 i OprndSpec
Indexado 1 x Mem [OprndSpec + X ]

Ir a temas.

Campo del registro

Campo-r- Registro
0 Acumulador, A
1 Registro de indice, X

Ir a temas.

Etiquetas de seguimiento

Etiqueta Formato
#1c Caracteres de un byte
#1d Decimal de un byte
#2d Decimal de dos bytes
#1h Hexadecimal de un byte
#2h Hexadecimal de dos bytes
#2d4a Decimal de dos bytes, matriz de cuatro celdas (ejemplo)

Ir a temas.

Resumen de la sintaxis del lenguaje ensamblador

Un entero decimal comienza con un + o - opcional, seguido por un dígito decimal seguido de cero o más dígitos.

Un entero decimal que se utiliza .BYTE tiene un rando de -128 a 255 bytes, de lo contrario desde -32768 hasta 65535.

Un entero hexadecimal comienza con 0x o 0X seguido de uno o más dígitos hexadecimales (mayúsculas o minúsculas).

Un entero hexadecimal con .BYTE tiene un rango de 0 a FF, de lo contrario de 0 a FFFF.

Un solo caracter está encerrado entre comillas simples, como en 't'.

Una cadena ASCII se encierra entre comillas dobles, como en "Mi cadena".

Un byte arbitrario puede ser incluido en una cadena o un carácter anteponiendo exactamente dos dígitos hexadecimales con \x o \X, como en "Nulo terminado \ x00".

A double quote is included in a string by prefixing it with \, as in "She said, \"Hello\".".

A single quote is included in a character by prefixing it with \, as in '\''.

A backslash character is included in a string or character by prefixing it with \, as in "My bash is \\." and '\\'.

The following letters, when preceded by \, generate non printable characters—b backspace, f form feed, n line feed (new line), r carriage return, t horizontal tab, v vertical tab—in string and character constants, as in "\n Starts on a new line." and '\n'.

A backslash character followed by any character other than b, f, n, r, t, v, x, X, ", ', or \ (except for the second of a pair of \’s) is an error.

Una comilla doble (") precedida de una barra invertida en un carácter que no es necesario, pero es válido y representa una comilla doble.

Una comilla simple (') precedida de una barra invertida en una cadena que no es necesaria, pero es válido y representa una única cotización.

Una constante utilizado como un especificador operando que ocupa menos de dos bytes se justifican a la derecha en el campo de dos bytes.

Una constante utilizado como un especificador operando que ocupa más de dos bytes es un error.

Ir a temas.