Documentos de Académico
Documentos de Profesional
Documentos de Cultura
75.03
ASSEMBLER
Instrucciones y notas de programacin
2000 1er C
5,=F'243'). Al ensamblarse
Inmediatos
Especificacin del dato (1 byte) en instrucciones inmediatas (p.e. MVI LINEA, C'4').
Mscaras
Nmero decimal que responde a alguna de las 16 posibles combinaciones de un nibble (0 a 15)
que ser utilizado para evaluar la ocurrencia de uno o ms cdigos de condicin (p.e. BC 12,
CICLO).
R1,D2(X2,B2)
Add
AL
R1,D2(X2,B2)
Add logical
AP
D1(L1,B1),D2(L2,B2)
Add Decimal
Si
AR
R1,R2
Add
Si
BAL
R1,D2(X2,B2)
No
BALR
BC
BCR
BCT
BCTR
R1,R2
No
M1,D2(X2,B2)
No
M1,R2
Branch on condition
No
R1,D2(X2,B2)
R1,R2
Branch on count
No
Branch on count
No
R1,D2(X2,B2)
Compare
CL
R1,D2(X2,B2)
Compare logical
D1(L1,B1),D2(B2)
Compare Logical
Si
CLC
CLI
D1(B1),I2
CLM
R1,M3,D2(B2)
CLR
R1,R2
Compare Logical
Si
Compare logical
Si
CP
D1(L1,B1),D2(L2,B2)
CR
R1,R2
Compare Decimal
Si
Compare
Si
CVB
R1,D2(X2,B2)
Convert to binary
No
CVD
R1,D2(X2,B2)
Convert to decimal
No
R1,D2(X2,B2)
Divide
No
Divide Decimal
No
Divide
No
No
DP
D1(L1,B1),D2(L2,B2)
DR
R1,R2
IC
R1,D2(X2,B2)
Insert character
ICM
R1,M3,D2(B2)
Insert
Mask
R1,D2(X2,B2)
Load
No
LA
R1,D2(X2,B2)
Load address
No
LM
R1,R3,D2(B2)
LR
R1,R2
R1,D2(X2,B2)
Characters
under
Si
Load Multiple
No
Load
No
Multiply
No
MP
MR
D1(L1,B1),D2(L2,B2)
R1,R2
Multiply Decimal
No
Multiply
No
MVC
D1(L1,B1),D2(B2)
Move
No
MVI
D1(B1),I2
Move
No
MVN
MVZ
N
NC
NI
NR
O
OC
OI
OR
D1(L1,B1),D2(B2)
D1(L1,B1),D2(B2)
Move Numerics
No
Move Zones
No
R1,D2(X2,B2)
AND
D1(L1,B1),D2(B2)
AND
Si
D1(B1),I2
R1,R2
AND
AND
Si
R1,D2(X2,B2)
OR
D1(L1,B1),D2(B2)
OR
Si
D1(B1),I2
R1,R2
OR
OR
Si
PACK
SLA
SLDA
D1(L1,B1),D2(L2,B2)
R1,D2(X2,B2)
R1,D2(B2)
R1,D2(B2)
Pack
Substract
No
Si
Si
SLDL
R1,D2(B2)
No
SLL
R1,D2(B2)
No
SP
D1(L1,B1),D2(L2,B2)
Subtract Decimal
Si
SR
SRA
R1,R2
R1,D2(B2)
Subtract
Si
Si
SRDA
R1,D2(B2)
Si
SRDL
R1,D2(B2)
No
SRL
R1,D2(B2)
No
Store
No
ST
R1,D2(X2,B2)
STC
R1,D2(X2,B2)
Store Character
STCM
R1,M3,D2(B2)
Store
Mask
STM
R1,R3,D2(B2)
Store Multiple
No
TM
TR
TRT
D1(B1),I2
D1(L1,B1),D2(B2)
Translate
under
No
No
Si
Unpack
No
R1,D2(X2,B2)
Exclusive OR
XC
D1(L1,B1),D2(B2)
Exclusive OR
Si
XI
D1(B1),I2
Exclusive OR
UNPK
XR
ZAP
D1(L1,B1),D2(B2)
Characters
No
D1(L1,B1),D2(L2,B2)
R1,R2
D1(L1,B1),D2(L2,B2)
Exclusive OR
Si
Si
Notas de programacin
A continuacin, algunos detalles y notas sobre cuestiones comunes.
Instruccin
SR
5,5
LA
5,0
L
5,=F'0'
XR
5,5
N
5,=F'0'
SLL
5,32
SRL
5,32
SLDL
4,32
M
4,=F'0'
Explicacin
Resta el registro a s mismo
Carga la direccin 0 en el registro
Carga la palabra 00000000h en el registro
OR exclusiva del registro con s mismo [0 XOR 0 = 0 , 1 XOR 1 = 0]
X AND 00000000h = 00000000h
Desplaza todo el contenido del R5 (llena con ceros)
Desplaza todo el contenido del R5 (llena con ceros)
Desplaza todo el contenido del R5 (llena con ceros) [PISA EL R4]
Multiplica el R5 por 00000000h
Especial cuidado debe tenerse al efectuar conversiones de formato, ya que entonces vara el espacio requerido para
almacenar un nmero. En el caso particular de los empaquetados y los zoneados, se verifica las siguiente frmula:
Qz = (Qp * 2) 1
donde Qz es la cantidad de bytes del nmero en zoneado y Qp la cantidad de bytes del nmero en empaquetado. As,
el nmero empaquetado | 01 | 32 | 1C | (3 bytes) ocupar, en zoneado, 3 * 2 1 = 5 bytes. Del mismo modo, para
evaluar la situacin inversa, se puede despejar Qp para averiguar cuanto ocupar un zoneado en formato
empaquetado, teniendo en cuenta que si el resultado no es entero, se deber redondear hacia arriba para mantener la
integridad a nivel bytes.
Cuando se programa en ASM IBM/370 nunca se trabaja realmente con zoneados, ya que no es un formato con el
cual se pueda operar. De todas maneras, s se utiliza la codificacin EBCDIC de caracteres, en la cual los dgitos
numricos se expresan de igual manera que en zoneado (ver pg. 12 de la cartilla). Esto implica que si bien al utilizar
la instruccin UNPK se est llevando un nmero de empaquetado a zoneado, la verdadera utilidad que tendr esa
operacin ser llevar un nmero a EBCDIC para ser mostrado en pantalla. El problema surge porque EBCDIC no
interpreta la ltima zona de un zoneado como signo, sino como parte del ltimo caracter. Por ejemplo:
an cuando | 01 | 32 | 1F | empaquetado = | 01 | 32 | 1C | empaquetado ,
| 01 | 32 | 1F | empaquetado = | F0 | F1 | F3 | F2 | F1 | zoneado ==> 01321 (interpretando como EBCDIC)
| 01 | 32 | 1C | empaquetado = | F0 | F1 | F3 | F2 | C1 | zoneado ==> 0132A (interpretando como EBCDIC)
En estos casos (UNPK) se hace necesaria la utilizacin de la instruccin MVZ, para asegurarse de que en la ltima
zona haya siempre una F y as no perder un dgito.
Asimismo, cuando se lea de teclado un nmero negativo, el signo no podr ser "capturado" por la codificacin
EBCDIC, con lo cual deber ser manejado en forma independiente. Entonces, al empaquetarse (PACK) el nmero
ingresado para operar con l, ser importante considerar esto para eventualmente realizar una MVN que especifique
que el nmero es negativo.
Finalmente, es muy comn preguntarse cul es el empaquetado ms grande (en bytes) que se puede desempaquetar, o
cul es el zoneado ms grande que se puede empaquetar. Bueno, considerando que los empaquetados se manejan con
instrucciones SS (de dos longitudes), entonces el empaquetado ms grande manejable ser de 16 bytes (4 bits de la
instruccin se destinan a la longitud del empaquetado). Ahora bien, a pesar de ser esto as, un nmero en zoneado en
la mayora de los casos ocupa ms que el mismo nmero en empaquetado, con lo cual el mayor nmero (en bytes)
que puede ser desempaquetado sin ser truncado es uno de 8 bytes, mientras que el mayor nmero empaquetable es de
16 bytes (empaquetado ocupar menos).
empaquetado de 8 bytes ==> 8 * 2 1 = 15 ==> zoneado de 15 bytes (mximo desempaquetado)
empaquetado de 9 bytes ==> 9 * 2 1 = 17 ==> zoneado de 17 bytes (trunca el 1er byte de la izquierda)
zoneado de 16 bytes (mximo) ==> (16 + 1) / 2 = 9 ==> empaquetado de 9 bytes
Esta operacin, comunmente utilizada en el clculo de complemento, se puede realizar simplemente con una
Exclusive OR del registro contra una palabra inicializada con unos:
X
As,
Es bastante comn confundir las dos instrucciones. Sin embargo la diferencia es muy sencilla: la LOAD carga el
contenido de una palabra en un registro, mientras que la LOAD ADDRESS, aplicada al mismo registro y el mismo
campo, cargar el registro con la direccin de comienzo del campo. Por ejemplo:
R6 = 100h
R7 = 3h
108h (palabra en memoria) = 500h
Instruccin
L
5,5(6,7)
LA 5,5(6,7)
Anlisis
A(5,(6,7)) = 5 + (R6) + (R7) = 5h + 100h + 3h = 108h
Resuelve la direccin y busca la palabra almacenada a partir de esa direccin
(debe estar entornada a palabra). Segn el ejemplo, la palabra que comienza
en la 108h contiene 500h. Ese es el valor con el que carga el registro 5.
A(5,(6,7)) = 5 + (R6) + (R7) = 5h + 100h + 3h = 108h
Resuelve la direccin (108h) y ese es el valor con el que carga el registro 5.
(R5)
500h
108h
En cuanto a su funcionalidad, la LOAD se usa comunmente para cargar palabras a registros y para resolver
indirecciones:
L
4,ALFA
4,0(4)
donde
ALFA DC F'1234'
La LOAD ADDRESS, por su parte, se utiliza mucho en la inicializacin y actualizacin (incrementos) de registros.
LA 4,0
[inicializa el R4 en 0]
LA 4,1(4)
[incrementa el R4 en 1]
LA 4,TABLA
Una tarea usual dentro de un programa es el blanqueo de lneas que sern usadas para la salida por pantalla de
informacin resultante. Existe una forma clsica de hacerlo, que es mantener una zona de memoria constante con 80
caracteres "blancos" (suponiendo que el registro del archivo de salida a pantalla tiene 80 caracteres) de modo que
para blanquear la lnea en uso basta con ejecutar
MVC
LINEA, BLANCOS
Para definir la tabla de validacin por TRT para empaquetados habr que tener en cuenta lo siguiente:
1. Un byte empaquetado vlido es aquel en cuyos nibbles hay slo dgitos (salvo en el ltimo byte).
2. El ltimo byte de un empaquetado debe ser del tipo dgito-letra para ser vlido.
Entonces, bastar con mirar la columna HEX de la cartilla y definir una tabla en la cual, a las filas donde el valor de
columna sea del tipo dgito-dgito les corresponder un 00h, y a las filas donde el valor de columna sea del tipo
dgito-letra les corresponder, por ejemplo, un FFh, mientras que las restantes filas no sern de inters y por lo tanto
se les asignar un valor cualquiera. De esta forma, el 00h responder a los bytes considerados dentro del punto 1. y el
FFh a los bytes considerados en 2.
TABPACK
DS
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
0CL256
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
10X'00'
6X'FF'
96C'*'
TRT
EMPA,TABPACK
realizara la operacin deseada. El resultado se debe interpretar de la siguiente forma: un empaquetado vlido tiene
bytes del tipo dgito-dgito (todos menos el ltimo) y el ltimo byte del tipo dgito-letra. Mirando la tabla definida se
observa que todos los bytes del tipo dgito-dgito tienen asignado 00h, con lo cual el testeo de estos primeros bytes
ser exitoso. Al llegar al que sera el ltimo byte del empaquetado, el testeo no ser exitoso, puesto que los bytes del
tipo dgito-letra tienen asignado FFh. Sin embargo, se podra decir entonces que, siempre que el cdigo de condicin
resultante de la TRT sea 2 (la validacin fall en el ltimo byte del campo) y el consecuente contenido del byte de
menor peso del R2 (registro donde se guarda el byte de la tabla de comparacin por el cual fall la validacin) sea
FFh (byte asignado a los bytes del tipo dgito-letra), el campo contiene efectivamente un empaquetado. Traduciendo
esto a instrucciones:
TRT
BC
STC
CLI
BNE
EMPA,TABPACK
13, INVALIDO
2,BYTER2
BYTER2,X'FF'
INVALIDO
operacin de validacin
si el cdigo de condicin resultante es distinto de 2, es invlido
almacena el byte de menor peso de R2 en BYTER2
compara el contenido de BYTER2 con FFh
si la comparacin indica que no son iguales, es invlido
As, si el empaquetado es vlido, el programa seguir en la instruccin siguiente a BNE INVALIDO, mientras que
si resultara ser invlido el programa continuar en el rtulo INVALIDO.
Los bits 34 y 35 de la PSW estn reservados para el llamado cdigo de condicin (CC) que, consecuentemente puede
tomar como valores: 0, 1, 2 3 (expresado en decimal). El estado de esta dupla de bits (que refleja el resultado de
una operacin) en un momento determinado de la ejecucin de un programa depender del resultado de la ltima
operacin cuyo resultado lo afecte. Mientras no se ejecuten instrucciones que modifican el CC, en la PSW
permanecer almacenado el ltimo estado. En general se suele pensar en la actualizacin del cdigo de condicin
como resultado de una comparacin, pero no se debe perder de vista que el CC tambin es modificado por
operaciones tales como la suma y resta de empaquetados, corrimientos y operaciones lgicas. El detalle del
significado de los estados posibles para cada instruccin, y el listado completo de las instrucciones que trabajan
contra el CC se pueden ver en la pgina 5 de la cartilla IBM/370.
Por su parte, una mscara es un nibble que permite establecer condiciones mltiples de anlisis. Visto de modo ms
sencillo, la mscara permite evaluar el CC sin tener que limitarse a una condicin por vez haciendo corresponder
cada bit del nibble a uno de los estados posibles del CC. Por ejemplo:
Cdigo de condicin (2 bits)
Valor del bit de mscara
0
8
iguales
1
4
2
2
3
1
-
Suponiendo entonces que se ejecuta una comparacin entre dos operandos iguales, el CC resultante ser 0, ya que
corresponde con la condicin de igualdad. Ahora, si luego de una comparacin se quisiera bifurcar a SEGUIR si el
operando 1 es mayor o igual al operando 2, entonces la construccin de la mscara se llevar a cabo sumando todas
las condiciones por las cuales se quiere bifurcar. En este caso:
bifurcacin por
mscara
As,
BC
CC = 0 (iguales)
8
10, SEGUIR
10