Manual Assembler
Manual Assembler
Manual Assembler
Montador Assembler
PGM Módulo
Fonte ASM Módulo LKED
Objeto de
Carga
PROCEDURES: (SYS1.PROCLIB)
BINÁRIA: 1 0 1 1 0 1 0 1
7 6 5 4 3 2 1 0
x2 x2 x2 x2 x2 x2 x2 x2
BINÁRIA: 1 0 1 1 0 1 0 1
3 2 1 0 3 2 1 0
x2 x2 x2 x2 x2 x2 x2 x2
8 + 0 + 2 + 1 0 + 4 + 0 + 1
HEXADECIMAL: B 5
1 0
x16 x16
CONTINUAÇÃO
1-------10----16------------------------------------------------------72
Estrutura de um programa Assembler
PROGRAMA COMPILADO
ENDEREÇO INSTRUÇÃO ENDEREÇOS
OPERANDOS
• DC – Define Constant
– Cria e inicializa os bytes de uma área de memória com um conteúdo definido.
– Exemplo: Definir uma constante chamada ‘CEM’ com o valor ‘100’
CEM DC C’100’
• DS – Define Storage
– Só reserva espaço na memória. O conteúdo é indefinido.
– Exemplo: Reservar uma área de memória de ’50’ bytes com o nome de
‘ENTRADA’
ENTRADA DS CL50
Constantes e Storage
• DC e DS – Fator de duplicação e tamanho do campo
Podemos definir várias constantes ou storage numa única instrução utilizando o fator de
duplicação e/ou o de tamanho de campo.
• Exemplo1: Definir uma constante de 100 bytes com o conteúdo ‘A’
TABELA DC 100C’A’ (onde 100 é o fator de duplicação)
• DC e DS – Tipo do campo
Mais usados:
B – binário C – character
X – hexadecimal P – compactada
A – endereço interno V – endereço externo
Exemplo: Definir uma constante de 1 byte chamada HEXA01 com o conteúdo hexadecimal
‘7F’.
HEXA01 DC X’7F’ (onde X é o tipo de campo)
Literais
• São constantes que não têm um nome, ou seja, são definidas pela instrução que a
utiliza
• Todas as literais são organizadas pelo assembler após a instrução LTORG
• Uma literal não pode ser alterada diretamente pelo programa
• Literais iniciam pelo caracter ‘=‘ na instrução que a define
• Exemplo: Comparar o conteúdo do registrador 1 com ’30’
C 1,=F’30’
Instruções ao Montador
CSECT e DSECT
• USING
– Define um endereço base para uma CSECT ou DSECT
– Um registrador deve apontar para a área que está sendo baseada
– Exemplo: Definir um endereço base para uma CSECT CIC
USING CIC,12 (onde 12 é o registrador)
• DROP
– Encerra o endereçamento base estabelecido pela USING
– Utilizado para liberar um registrador para basear uma outra CSECT ou
DSECT
– Exemplo: Liberar o registrador base da CSECT CIC
DROP 12
Instruções ao Montador
START e END
• EQU – Equate
– Define um valor para um símbolo
– Exemplo: Definir um campo chamado RETCODE4 cujo valor é ‘4’
RETCODE4 EQU C’4’
EQU * (* indica que o valor do equate é o do endereço atual)
Código de máquina gerado: (supondo R12 como base do programa e ‘306’ como
deslocamento do campo CONTADOR)
5A20C306
Código de máquina gerado: (supondo R11 como base do programa e ‘102’ como
deslocamento do campo SAVEREGS)
9837B102
Código de máquina gerado: (supondo R11 como base do programa e ‘068’ como
deslocamento do campo BCT102)
92E7B068
Código de máquina gerado: (supondo R11 como base do programa, ‘136’ e ’13A’
os deslocamentos dos campos TOTAL e CAMPO1, 2 bytes de tamanho do
CAMPO1 e 4 bytes o tamanho do TOTAL)
FA31C136C13A
Código da Tam. 1 Tam. 2 Base 1 Deslocamento 1 Base 2 Deslocamento 2
Instrução AP (4 bytes) (2 bytes) (R11) (136) (R11) (13A)
Formato das Instruções
Outros formatos
Linkage Conventions
SAVEAREA
• Área de 72 bytes passada pelo programa chamador no R13
• Usada pelo programa chamado para salvar os registradores do chamador na entrada e
restaurá-los na saída
• O programa chamado deve ter a sua SAVEAREA e estabelecer a ligação com a
SAVEAREA anterior
• Ao finalizar, o programa chamado retorna ao programa chamador via R14
Início e término de um programa
Inicialização
CICURSO CSECT
STM R14,R12,12(R13) * SALVA REGS. NA SAVEAREA DO CHAMADOR
LR R11,R15 * FAZ R11 BASE DO PROGRAMA
* ************************
USING CICURSO,R11 * BASEIA O PROGRAMA
* ************************
LR R6,R13 * GUARDA END. DA SAVEAREA DO CHAMADOR
LA R13,CICSAVEA * CARREGA EM. DA MINHA SAVEAREA
ST R6,4(,R13) (1) * GUARDA END. SAVE. CHAMADOR NA MINHA
ST R13,8(,R6) (2) * GUARDA END. MINHA SAVE. NA DO CHAMADOR
+4 +8 +12
....
L R13,4(R13) (1) * RESTAURA SAVEAREA DO CHAMADOR
LM R14,R12,12(R13) * RESTAURA REGS. DO CHAMADOR
BR R14 * RETORNA AO CHAMADOR
+4 +8 +12
Tamanho - 4 bytes
Formato - RX
Sintaxe - LA R1,D2(X2,B2)
Exemplo1 - Carregar no registrador 2 o endereço do campo REGENT:
LA 2,REGENT
Exemplo2 - Carregar o endereço 0 no registrador 15
LA 15,0 ou LA 15,0(0,0)
Instruções
Carga de Registradores
• LOAD (L)
Carrega no registrador do primeiro operando, 4 bytes obtidos a partir do endereço do
segundo operando (base + deslocamento + indexador).
Tamanho - 4 bytes
Formato - RX
Sintaxe - L R1,D2(X2,B2)
Exemplo - Carregar no registrador 5 o endereço do campo AGE00100:
L 5,AGE00100
Supondo que AGE00100 esteja definido como :
AGE00100 DC F’100’
Após a execução da instrução o conteúdo do registrador 15 seria 00000064
Instruções
Carga de Registradores
• LOAD REGISTER(LR)
Carrega no registrador do primeiro operando o conteúdo do segundo operando.
Tamanho - 2 bytes
Formato - RR
Sintaxe - LR R1,R2
Exemplo - Carregar no registrador 8 o conteúdo do registrador 10:
LR 8,10
Instruções
Carga de Registradores
• LOAD HALFWORD(LH)
Carrega no registrador do primeiro operando dois bytes obtidos a partir do endereço do
segundo operando (base + deslocamento + indexador). A carga é feita nos bits 16 a 31
do registrador e o bit 16 será propagado para os bits 0 a 15.
Tamanho - 4 bytes
Formato - RX
Sintaxe - LH R1,D2(X2,B2)
Exemplo - Carregar no registrador 12 o conteúdo do campo AGE0F0:
LH 12,AGE0F0
Supondo que AGE0F0 esteja definido como:
AGE0F0 DC X’F000’
Após a execução da instrução, o conteúdo do registrador 12 seria:
FFFFF000
Instruções
Carga de Registradores
• LOAD MULTIPLE(LM)
Os registradores a partir de R1 até R3 são carregados com o conteúdo obtido no
endereço de memória do segundo operando. Os registradores são carregados com
sucessivos conjuntos de 4 bytes.
Tamanho - 4 bytes
Formato - RS
Sintaxe - LM R1,R3,D2(X2,B2)
Exemplo - Carregar nos registradores 2 a 5, o conteúdo do campo SAVEREGS:
LM 2,5,SAVEREGS
Supondo que o conteúdo do campo SAVEREGS seja:
X’0000001000864534000000010B2A3C5F’
Após a execução da instrução, o conteúdo dos registradores seria:
R2=00000010 R3=00864534 R4=00000001 R5=0B2A3C5F
Instruções
Descarga de Registradores
• STORE (ST)
Guarda o conteúdo do registrador do primeiro operando no endereço dado pelo
segundo operando (base + deslocamento + indexador).
Tamanho - 4 bytes
Formato - RX
Sintaxe - ST R1,D2(X2,B2)
Exemplo - Carregar o conteúdo do registrador 4 no campo SAVER4:
ST 4,SAVER4
Instruções
Descarga de Registradores
• STORE HALFWORD (STH)
Guarda os bits 16 a 31 do registrador do primeiro operando no endereço dado
pelo segundo operando.
Tamanho - 4 bytes
Formato - RX
Sintaxe - STH R1,D2(X2,B2)
Exemplo - Guardar o conteúdo do registrador 8 (halfword) no campo
SAVER8:
STH 8,SAVER8
Supondo que o conteúdo do registrador 8 seja X’80007FFF’,
após a execução da instrução, o conteúdo do campo SAVER8
será X’7FFF’.
Instruções
Aritmética
Tamanho - 4 bytes
Formato - RX
Sintaxe - A R1,D2(X2,B2)
Exemplo - Somar o conteúdo do campo ACUMULA ao registrador 4:
A 4,ACUMULA
Supondo que o registrador 8 seja X’00007FFF’ e ACUMULA
seja X’00008000’, após a execução da instrução, o conteúdo
de R4 seria X’0000FFFF’. ACUMULA fica inalterado.
Instruções
Aritmética
Tamanho - 4 bytes
Formato - RX
Sintaxe - AH R1,D2(X2,B2)
Exemplo - Somar o conteúdo do campo ACUMHALF ao registrador 5:
AH 5,ACUMHALF
Supondo que o registrador 5 seja X’000000FF’ e ACUMHALF
seja X’8000’, após a execução da instrução, o conteúdo de R5 seria
X’FFFF80FF’. ACUMHALF fica inalterado.
Instruções
Aritmética
• SUBTRACT FULLWORD (S)
O conteúdo do segundo operando é subtraído do primeiro operando e o
resultado é colocado no registrador do primeiro operando.
Tamanho - 4 bytes
Formato - RX
Sintaxe - S R1,D2(X2,R2)
Exemplo - Subtrair o conteúdo do campo ACUMULA do registrador 10:
S 10,ACUMULA
Supondo R10=0000A000 e o campo ACUMULA=X’00000880’,
após a execução da instrução: R10=00009780
Instruções
Aritmética
Tamanho - 4 bytes
Formato - RX
Sintaxe - SH R1,D2(X2,R2)
Exemplo - Subtrair o conteúdo do campo ACUMHALF do registrador 5:
SH 5,ACUMHALF
Supondo R5=00010000 e o campo ACUMHALF=X’8002’, após a
execução da instrução: R5=00017FFE e ACUMHALF fica inalterado.
Instruções
Aritmética
• SUBTRACT REGISTER (SR)
O conteúdo do registrador do segundo operando é subtraído do registrador do
primeiro operando e o resultado fica no primeiro operando.
Tamanho - 2 bytes
Formato - RR
Sintaxe - SR R1, R2
Exemplo - Subtrair o conteúdo do registrador R4 do registrador R5 e colocar
o resultado em R5:
SR R5,R4
Instruções
Aritmética
• MULTIPLY HALFWORD (MH)
O multiplicando deve estar num registrador geral qualquer no primeiro
operando.
O multiplicador são 2 bytes obtidos no endereço de memória dado pelo
operando 2.
O resultado fica no registrador geral R1.
Tamanho - 4 bytes
Formato - RX
Sintaxe - MH R1,D2(X2,B2)
Exemplo - Supondo que R2=00002000 e CONT=x’0100’ após a instrução:
MH 2,CONT
Teremos: R2=00200000 e ‘CONT’ permanece inalterado.
Instruções
Aritmética
Tamanho - 4 bytes
Formato - RX
Sintaxe - M R1,D2(X2,B2)
Exemplo - Supondo que R2=00000000, R3=00002000 e CONT=x’00000100’ após a
instrução:
M 2,CONT
Teremos: R2=00000000, R3=00200000 e ‘CONT’ permanece inalterado.
Instruções
Aritmética
Tamanho - 2 bytes
Formato - RR
Sintaxe - MR R1,R2
Exemplo - Supondo que R4=00000000, R5=00000110 e R6=000000A0 após a
instrução:
MR 4,6
Teremos: R4=00000000, R5=0000AA00 e R6 permanece inalterado.
Instruções
Aritmética
• DIVIDE (D)
O dividendo é o operando 1 que é considerado um número de 64 bits armazenado num
conjunto par-impar de registradores (R1 e R1+1), onde R1 é o registrador par. O
número é ajustado à direita no conjunto par-ímpar.
O divisor são os 4 bytes obtidos pelo endereço de memória dado pelo operando 2.
O quociente fica no registrador ímpar do conjunto e o resto da divisão no registrador
par.
Tamanho - 4 bytes
Formato - RX
Sintaxe - D R1,D2(X2,B2)
Exemplo - Supondo que R6=00000000, R7=0000A001 e o campo
TOTAL=X’00000100’. Após a instrução:
D 6,TOTAL
Teremos: R6=00000001, R7=000000A0 e TOTAL permanece inalterado.
Instruções
Aritmética
Tamanho - 2 bytes
Formato - RR
Sintaxe - DR R1,R2
Exemplo - Supondo que R8=00000000, R9=0000A00A e R10=00000100. Após a
instrução:
DR 8,10
Teremos: R8=0000000A, R9=000000A0 e R10 permanece inalterado.
Instruções
Código de condição
• Posicionado pelas instruções de máquina (bits 18 e 19 da PSW)
• Valores que pode assumir: Binário Decimal
00 0
01 1
10 2
11 3
• Para cada CC existe uma máscara que pode ser utilizada nas instruções de desvio
CC=0 => Máscara = 8
CC=1 => Máscara = 4
CC=2 => Máscara = 2
CC=3 => Máscara = 1
• BRANCH AND LINK REGISTER (BALR) e BRANCH AND SAVE REGISTER (BASR)
O endereço da próxima instrução é guardado no registrador do primeiro operando e é feito um
desvio incondicional para o endereço apontado pelo registrador do segundo operando.
Tamanho: 2 bytes
Formato: RR
Sintaxe: BALR R1,R2 ou BASR R1,R2
Instruções
Comparação e Desvio
• MNEUMÔNICOS
Mneumônicos podem ser utilizados para substituir a máscara após as instruções que
setam o código de condição (CC).
Desvio incondicional: B ou BR
Tamanho: 4 bytes
Formato: RX
Sintaxe: AL R1,D2(X2,B2)
Exemplo: Somar o conteúdo do campo ACUMULA ao registrador 6
AL 6,ACUMULA
Tamanho: 2 bytes
Formato: RR
Sintaxe: ALR R1,R2
Exemplo: Somar o conteúdo dos registradores 8 e 9 e colocar o resultado no
registrador 9
ALR 9,8
Instruções
Lógicas
Tamanho: 4 bytes
Formato: RX
Sintaxe: SL R1,D2(X2,B2)
Exemplo: Subtrair o conteúdo do campo CONTA2 do registrador 7 e colocar o
resultado no registrador 7
SL 7,CONTA2
Instruções
Lógicas
Tamanho: 2 bytes
Formato: RR
Sintaxe: SLR R1,R2
Exemplo: Subtrair o conteúdo do registrador 7 do registrador 3 e colocar o
resultado no registrador 3
SLR 3,7
Instruções
Lógicas
• Instruções de comparação
Os dados a serem comparados são considerados binários sem sinal
A comparação é feita bit a bit da esquerda para a direita
O posicionamento do código de condição (CC) é feito da seguinte maneira:
Tamanho: 4 bytes
Formato: RX
Sintaxe: CL R1,D2(X2,B2)
Exemplo: Comparar o registrador 9 com o conteúdo do campo LIMITE e
desviar para o endereço FIMLOOP se os dois forem iguais.
CL 9,LIMITE
BE FIMLOOP
Instruções
Lógicas
Tamanho: 2 bytes
Formato: RR
Sintaxe: CLR R1,R2
Exemplo: Comparar os registradores 10 e 11 e desviar para o endereço FIM se
o conteúdo de R10 for maior que o de R11.
CLR 10,11
BH FIM
Instruções
Lógicas
Tamanho: 6 bytes
Formato: SS
Sintaxe: CLC D1(L,B1),D2(B2)
Exemplo: Comparar os campos CAMPO1 e CAMPO2 e desviar para o endereço
DIFERE se os conteúdos não forem iguais.
CLC CAMPO1,CAMPO2
BNE DIFERE
Instruções
Lógicas
Tamanho: 4 bytes
Formato: SI
Sintaxe: CLI D1(B1),I2
Exemplo: Comparar o campo AGE0002 com o caracter ‘2’. Se forem
diferentes desviar para o endereço FINALIZAR.
CLI AGE0002,C’2’
BNE FINALIZA
Instruções
Lógicas
Tamanho: 4 bytes
Formato: RS
Sintaxe: CLM R1,M3,D2(B2)
O código de condição (CC) é posicionado da seguinte forma:
CC=0 => bytes selecionados em R1 são iguais aos do operando 2
CC=1 => bytes selecionados em R1 < operando 2
CC=2 => bytes selecionados em R1 > operando 2
Tamanho: 4 bytes
Formato: RX
Sintaxe: IC R1,D2(X2,B2)
Exemplo: Supondo o conteúdo de R3=00112200 e a constante TRESTRES DC
X’33’
IC 3,TRESTRES
Tamanho: 4 bytes
Formato: RS
Sintaxe: ICM R1,M3,D2(B2)
O código de condição é posicionado da seguinte forma:
CC=0 => todos os bits carregados são zero ou a máscara é zero
CC=1 => o primeiro bit carregado é um (número negativo)
CC=2 => o primeiro bit carregado é zero e existe, pelo menos, mais um
bit 1 (número é positivo)
Exemplo: Carregar o primeiro byte do registrador 6 com o conteúdo x’00’.
Supondo: ZEROS DC X’00’
Tamanho: 4 bytes
Formato: RX
Sintaxe: STC R1,D2(X2,B2)
Exemplo: Supondo o conteúdo de R5=111111FF a a variável:
VARIA1 DS X
STC R5,VARIA1
Tamanho: 4 bytes
Formato: RS
Sintaxe: STCM R1,M3,D2(B2)
Exemplo: Supondo o conteúdo de R5=112211FF a a variável:
VARIA2 DS XL2
Tamanho: 4 bytes
Formato: SI
Sintaxe: MVI D1(B1),I2
Exemplo: Mover o caracter “@” para o campo FIMREG
MVI FIMREG,C’@’
Instruções
Lógicas
Tamanho: 6 bytes
Formato: SS
Sintaxe: MVC D1(L,B1),D2(B2)
Exemplo: Supondo:
CAMPO1 DC CL5’12345’
CAMPO2 DC CL8’ABCDEFGH’
R6=8025465F -----------------------------------------------------------------------------------------
1000 0000 0010 0101 0100 0110 0101 1111
Instruções
Lógicas
• TEST UNDER MASK (TM)
Testa os bits do byte endereçado pelo primeiro operando de acordo com os bits ligados da máscara
do segundo operando. Os bits testados são os ligados na máscara.
Tamanho: 4 bytes
Formato: SI
Sintaxe: TM D1(B1),M2
Exemplo: Se o primeiro bit do campo BCT101 estiver ligado, desviar para
ERROSTA:
TM BCT101,X’80’
BO ERROSTA (ou BC 1,ERROSTA)
Instruções
Decimais
• CONVERSÃO DE FORMATOS
DADOS
PACK CVB
ENTRADA Decimal Decimal
zonado compactado
binário
DADOS
UNPK DVD
SAÍDA Decimal Decimal
zonado compactado
Instruções
Decimais
• PACK
Converte os dados em formato zonado do endereço apontado pelo operando 2 para decimal
compactado no endereço apontado pelo operando 1.
Os dois operandos podem ter tamanho implícito ou explícito (L1 e L2).
A conversão é feita da direita para a esquerda. Pode haver truncamento ou preenchimento com
zeros, dependendo dos tamanhos de cada campo.
Tamanho: 6 bytes
Formato: SS
Sintaxe: PACK D1(L1,B1),D2(L2,B2)
Exemplo: PACK DESTCP,ORIGEMDZ
ORIGEMDZ DC CL5’34724’ => F3 F4 F7 F2 F4
(preenchimento)
Instruções
Decimais
• UNPACK (UNPK)
Converte os dados em formato decimal compactado do endereço apontado pelo operando 2 para
decimal zonado no endereço apontado pelo operando 1.
Os dois operandos podem ter tamanho implícito ou explícito (L1 e L2).
A conversão é feita da direita para a esquerda. Pode haver truncamento ou preenchimento com
zeros, dependendo dos tamanhos de cada campo.
Tamanho: 6 bytes
Formato: SS
Sintaxe: UNPK D1(L1,B1),D2(L2,B2)
Exemplo: UNPK DESTCZ,ORIGEMDP
ORIGEMDP DC PL5’23542’ => 00 00 23 54 2C (sinal)
DESTCZ DC CL5 F2 F3 F5 F4 F2
Instruções
Decimais
Tamanho: 4 bytes
Formato: RX
Sintaxe: CVD R1,D2(X2,B2)
Exemplo: CVD R4,DOUBLEW
Supondo: R4=00000100
Tamanho: 4 bytes
Formato: RX
Sintaxe: CVB R1,D2(X2,B2)
Exemplo: Supondo o campo DOUBLEP = X’000000000004096C’
CVB R5,DOUBLEP
Tamanho: 6 bytes
Formato: SS
Sintaxe: AP D1(L1,B1),D2(L2,B2)
Exemplo:
CONTA DC PL3’6’ => X’00006C’
CONTB DC PL4’1234’ => X’0001234C’
Após a instrução:
AP CONTB,CONTA
CONTB = X’0001240C’
Instruções
Decimais
Tamanho: 6 bytes
Formato: SS
Sintaxe: SP D1(L1,B1),D2(L2,B2)
Exemplo:
PARCIALDC PL3’50’ => X’00050C’
TOTAL DC PL4’150’ => X’0000150C’
Após a instrução:
SP TOTAL,PARCIAL
TOTAL = X’0000100C’
Instruções
Decimais
Tamanho: 6 bytes
Formato: SS
Sintaxe: ZAP D1(L1,B1),D2(L2,B2)
Exemplo:
PARCIALDC PL3’0’ => X’00000C’
TOTALP DC PL4’150’ => X’0000150C’
Após a instrução:
ZAP TOTALP,PARCIAL
TOTALP = X’0000000C’
Instruções
Decimais
Tamanho: 6 bytes
Formato: SS
Sintaxe: CP D1(L1,B1),D2(L2,B2)
Exemplo:
PACK1 DC PL3’10’ => X’00010C’
PACK2 DC PL4’15’ => X’0000015C’
Após a instrução:
CP PACK1,PACK2
CC = 1
Instruções
Edição
• EDIT (ED)
O operando 1 aponta para uma área de memória onde está o modelo sobre o qual a edição vai
funcionar. O operando 2 aponta uma área de memória que deve estar em formato decimal
compactado, onde está o campo fonte da edição.
O conteúdo do campo fonte é convertido para formato zonado sob o controle do campo modelo e
o resultado fica na área onde estava o modelo. Os bytes são processados um a um da esquerda para
a direita.
O modelo possui caracteres de controle para a edição. O primeiro byte é o caracter de
preenchimento.
O indicador de significância (x’21’) é uma chave que indica se os caracteres do campo fonte
subsequentes são significativos. Isto é levado em conta para decidir o resultado do dígito a ser
editado.
O separador de campos (x’22’) identifica campos individuais, como por exemplo, uma vírgula
separando centavos. É substituído pelo caracter de preenchimento e desligado o indicador de
significância.
Instruções
Edição
• EDIT (ED)
O seletor de dígitos (x’20’) indica que o dígito do campo fonte deve ser convertido a zonado no
campo modelo, a não ser que o indicador de significância esteja desligado e o dígito seja zero.
Nesse caso será substituído pelo caracter de preenchimento.
O número de bytes resultante é igual ao tamanho implícito ou explícito do primeiro operando
(modelo).
Tamanho: 6 bytes
Formato: SS
Sintaxe: ED D1(L1,B1),D2(B2)
Exemplo: Transformar o conteúdo do campo VALORPK para o formato xxx.xxx,xx
sem ZEROS à esquerda no campo SAIDAED.
VALORPK DC PL4’125000’
SAIDAED DC CL10’4020204B2020216B2020’
Após a instrução:
ED SAIDAED,VALORPK
SAIDAED = ‘1.250,00’ ou X’4040F14BF2F5F06BF0F0’
Instruções
Edição – Tabela prática
Status Dígito 4 bits Status
Byte
Byte do modelo Indicador na da fonte Indicador
resultante
Significância fonte positivo Significância
0 (1) Preenchimento OFF
OFF 1–9 Não Dígito da fonte ON
X’20’
1–9 Sim Dígito da fonte OFF
(seletor de dígito)
ON 0–9 Não Dígito da fonte ON
0 Não Preenchimento ON
OFF
0 Sim Preenchimento OFF
(1) => Sem efeito no byte de significância (2) => dígito fonte não é considerado
Instruções
Desvio e controle de LOOP
Tamanho: 4 bytes
Formato: RX
Sintaxe: BCT R1,D2(X2,B2)
Exemplo: Executar 10 vezes o trecho do programa iniciado em LOOP1.
LA 8,10
LOOP1 EQU *
... (instruções que serão executadas 10 vezes)
BCT 8,LOOP1
Macro Instruções
• O que são MACRO INSTRUÇÕES
Conjunto de comandos e/ou instruções, codificados diretamente no programa ou em uma
biblioteca específica (MACLIB), que são tratados em tempo de compilação e podem ou não gerar
instruções a serem executadas durante o processamento.
Existem inúmeros comandos usados na geração de macros que constituem uma linguagem de
programação própria (AIF, AGO, SETA, SETC, LCLA, etc.).
Seu uso mais comum, é quando se tem uma sequência padronizada de instruções que se repetem.
Outra utilização importante, é para gerar instruções de máquina distintas dependendo de diferentes
parâmetros recebidos.
Exemplo:
INICIO SAVE (14,12)
Gera o seguinte código: + DS 0H
+ STM 14,12,12(13)
Define o bloco de controle usado pelo método de acesso para que um programa possa fazer
operações de I/O em um arquivo.
Métodos de acesso que utilizam a DCB: QSAM, QISAM, BDAM, BPAM, BSAM E BISAM.
Sintaxe: Principais parâmetros para arquivo sequencial (QSAM)
DCB DSORG=PS,MACRF=opção,
DDNAME=ddname,EODAD=endrotina
Onde:
opção => G=GET, P=PUT, L=LOCATE, M=MOVE
ddname => nome do arquivo que deverá ser informado no JCL ou alocado
dinamicamente via macro DYNALLOC
endrotina => endereço da rotina que ganhará o controle ao fim do arquivo
Exemplo:
SAIDA DCB DDNAME=SAIDA,DSORG=PS,MACRF=(PM),
EODAD=FIM_ARQ
Macro Instruções
OPEN e CLOSE
• OPEN
Prepara o arquivo para operações de I/O preenchendo alguns campos da DCB
Sintaxe: Principais parâmetros para arquivo sequencial (QSAM)
OPEN (dcbaddr,(opção))
Onde:
dcbaddr => endereço da DCB do arquivo
opção => opções de processamento (INPUT,OUTPUT)
endrotina => endereço da rotina que ganhará o controle ao fim do arquivo
Exemplo:
OPEN (SAIDA,(OUTPUT))
• CLOSE
Sintaxe: CLOSE (dcbaddr)
Onde:
dcbaddr => endereço da DCB do arquivo
Exemplo:
CLOSE (SAIDA)
Macro Instruções
GET
Lê o registro de um arquivo. Para Para o tipo ‘LOCATE’ o registrador 1 aponta para o registro
lido; para o tipo ‘MOVE’ devemos indicar a área onde será lido o registro.
Sintaxe: Para o tipo ‘LOCATE’
GET dcbaddr
Onde:
dcbaddr => endereço da DCB do arquivo
Exemplo:
GET (ARQENT)
• RECEBENDO NO PROGRAMA
Registrador 1 => FULLWORD => TAMANHO PARM(HALFWORD) +
PARM
Exemplo:
//STEP01 EXEC PGM=TESTE,PARM=‘CICP0001’
No programa:
L 1,0(0,1)
LH 5,0(1)
BCTR 5,0
EX MOVEPRM
...
MOVEPRM MVC PARMREC,2(1)
PARMREC DC 100C’ ‘
Após:
PARMREC=‘CICP0001’ + 92 caracteres branco
PROGRAMAS
ABENDS
ANÁLISE DE ABENDS:
- PSW - endereço da próxima instrução
- OFFSET - endereço dentro do programa onde ocorreu o ABEND
- REGISTRADORES - conteúdo dos registradores no momento do ABEND
- DATA AT PSW - instruções que estavam sendo executadas
- ADDRESS - endereço do programa na memória virtual
- ACTIVE LOAD - nome do módulo que estava sendo executado
MODULE
PROGRAMAS
ABENDS
• EXEMPLO
SYSTEM COMPLETION CODE=0C1 REASON CODE=00000001
TIME=10.56.12 SEQ=21771 CPU=0000 ASID=0037
PSW AT TIME OF ERROR 078D0000 800078B2 ILC 2 INTC 01
ACTIVE LOAD MODULE ADDRESS=00007870 OFFSET=00000042
NAME=CICBATCH
DATA AT PSW 000078AC - 4450B078 00000000 D213B059
GR 0: 00000006_FD000019 1: 00000000_80006FE6
2: 00000000_00000040 3: 00000000_009D99D4
4: 00000000_009D99B0 5: 00000000_00000010
6: 00000000_00006F48 7: 00000000_FD000000
8: 00000000_009D72B0 9: 00000000_009D1CD0
A: 00000000_00000000 B: 00000000_80007870
C: 00000000_895EFCFA D: 00000000_00007BFC
E: 00000000_80FDC2B8 F: 00000000_80007870
END OF SYMPTOM DUMP