Vous êtes sur la page 1sur 221

ASSEMBLER - PROF.

ALBERTO ROMANO SCHIESARI 11

ASSEMBLER para
Mainframes IBM

Prof. Alberto Romano Schiesari (1a edição: 1974; última revisão:2001)


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 22
SUMÁRIO
1) INTRODUÇÃO.............................................................................................................................................................................................6
1-1 A LINGUAGEM ASSEMBLER............................................................................................................................................................6
1-2 REVISÃO DOS SISTEMAS DE NUMERAÇÃO BINÁRIO E HEXADECIMAL.............................................................................6
1-2-1 Conversões.......................................................................................................................................................................................7
1-2-2 Operações aritméticas....................................................................................................................................................................13
1-3 ) ARQUITETURAS DE MAINFRAME'S IBM..................................................................................................................................17
1-3-1 VISÃO GERAL.............................................................................................................................................................................17
1-3-2 ENDEREÇAMENTO....................................................................................................................................................................20
1-3-3 REPRESENTAÇÃO DE DADOS................................................................................................................................................22
1-3-4 REPRESENTAÇÃO DE INSTRUÇÕES.....................................................................................................................................23
2) MONTADOR ASSEMBLER E ESPECIFICAÇÃO DE ELEMENTOS..................................................................................................30
2-1) INTRODUÇÃO...................................................................................................................................................................................30
2-1-1 O MONTADOR ASSEMBLER....................................................................................................................................................30
2-1-2 O STATEMENT ASSEMBLER...................................................................................................................................................32
2-2) SÍMBOLO............................................................................................................................................................................................32
2-3) CÓDIGO DE INSTRUÇÃO................................................................................................................................................................33
2-3-1) INSTRUÇÕES AO MONTADOR...............................................................................................................................................33
2-3-2) INSTRUÇÕES DE MÁQUINA...................................................................................................................................................33
2-3-3) MACRO-INSTRUÇÕES.............................................................................................................................................................33
2-4) OPERANDOS E COMENTÁRIOS....................................................................................................................................................33
2-4-1) OPERANDOS EM REGISTRADOR..........................................................................................................................................34
2-4-2) OPERANDOS EM MEMÓRIA...................................................................................................................................................34
2-4-2-1) TÊRMOS DE EXPRESSÕES..................................................................................................................................................34
2-5) CONTINUAÇÃO DE STATEMENTS...............................................................................................................................................38
2-6) IDENTIFICAÇÃO E SEQUÊNCIA DE STATEMENTS..................................................................................................................38
3) INSTRUÇÕES AO MONTADOR ASSEMBLER....................................................................................................................................39
3-1) Instruções para definição de áreas......................................................................................................................................................39
DC (Define Constant - Definir Constante).............................................................................................................................................39
DS (Define Storage - Definir Memória).................................................................................................................................................44
3-2) Outras instruções ao montador............................................................................................................................................................45
CCW ou CCW0 (Channel Command Word - Palavra de Comando de Canal).....................................................................................45
CCW1 (Channel Command Word - Palavra de Comando de Canal)....................................................................................................46
START (Começo)...................................................................................................................................................................................47
CSECT (Control Section - Seção de Controle)......................................................................................................................................47
DSECT (Dummy Section - Seção Simulada).........................................................................................................................................48
DXD (Define External Dummy Section - Definir Dummy Section Externa).......................................................................................48
CXD.........................................................................................................................................................................................................49
COM (Blank Common Control Section - Seção de Controle Branca Comum)....................................................................................49
LOCTR (Multiple Location Counters - Múltiplos Contadores de localização)....................................................................................49
AMODE (Adressing Mode - Modo de endereçamento).........................................................................................................................50
RMODE (Residence Mode - Modo de residência).................................................................................................................................51
ENTRY (Entrada)....................................................................................................................................................................................52
EXTRN (External - Externo)..................................................................................................................................................................52
WXTRN...................................................................................................................................................................................................52
USING (Usando).....................................................................................................................................................................................53
DROP (Por de lado, Deixar)...................................................................................................................................................................53
TITLE (Título)........................................................................................................................................................................................54
EJECT (Ejetar)........................................................................................................................................................................................54
SPACE (Espaço).....................................................................................................................................................................................54
PRINT (Impressão).................................................................................................................................................................................55
ICTL (Input Control - Controle de Entrada)..........................................................................................................................................55
ISEQ (Input Sequence - Sequência de Entrada).....................................................................................................................................56
PUNCH (Perfure)....................................................................................................................................................................................56
REPRO (Reproduza)...............................................................................................................................................................................57
ORG.........................................................................................................................................................................................................57
EQU (Equate - Igualar)...........................................................................................................................................................................57
OPSYN (Operation Code Synonim - Sinônimo para código de operação)...........................................................................................58
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33
PUSH (Empurrar)....................................................................................................................................................................................59
POP..........................................................................................................................................................................................................59
LTORG....................................................................................................................................................................................................59
CNOP (Conditional Nop - Nop Condicional).........................................................................................................................................59
COPY (Copiar)........................................................................................................................................................................................60
END (Fim)...............................................................................................................................................................................................60
4) INSTRUÇÕES DE MÁQUINA.................................................................................................................................................................65
4-1) INSTRUÇÕES DE MOVIMENTO DE MEMÓRIA PARA MEMÓRIA.........................................................................................67
MVC (Move Character - Movimentar Caracteres).................................................................................................................................67
MVZ (Move Zones - Movimentar Zonas)..............................................................................................................................................67
MVN (Move Numerics - Movimentar Numéricos)................................................................................................................................68
MVI (Move Immediate - Movimentar Imediato)...................................................................................................................................68
MVO (Move with Offset – Movimetar com deslocamento)..................................................................................................................69
ZAP (Zero and Add Packed – Zerar e Somar em Compactado)............................................................................................................69
MVCL (Move Long – Mover [campo] Longo)......................................................................................................................................70
PACK (Compactar).................................................................................................................................................................................72
UNPK (Unpack – descompactar)............................................................................................................................................................73
MVCI (Move Inverse – Mover invertido)..............................................................................................................................................74
4-2) INSTRUÇÕES ARITMÉTICAS COM CAMPOS COMPACTADOS..............................................................................................75
AP (Add Packed – Somar em compactado)...........................................................................................................................................75
SP (Subtract Packed – Subtrair em compactado)...................................................................................................................................75
MP (Multiply Packed – Multiplicar em compactado)............................................................................................................................76
DP (Divide Packed – Dividir em compactado)......................................................................................................................................77
SRP (Shift and Round Packed – Deslocar e arredondar compactado)..................................................................................................78
4-3) INSTRUÇÕES DE COMPARAÇÃO.................................................................................................................................................79
CP (Compare Packed – Comparar em compactado)..............................................................................................................................79
CLC (Compare Logical Character – Comparar Caracteres Logicamente)............................................................................................79
CLI (Compare Logical Immediate - Comparar Logicamente com Operando Imediato)......................................................................79
CLCL (Compare Logocal Character Long – Comparar Logicamente campos longos)........................................................................80
C (Compare)............................................................................................................................................................................................81
CH (Compare Halfword).........................................................................................................................................................................81
CL (Compare Logical – Compare Logicamente)...................................................................................................................................82
CLM (Compare Logical Characters Under Mask - Comparar campos lógicamente, sob máscara).....................................................82
CR (Compare Register – Comparar Registradores)...............................................................................................................................83
CLR (Compare Logical Register – Comparar Registradores Logicamente).........................................................................................83
4-4) INSTRUÇÕES DE DESVIO...............................................................................................................................................................84
4-4-1) Introdução.....................................................................................................................................................................................84
BC (Branch on Condition – Desviar na Condição)................................................................................................................................86
BCR (Branch on Condition Register – Desviar [para endereço de registrador] na Condição).............................................................86
4-5) INSTRUÇÕES DE CONTROLE DE LOOP......................................................................................................................................87
BCT (Branch on Count – Desvie na condição [de contagem] testada).................................................................................................87
BCTR (Branch on Count Register – Desvie na condição [de contagem] testada para [endereço contido em] registrador)................87
BXH (Branch on Index High – Desvie se o Índice for Maior)..............................................................................................................88
BXLE (Branch on Index Low or Equal – Desvie se o Índice for Menor ou Igual)..............................................................................88
4-6) INSTRUÇÕES DE EDIÇÃO..............................................................................................................................................................89
ED (Edit – Editar)...................................................................................................................................................................................89
EDMK (Edit and Mark – Editar e Marcar).............................................................................................................................................90
4-7) INSTRUÇÕES DE TRADUÇÃO E TESTE DE BYTES..................................................................................................................91
TR (Translate – Traduzir).......................................................................................................................................................................91
TRT (Translate and Test – Traduzir e Testar)........................................................................................................................................91
4-8) SHIFT EM REGISTRADORES..........................................................................................................................................................93
SLL (Shift Left Logical – Deslocamento Simples Lógico à esquerda).................................................................................................93
SRL (Shift Right Logical – Deslocamento Simples Lógico à direita)..................................................................................................93
SLDL (Shift Left Double Logical – Deslocamento Duplo Lógico à esquerda)....................................................................................94
SRDL (Shift Right Double Logical – Deslocamento Duplo Lógico à direita).....................................................................................94
SLA (Shift Left Algebraic – Deslocamento Simples Algébrico à esquerda)........................................................................................95
SRA (Shift Right Algebraic – Deslocamento Simples Algébrico à direita)..........................................................................................95
SLDA (Shift Left Double Algebraic – Deslocamento Duplo Algébrico à esquerda)...........................................................................96
SRDA (Shift Right Double Algebraic – Deslocamento Duplo Algébrico à direita).............................................................................96
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 44
4-9) INSTRUÇÕES DE ÁLGEBRA BOOLEANA...................................................................................................................................97
N (And – E).............................................................................................................................................................................................97
O (Or – Ou)..............................................................................................................................................................................................98
X (Exclusive Or – Ou exclusivo)............................................................................................................................................................98
NR (And Register – E entre registradores).............................................................................................................................................99
OR (Or Register – Ou entre registradores).............................................................................................................................................99
XR (Exclusive or Register – Ou exclusivo entre registradores)............................................................................................................99
NI (And Immediate – E [com operando] imediato).............................................................................................................................100
OI (Or Immediate – Ou [com operando] imediato).............................................................................................................................100
XI (Exclusive Or Immediate – Ou exclusivo [com operando] imediato)............................................................................................100
NC (And Character – E entre campos com caracteres)........................................................................................................................101
OC (Or Character – Ou entre campos com caracteres)........................................................................................................................101
XC (Exclusive Or Character – Ou exclusivo entre campos com caracteres)......................................................................................101
4-10) INSTRUÇÕES DE CARGA E DESVIO........................................................................................................................................102
BALR (Branch and Link Register – Desviar e ligar via registrador)..................................................................................................102
BAL (Branch and Link – Desviar e ligar)............................................................................................................................................102
BAS (Branch and Save – Desviar e salvar)..........................................................................................................................................102
BASR (Branch and Save Register – Desviar para endereço em registrador e salvar)........................................................................103
BASSM (Branch and Save and Set Mode – Desviar, salvar e posicionar modo)...............................................................................103
BSM (Branch and Set Mode – Desviar e posicionar modo)................................................................................................................103
4-11) INSTRUÇÕES DE MOVIMENTO DE DADOS DE REGISTRADOR PARA MEMORIA.......................................................104
ST (Store – Armazenar)........................................................................................................................................................................104
STH (Store Halfword – Armazenar halfword).....................................................................................................................................104
STM (Store Multiple – Armazenar Múltiplos).....................................................................................................................................104
STC (Store Character – Armazenar um byte)......................................................................................................................................105
STCM (Store Characters under Mask – Armazenar caracteres por máscara).....................................................................................105
CVD (Convert to decimal – Converter [de binário] para [decimal] compactado)..............................................................................106
4-12) INSTRUÇÕES DE MOVIMENTO DE DADOS DE UM CAMPO DE MEMÕRIA PARA REGISTRADOR..........................107
L (Load – Carregar)...............................................................................................................................................................................107
LH (Load Halfword – Carregar halfword)...........................................................................................................................................107
LM (Load Multiple – Carregar Múltiplos)...........................................................................................................................................108
IC (Insert Character – Inserir Byte)......................................................................................................................................................108
ICM (Insert Character under Mask – Inserir bytes sob máscara)........................................................................................................109
CVB (Convert to binary – Converter [de compactado] para binário).................................................................................................109
4-13) INSTRUÇÕES DE MOVIMENTO DE DADOS DE REGISTRADOR PARA REGISTRADOR...............................................110
LR (Load Register – Carregar registrador)...........................................................................................................................................110
LPR (Load Positive Register – Carregar registrador positivo)............................................................................................................110
LNR (Load Negative Register – Carregar registrador negativo).........................................................................................................110
LCR (Load Complement Register – Carregar o complemento do registrador)..................................................................................111
LTR (Load and test Register – Carregar e testar registrador)..............................................................................................................111
4-14) OPERAÇÕES ARITMÉTICAS ENTRE REGISTRADORES......................................................................................................112
AR (Add Register – Somar registradores)............................................................................................................................................112
SR (Subtract Register – Subtrair registradores)...................................................................................................................................112
MR (Multiply Register – Multiplicar registradores)............................................................................................................................112
DR (Divide Register – Dividir registradores).......................................................................................................................................113
ALR (Add Logical Register – Somar registradores logicamente).......................................................................................................113
SLR (Subtract Logical Register – Subtrair registradores logicamente)..............................................................................................114
4-15) OPERAÇÕES ARITMÉTICAS ENTRE REGISTRADORES E CAMPOS DE MEMÕRIA......................................................115
A (Add – Somar)...................................................................................................................................................................................115
S (Subtract – Subtrair)...........................................................................................................................................................................115
M (Multiply – Multiplicar)...................................................................................................................................................................115
D (Divide – Dividir)..............................................................................................................................................................................116
AH (Add Halfword – Somar hafword).................................................................................................................................................117
SH (Subtract Halfword – Subtrair hafword).........................................................................................................................................117
MH (Multiply Halfword – Multiplicar hafword)..................................................................................................................................118
AL (Add Logical – Somar logicamente)..............................................................................................................................................118
SL (Subtract Logical – Subtrair logicamente)......................................................................................................................................119
00 O condition code nunca fica em 00 após um SL................................................................................................................................119
4-16) OUTRAS INSTRUÇÕES................................................................................................................................................................120
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 55
LA (Load Address – Carregar Endereço).............................................................................................................................................120
TM (Test Under Mask – Testar com máscara).....................................................................................................................................120
EX (Execute).........................................................................................................................................................................................121
SVC (Supervisor Call – Chamada ao Supervisor)................................................................................................................................121
MC (Monitor Call – Chamada do monitor)..........................................................................................................................................122
SPM (Set Program Mask – estabelecer máscara de programa)...........................................................................................................122
IPM (Insert Program Mask – inserir máscara de programa)................................................................................................................122
STCK (Store clock – armazenar clock)................................................................................................................................................123
TS (Test and Set – Testar e posicionar)................................................................................................................................................123
CS (Compare and Swap – Comparar e Trocar)....................................................................................................................................123
CDS (Compare Double and Swap – Comparar double e Trocar)........................................................................................................124
5 - MACRO-INSTRUÇÕES.........................................................................................................................................................................125
5-1 INTRODUÇÃO...................................................................................................................................................................................125
5-2 SÍMBOLOS VARIÁVEIS E DE SEQUÊNCIA................................................................................................................................126
5-3 EXPRESSÕES....................................................................................................................................................................................129
5-4 VARIÁVEIS DE MONTAGEM : DECLARAÇÃO E ATRIBUIÇÃO DE CONTEÚDO...............................................................130
5-5 ANOP, MNOTE E AREAD...............................................................................................................................................................132
5-6 MHELP...............................................................................................................................................................................................134
5-7 DESVIOS - AGO, ACTR E AIF........................................................................................................................................................135
5-8 PARÂMETROS POSICIONAIS E KEYWORD...............................................................................................................................136
5-9 FUNCIONAMENTO DAS MACROS - EXEMPLOS......................................................................................................................138
5-9-1 Macro sem símbolo e sem parâmetros........................................................................................................................................138
5-9-2 Macro com símbolo fixo e sem parâmetros................................................................................................................................138
5-9-3 Macro com símbolo variável e sem parâmetros.........................................................................................................................139
5-9-4 Macro com símbolo variável e com 1 parâmetro posicional.....................................................................................................139
5-9-5 Macro com símbolo variável e com 2 parâmetros posicionais..................................................................................................140
5-9-6 Macro com símbolo variável e com 1 parâmetro keyword (sem default).................................................................................140
5-9-7 Macro com símbolo variável e com 1 parâmetro keyword (com default).................................................................................141
5-9-8 Macro com símbolo variável e com 2 parâmetros keyword (sem default)................................................................................141
5-9-9 Macro com símbolo variável e com 2 parâmetros keyword (com default)...............................................................................142
A P E N D I C E S................................................................................................................................................................................143
APÊNDICE A - INSTRUÇÕES...............................................................................................................................................................144
APÊNDICE B - TABELAS DE POTÊNCIAS DE 2 E 16.......................................................................................................................155
APÊNDICE C - CARACTERES EBCDIC..............................................................................................................................................157
APÊNDICE D - CONTROLE DE IMPRESSÃO.....................................................................................................................................158
APÊNDICE E - INTERRUPÇÕES POR ERRO DE PROGRAMA........................................................................................................159
APÊNDICE F - TRUQUES ÚTEIS A PROGRAMAS ASSEMBLER...................................................................................................160
APÊNDICE G - MACRO INSTRUÇÕES MVS......................................................................................................................................162
APÊNDICE H - EXEMPLO DE PROGRAMA MVS.............................................................................................................................163
APÊNDICE I - MACRO INSTRUÇÕES VSE.........................................................................................................................................164
APÊNDICE J - EXEMPLO DE PROGRAMA VSE................................................................................................................................165
APÊNDICE K - MACRO INSTRUÇÕES VM........................................................................................................................................166
APÊNDICE L - EXEMPLO DE PROGRAMA VM................................................................................................................................167
APÊNDICE M - MACRO INSTRUÇÕES XEGUEI E TCHAU.............................................................................................................168
APÊNDICE N - EXEMPLO DE SUBROTINA.......................................................................................................................................172
APÊNDICE O - EXEMPLO 2 DE SUBROTINA....................................................................................................................................173
APÊNDICE P - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 1.......................................................................................175
APÊNDICE Q - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 2......................................................................................188
PROGRAMAS PROPOSTOS.......................................................................................................................................................................199
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 66
1) INTRODUÇÃO

1-1 A LINGUAGEM ASSEMBLER

Convém observar que, como toda linguagem Assembler, esta, para poder ser melhor compreendida e utilizada em
seu pleno potencial, exige o conhecimento da arquitetura do equipamento no qual ela é utilizada.
Uma revisão nos conceitos e princípios básicos da arquitetura IBM é fundamental para o acompanhamento deste
curso, recomendando-se a leitura do Principles of Operation do equipamento.

1-2 REVISÃO DOS SISTEMAS DE NUMERAÇÃO BINÁRIO E HEXADECIMAL

A base do sistema de numeração binário é 2.


Ele possui 2 algarismos, cujos símbolos gráficos são o 0 e o 1.
Cada algarismo tem seu valor dependendo da posição que ocupa no número.

A base do sistema de numeração hexadecimal é 16.


Ele possui 16 algarismos, cujos símbolos gráficos são: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F.
Cada algarismo tem seu valor dependendo da posição que ocupa no número.

TABELA BÁSICA DE EQUIVALÊNCIA

DECIMAL HEXA BINÁRIO DECIMAL HEXA BINÁRIO

0 0 0000 8 8 1000
1 1 0001 9 9 1001
2 2 0010 10 A 1010
3 3 0011 11 B 1011
4 4 0100 12 C 1100
5 5 0101 13 D 1101
6 6 0110 14 E 1110
7 7 0111 15 F 1111
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 77
1-2-1 Conversões

1-2-1-1 Conversão de decimal para binário

Dividir o número decimal desejado por 2 e "guardar" o resto (que só pode ser 0 ou 1); o cociente dessa divisão
deve ser calculado somente em sua parte inteira, e deve-se dividi-lo por 2, "guardando" o resto, e assim por diante,
até que o cociente seja zero. Em seguida, os restos devem ser anotados, do último para o primeiro, da esquerda
para a direita; o número formado pelos restos transcritos dessa forma, será o número binário equivalente ao
decimal que se desejava converter para binário.

Exemplo: achar o número binário equivalente ao decimal 154.

154 / 2 = cociente 77 resto 0


77 / 2 = cociente 38 resto 1
38 / 2 = cociente 19 resto 0
19 / 2 = cociente 9 resto 1
9 / 2 = cociente 4 resto 1
4 / 2 = cociente 2 resto 0
2 / 2 = cociente 1 resto 0
1 / 2 = cociente 0 resto 1

Portanto, o número binário 10011010 vale 154 em decimal.

Exercícios propostos:

Converter de decimal para binário:

EP001: 987654

EP002: 4095

EP003: 7

EP004: 1023

EP005: 4096

EP006: 255

EP007: 1024

EP008: 10010001

EP009: 256

EP010: 1025

EP011: 999888

EP012: 65432
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 88
1-2-1-2 Conversão de decimal para hexadecimal

Dividir o número decimal desejado por 16 e "guardar" o resto (que só pode ser de 0 a 15); o cociente dessa divisão
deve ser calculado somente em sua parte inteira, e deve-se dividi-lo por 16, "guardando" o resto, e assim por
diante, até que o cociente seja zero. Em seguida, os restos devem ser anotados, do último para o primeiro, da
esquerda para a direita, observando-se que se o resto for 10 deve-se transcrever A, e assim por diante, de acordo
com a tabela básica de equivalência colocada na introdução do tópico 1-2; o número formado pelos restos
transcritos dessa forma, será o número hexadecimal equivalente ao decimal que se desejava converter para
hexadecimal.

Exemplo: determinar o número hexadecimal equivalente ao decimal 1234567.

1234567 / 16 = cociente 77160 resto 7


77160 / 16 = cociente 4822 resto 8
4822 / 16 = cociente 301 resto 6
301 / 16 = cociente 18 resto 13
13 / 16 = cociente 0 resto 13

Portanto, DD687 é o número hexadecimal equivalente ao decimal 1234567.

Exercícios propostos:

Converter de decimal para hexadecimal:

EP013: 987654

EP014: 4095

EP015: 7

EP016: 1023

EP017: 4096

EP018: 255

EP019: 1024

EP020: 10010001

EP021: 256

EP022: 1025

EP023: 999888

EP024: 65432
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 99
1-2-1-3 Conversão de binário para hexadecimal

Basta separar o número binário em grupos de 4 algarismos, da direita para a esquerda (completando com zeros à
esquerda, o último grupo à esquerda, se for necessário para completar 4 algarismos), e, em seguida, colocar, para
cada grupo de 4 algarismos binários, o algarismo hexadecimal equivalente, conforme a tabela básica de
equivalência colocada na introdução do tópico 1-2.

Exemplo: determinar o número hexadecimal equivalente ao binário 11001101010001010000011.

0110 0110 1010 0010 1000 0011


6 6 A 2 8 3

Portanto, 66A283 é o número hexadecimal equivalente ao binário 11001101010001010000011.

Exercícios propostos:

Converter de binário para hexadecimal:

EP025: 11111000111010100100001

EP026: 1000000111000111111110000011111110

EP027: 1100

EP028: 11111110001

EP029: 1010101010101000110011000111

EP030: 110011001100110011001

EP031: 1000000000000001

EP032: 1000000001

EP033: 111111100000001111111

EP034: 1

EP035: 1100101011111110

EP036: 101011010111000111000000001111110001111
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 10
10
1-2-1-4 Conversão de hexadecimal para binário

Basta transcrever, para cada algarismo hexadecimal, o grupo de 4 algarismos binários a ele correspondente,
conforme a tabela do item anterior.
Para o último grupo à esquerda pode-se deixar de transcrever os zeros binários à esquerda não significativos.

Exemplo: determinar o número binário correspondente ao hexa 1AB4C.

1 A B 4 C

0001 1010 1011 0100 1100

Portanto, o número binário 11010101101001100 é equivalente ao hexadecimal 1AB4C.

Exercícios propostos:

Converter de hexadecimal para binário:

EP037: CAFE

EP038: CDF

EP039: 1AB4D

EP040: 15

EP041: F

EP042: 87B54

EP043: 1001

EP044: 234

EP045: CAD

EP046: 7F7

EP047: 1990

EP048: 33
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 11
11
1-2-1-5 Conversão de binário para decimal

Deve-se efetuar a soma das potências de 2 correspondentes aos algarismos 1 do número binário.

Exemplo: determinar o número decimal equivalente ao binário 111001101.

1 . (2**8) = 1 . 256 = 256


1 . (2**7) = 1 . 128 = 128
1 . (2**6) = 1 . 64 = 64
0 . (2**5) = 0 . 32 = 0
0 . (2**4) = 0 . 16 = 0
1 . (2**3) =1.8 = 8
1 . (2**2) =1.4 = 4
0 . (2**1) =0.2 = 0
1 . (2**0) =1.1 = 1

TOTAL 461

Portanto, o número decimal 461 é equivalente ao binário 111001101.

Exercícios propostos:

Converter de binário para decimal:

EP049: 11

EP050: 100001111111

EP051: 101010010101

EP052: 110000001111111

EP053: 11111110000011

EP054: 11110000111000

EP055: 11

EP056: 111111110

EP057: 1111100001111000111001101

EP058: 1000000000000

EP059: 11111001

EP060: 1000000000000001
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 12
12
1-2-1-6 Conversão de hexadecimal para decimal

Deve-se efetuar a soma das potências de 16 multiplicadas pelo valor decimal do algarismo hexadecimal.

Exemplo: determinar o número decimal equivalente ao hexadecimal 1AC5F.

1 . (16**4) = 1 . (16**4) = 1 . 65536 = 65536


A . (16**3) = 10 . (16**3) = 10 . 4096 = 40960
C . (16**2) = 12 . (16**2) = 12 . 256 = 3072
5 . (16**1) = 5 . (16**1) = 5 . 16 = 80
F . (16**0) = 15 . (16**0) = 15 . 1= 15

TOTAL 109663

Portanto, o número decimal 109663 é equivalente ao hexadecimal 1AC5F.

Exercícios propostos:

Converter de hexadecimal para decimal:

EP061: 11

EP062: AAF45

EP063: 1B567

EP064: 100

EP065: 1000

EP066: FF

EP067: FFF

EP068: CDF

EP069: CAFE

EP070: FACA

EP071: DAD0

EP072: F1E2D3C4
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 13
13

1-2-2 Operações aritméticas

1-2-2-1 Soma em binário

Os números devem estar alinhados à direita.


Análoga à soma em decimal, observando-se a seguinte "tabuada":

0+0=0
0+1=1
1+0=1
1 + 1 = 0 e vai 1 para a "casa" da esquerda

Exemplos:

11001001 1001111011 111


+ 1010 + 110110 + 1
----------- ------------- ------
11010011 1010110001 1000

Exercícios propostos:

EP073: 11001100 + 10101010

EP074: 1111001111 + 1001111001

EP075: 1111 + 1

EP076: 1111 + 111

EP077: 100001 + 11110

EP078: 1011110011 + 111101111

EP079: 110011001100 + 101011110000

EP080: 1111100001111000 + 101111

EP081: 111 + 1111 + 100

EP082: 11 + 111 + 1111 + 11111

EP083: 1111 + 1001 + 111 + 101 + 11 + 1

EP084: 111 + 1000 + 1 + 1100


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 14
14
1-2-2-2 Subtração em binário

Os números devem estar alinhados à direita.


A subtração é análoga à soma em decimal, observando-se a seguinte "tabuada":

0-0=0
1-0=1
1+1=0
0 - 1 = tira-se 1 da "casa" da esquerda (que fica valendo 1
a menos), e que vem para a "casa" presente valendo 2

Exemplos:

11001001 1001111011 100 100


- 1010 - 110110 - 1 - 1000
----------- ------------- ------ ---------
10111111 1001000101 11 ...1111100

Exercícios propostos:

EP085: 11001100 - 1010101

EP086: 1111001111 - 1111001

EP087: 1111 - 1

EP088: 1111 - 111

EP089: 100001 - 11110

EP090: 1011110011 - 111101111

EP091: 11001100 - 111011110000

EP092: 1111000 + 101010111

EP093: 111 - 1111

EP094: 10001 - 111111

EP095: 0 - 1

EP096: 0 - 10
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 15
15
1-2-2-3 Soma em hexadecimal

Os números devem estar alinhados à direita.


Análoga à soma em decimal, observando-se que só vai 1 para a "casa" da esquerda quando o resultado da soma de
dois algarismos das duas parcelas for maior que 15 (o algarismo resultante deve ser a soma achada - 16).
Os resultados de cada "casa" devem ser colocados em algarismos hexadecimais (se for 10, coloca-se A; e assim por
diante, até o 15, que coloca-se F).

Exemplos:

1AB4 CF55 A2BC89 FFF F0F0


+ 123 + 102D + F00F + 4 + CCCC
------- ------- --------- ------- --------
1BD7 DF82 A3AC98 1003 1BDBC

Exercícios propostos:

EP097: F12B + 321

EP098: 1100 + 111

EP099: 1000F + F0001

EP100: A9B8C7 + D6E5F4

EP101: CAFE + CDF

EP102: B001 + FD

EP103: 999 + 111

EP104: 123456 + 789ABC

EP105: FFF + EEE

EP106: DDD + 333

EP107: 987AED + CF01

EP108: FACA + CAFE


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 16
16
1-2-2-4 Subtração em hexadecimal

Os números devem estar alinhados à direita.


Análoga à subtração em decimal, observando-se que vem 1 da "casa" da esquerda (que fica valendo 1 a menos)
quando o algarismo do minuendo for menor que o do subtraendo. Neste caso, o 1 que veio, vem valendo 16, o qual
deve ser somado ao algarismo do minuendo, para que o resultado desta adição possa ser subtraído do algarismo do
subtraendo, e cujo valor máximo pode ser 15.
Os resultados de cada "casa" devem ser colocados em algarismos hexadecimais (se for 10, coloca-se A; e assim por
diante, até o 15, que coloca-se F).

Exemplos:

1AB4 CF55 A2BC89 FFF 0


- 123 - 102D - F00F - 4 - 2
------- ------- --------- ------- --------
1991 BF28 A1CC7A FFB ...FFE

Exercícios propostos:

EP109: F1C5 - 101

EP110: 1AD87C - FDE9

EP111: 112233 - 44556

EP112: AABBCC - DDEEF

EP113: F1E2D3 - C4B5A6

EP114: FF00001 - 10000F

EP115: CAFE - FACA

EP116: CDF - FDC

EP117: 10001 - 20001

EP118: 10000 - FFFE

EP119: 0 - 9

EP120: 0 - 1A
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 17
17

1-3 ) ARQUITETURAS DE MAINFRAME'S IBM

1-3-1 VISÃO GERAL

Com o lançamento da linha /360, a IBM introduziu o conceito de "família" de equipamentos, onde, com
compatibilidade, era possível migrar de um modelo menor para qualquer maior, permitindo que se preservasse os
investimentos em hardware (periféricos) e software.

A compatibilidade era fruto de diversos fatores, e um deles era a arquitetura dos equipamentos, igual em todos os
modelos (exceção aos modelos com características específicas, como os modelos 44 e o 67).

Essa arquitetura era a 360, que evoluiu para a arquitetura 370, que apresentava poucas modificações, a principal
delas referente ao uso de memória virtual.

A arquitetura 370 evoluiu para a XA (eXtended Architecture), e, desta, para a arquitetura ESA (Extended System
Architecture).

Vários são os elementos que compõe a arquitetura de um sistema de computação: a capacidade e a forma de
endereçamento, a forma de comunicação entre o hardware e o software, o conjunto de instruções, os componentes
do(s) processador(es), etc... Veremos, a seguir, alguns desses elementos, fundamentais para o aprendizado da
linguagem ASSEMBLER.

Um sistema IBM tem, entre outros, os seguintes componentes:

 Memória: é um componente fundamental, e é constituída por bytes, cada qual com 8 bits.
 16 registradores gerais (ou registradores de ponto fixo), cada qual com 4 bytes
 16 registradores de controle, cada qual com 4 bytes
 4 registradores de ponto flutuante, cada qual com 8 bytes
 PSW atual : registrador especial com 8 bytes; nela existem dois "campos" importantes: um (com 3 ou 4 bytes e)
que contem um endereço (vide item seguinte) que corresponde ao endereço da próxima instrução que deve ser
executada, e outro com o CONDITION CODE, com 2 bits, que indica, após a execução de algumas instruções,
alguma condição referente à execução da instrução, como por exemplo, o resultado de comparações.

Outros elementos que compõe a arquitetura são, por exemplo:

 o sistema de interrupções
 os "clocks"
 os sub-sistemas de entrada e saída
 o sistema de proteção de memória
 o sistema de memória virtual
 a forma de comunicação entre hardware e software
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 18
18

LAY-OUT DA PSW ATUAL (BC MODE)

BYTE 0 BITS 0-5 = máscaras de canal


BIT 6 = máscara para canais 6 e acima
BIT 7 = máscara externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12 = 0 = Basic Control Mode
BIT 13 = máscara de machine-check
BIT 14 = 1 = estado de wait
BIT 15 = 1 = estado de programa problema
BYTES 2-3 (BITS 16-31) = Interruption code
BYTE 4 BITS 32-33 = ILC = Instruction length code
BITS 34-35 = CC = Condition code
BITS 36-39 = máscara de programa
BYTES 5-7 (BITS 40-63) = Instruction address

LAY-OUT DA PSW ATUAL (EC MODE)

BYTE 0 BIT 0 = 0
BIT 1 = máscara de program-event recording
BIT 2 = 0
BIT 3 = 0
BIT 4 = 0
BIT 5 = translation mode
BIT 6 = máscara de I/O
BIT 7 = máscara externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12 = 1 = Extended Control Mode
BIT 13 = máscara de machine-check
BIT 14 = 1 = estado de wait
BIT 15 = 1 = estado de programa problema
BYTE 2 BIT 16 = 0
BIT 17 = 0
BITS 18-19 = CC = condition code
BITS 20-23 = máscara de programa
BIT 20 = máscara de fixed-point overflow
BIT 21 = máscara de decimal-overflow
BIT 22 = máscara de exponent underflow
BIT 23 = máscara de significância
BYTE 3 (BITS 24-31) = 00000000
BYTE 4 (BITS 32-39) = 00000000
BYTES 5-7 (BITS 40-63) = Instruction address
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 19
19

LAY-OUT DA PSW ATUAL (XA MODE)

BYTE 0 BIT 0 = 0
BIT 1 = máscara de program-event recording
BIT 2-4 = 000
BIT 5 = translation mode
BIT 6 = máscara de I/O
BIT 7 = máscara externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12 = 1
BIT 13 = máscara de machine-check
BIT 14 = 1 = estado de wait
BIT 15 = 1 = estado de programa problema
BYTE 2 BIT 16 = address space mode (junto c/ bit 5)
BIT 17 = 0
BITS 18-19 = CC = condition code
BITS 20-23 = máscara de programa
BIT 20 = máscara de fixed-point overflow
BIT 21 = máscara de decimal-overflow
BIT 22 = máscara de exponent underflow
BIT 23 = máscara de significância
BYTE 3 (BITS 24-31) = 00000000
BYTE 4 BIT 32 = 0 = 24 bit addressing
= 1 = 31 bit addressing
BYTE 4/5/6/7 (BITS 33-63) = Instruction address

LAY-OUT DA PSW ATUAL (ESA MODE)

BYTE 0 BIT 0 = 0
BIT 1 = máscara de program-event recording
BIT 2-4 = 000
BIT 5 = translation mode
BIT 6 = máscara de I/O
BIT 7 = máscara externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12 = 1
BIT 13 = máscara de machine-check
BIT 14 = 1 = estado de wait
BIT 15 = 1 = estado de programa problema
BYTE 2 BIT 16-17 = address space control
= 00 = Primary space mode (bit 5 = 1)
= 01 = Access-register mode (bit 5 = 1)
= 10 = Secondary space mode (bit 5 = 1)
= 11 = Home space mode (bit 5 = 1)
BITS 18-19 = CC = condition code
BITS 20-23 = máscara de programa
BIT 20 = máscara de fixed-point overflow
BIT 21 = máscara de decimal-overflow
BIT 22 = máscara de exponent underflow
BIT 23 = máscara de significância
BYTE 3 (BITS 24-31) = 00000000
BYTE 4 BIT 32 = 0 = 24 bit addressing
= 1 = 31 bit addressing
BYTE 4/5/6/7 (BITS 33-63) = Instruction address
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 20
20

1-3-2 ENDEREÇAMENTO

Cada byte de memória tem um número que o identifica e o individualiza. A esse número dá-se o nome de
endereço, e é expresso através do sistema de numeração hexadecimal.

Para as arquiteturas anteriores à XA, o endereço de um byte era um número hexadecimal de 6 algarismos (24
algarismos binários - 24 bits), variando, portanto, de 000000 até FFFFFF, o que possibilitava referências a
endereços até 16MB.

A partir da arquitetura XA, o endereço máximo possível é de 31 bits, equivalentes a 8 algarismos hexadecimais
menos 1 bit (31 algarismos binários - 31 bits); pode haver, portanto, referências a endereços que vão desde
00000000 até 7FFFFFFF, possibilitando a utilização de até 2 GB.

No entanto, para que uma instrução possa fazer referência a endereços de campos de memória com os quais ela
trabalhe, e para que isso seja feito de forma mais econômica (se uma instrução precisasse fazer referência a dois
endereços de memória de 31 bits, ela precisaria - só para isso - de 62 bits, ou seja, praticamente 8 bytes),
convencionou-se que as referências a endereços em instruções (Bse + Deslocamento ou Base + Deslocamento +
Indexador) seriam feitas de forma indireta.

Referências usando a forma indireta são feitas através da forma

BASE + DESLOCAMENTO

que consiste na citação do número (endereço) de um dos 16 registradores gerais (que são endereçados de 0 a F -
por serem 16), além de outro número hexadecimal composto sempre de 3 algarismos.

O registrador geral usado com essa finalidade recebe o nome de registrador BASE, e o número hexadecimal
complementar recebe o nome de DESLOCAMENTO.

O endereço desejado é obtido através da soma entre o número contido no registrador base e o deslocamento.

Nas arquiteturas anteriores à XA, o conteúdo do registrador (que tem 4 bytes = 8 algarismos hexadecimais) tem o
primeiro byte à esquerda desprezado, e é levado em consideração somente o número formado pelos 3 bytes à
direita.

Nas outras arquiteturas, o conteúdo do registrador base tem seu primeiro bit à esquerda desprezado, e os 31 bits
restantes formam um número que é levado em consideração no cálculo do endereço.

Vejamos o seguinte exemplo:

Caso uma instrução referencie um endereço na forma BASE + DESLOCAMENTO, onde o registrador base é o
registrador geral 12, e o deslocamento é o número C5A, temos que (supondo que o conteúdo do registrador 12 seja
610AB428):
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 21
21
Conteúdo do registrador Base = 0AB428 ou 610AB428
Deslocamento = C5A C5A
Endereço do campo de memória = 0AC082 610AC082

dependendo da arquitetura utilizada.

Uma outra forma possível de ser utilizada (somente nas instruções RX) é a forma

INDEXADOR + BASE + DESLOCAMENTO

que consiste na citação do número (endereço) de dois dos 16 registradores gerais, além do deslocamento.

Um dos registradores gerais usado recebe o nome de registrador INDEXADOR, e o outro de registrador BASE; e
o número hexadecimal complementar recebe o nome de DESLOCAMENTO.

O endereço desejado é obtido através da soma com 3 parcelas: o número contido no registrador indexador, o
número contido no registrador base e o deslocamento. Vale aqui as mesmas considerações anteriores relativas ao
tratamento do conteúdo do registrador base (24 ou 31 bits) e elas se estendem também ao número contido no
registrador indexador.

Vejamos o seguinte exemplo:

Caso uma instrução referencie um endereço na forma INDEXADOR + BASE + DESLOCAMENTO, em que o
registrador indexador é o 8, o registrador base é o registrador 2, e o deslocamento é o número F84, temos que
(supondo que o conteúdo do registrador 8 seja 30C0A800 e que o conteúdo do registrador 2 seja 10002800):

Conteúdo do registrador indexador = C0A800 ou 30C0A800


Conteúdo do registrador Base = 002800 ou 10002800
Deslocamento = F84 F84
Endereço do campo de memória = C0DF84 ou 40C0DF84

dependendo da arquitetura utilizada.

IMPORTANTE : se o registrador base ou o registrador indexador for o registrador 0, o seu conteúdo é


desprezado no cálculo do endereço.

Exemplos:

1) Registrador indexador = R0; conteúdo = 00345CB9


Registrador base = R7; conteúdo = 00FCD800
Deslocamento = 12A
Endereço de memória = 00FCD92A
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 22
22
2) Registrador indexador = R9; conteúdo = 00345CB9
Registrador base = R0; conteúdo = 00FCD800
Deslocamento = 12A
Endereço de memória = 00345DE3

3) Registrador indexador = R0; conteúdo = 00345CB9


Registrador base = R0; conteúdo = 00FCD800
Deslocamento = 12A
Endereço de memória = 0000012A

4) Registrador base = R0; conteúdo = 00334400


Deslocamento = 123
Endereço de memória = 00000123

5) Registrador base = R9; conteúdo = 00334400


Deslocamento = 123
Endereço de memória = 00334523

1-3-3 REPRESENTAÇÃO DE DADOS

Os dados podem ser representados de forma codificada, em formato que depende de sua natureza.

Assim, devemos distinguir os dados numéricos dos alfanuméricos.

Os dados numéricos podem ser representados numa das seguintes formas:


- Formato binário de ponto flutuante
- Formato binário de ponto fixo
- Formato decimal zonado
- Formato decimal compactado

Os dados alfanuméricos devem ser representados no formato EBCDIC.

1-3-3-1 Formato binário de ponto fixo

Neste caso, deve-se usar campos de memória que sejam:


- Half-words (campos de 2 bytes com endereço múltiplo de 2)
- Full-words ou simplesmente words (campos de 4 bytes com endereço múltiplo de 4).

Os números são representados usando-se 15 bits (se for numa half-word) ou 31 bits (se for numa full-word); o bit
adicional é usado para indicar o sinal do número, e é o primeiro bit à esquerda do campo.

Exemplos:

Número Representação em Half-word Representação em Full-word

+12 00.0C 00.00.00.0C


-12 FF.F4 FF.FF.FF.F4
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 23
23
1-3-3-2 Formato decimal zonado

Neste caso, cada algarismo do número decimal ocupa um byte, tendo na parte de zona a configuração F (o último
byte à direita é exceção), e na parte numérica a configuração correspondente ao algarismo desejado.
No último byte à direita, a parte de zona tem configuração correspondente ao sinal do número: C ou F se o número
for positivo, ou D se o número for negativo.
Se for necessário usar campos maiores que o suficiente para conter o número desejado, deve-se ter zeros zonados à
esquerda.
O maior tamanho possível é de 16 bytes.

Exemplos:

Número Representação em decimal zonado

+12 F1.C2 ou F1.F2


-12 F1.D2

1-3-3-3 Formato decimal compactado

Neste caso, cada algarismo do número decimal ocupa meio byte, tendo na parte numérica do último byte à direita a
configuração correspondente ao sinal do número: C ou F se o número for positivo, ou D se o número for negativo.
Se for necessário usar campos maiores que o suficiente para conter o número desejado, deve-se ter zeros à
esquerda.

O maior tamanho possível é de 16 bytes.

Exemplos:

Número Representação em decimal compactado

+12 01.2C ou 01.2F


-12 01.2D

1-3-4 REPRESENTAÇÃO DE INSTRUÇÕES

Existem os seguintes tipos de instruções:

RR - 2 bytes
CO = 1 byte (código de operação)
R1 = 1/2 byte (registrador primeiro operando)
R2 = 1/2 byte (registrador segundo operando)

E - 2 bytes
ambos para o código de operação

QST - 4 bytes
CO = 2 bytes (código de operação)
QR3 = 1/2 byte (registrador geral -GR- ou pto flut -FR- terceiro oper)
RT2 = 1/2 byte (registrador "stride of vector" do segundo operando)
VR1 = 1/2 byte (registrador de vetor primeiro operando)
RS2 = 1/2 byte (registrador end início de vetor do segundo operando)

QV - 4 bytes
CO = 2 bytes (código de operação)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 24
24
QR3 = 1/2 byte (registrador geral -GR- ou pto flut -FR- terceiro oper)
NU = 1/2 byte (não usado)
VR1 = 1/2 byte (registrador de vetor primeiro operando)
VR2 = 1/2 byte (registrador de vetor segundo operando)

RRE - 4 bytes
CO = 2 bytes (código de operação)
NU = 1 byte (não usado)
R1 = 1/2 byte (registrador primeiro operando)
R2 = 1/2 byte (registrador segundo operando)

RS - 4 bytes
CO = 1 byte (código de operação)
R1 = 1/2 byte (registrador primeiro operando)
R3 = 1/2 byte (registrador terceiro operando)
B2 = 1/2 byte (registrador base do segundo operando)
D2 = 1 byte e 1/2 (deslocamento do segundo operando)

RX - 4 bytes
CO = 1 byte (código de operação)
R1 = 1/2 byte (registrador primeiro operando)
X2 = 1/2 byte (registrador indexador do segundo operando)
B2 = 1/2 byte (registrador base do segundo operando)
D2 = 1 byte e 1/2 (deslocamento do segundo operando)

S - 4 bytes
CO = 2 bytes (código de operação)
B2 = 1/2 byte (registrador base do segundo operando)
D2 = 1 byte e 1/2 (deslocamento do segundo operando)

SI - 4 bytes
CO = 1 byte (código de operação)
I2 = 1 byte (operando imediato - segundo operando)
B1 = 1/2 byte (registrador base do primeiro operando)
D1 = 1 byte e 1/2 (deslocamento do primeiro operando)

VR - 4 bytes
CO = 2 bytes (código de operação)
QR3 = 1/2 byte (registrador geral -GR- ou pto flut -FR- terceiro oper)
NU = 1/2 byte (não usado)
VR1 = 1/2 byte (registrador de vetor primeiro operando)
GR2 = 1/2 byte (registrador segundo operando)

VS - 4 bytes
CO = 2 bytes (código de operação)
NU = 1 byte e 1/2 (não usado)
RS2 = 1/2 byte (registrador end início de vetor do segundo operando)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 25
25
VST - 4 bytes
CO = 2 bytes (código de operação)
VR3 = 1/2 byte (registrador de vetor terceiro operando)
RT2 = 1/2 byte (registrador "stride of vector" do segundo operando)
VR1 = 1/2 byte (registrador de vetor primeiro operando)
RS2 = 1/2 byte (registrador end início de vetor do segundo operando)

VV - 4 bytes
CO = 2 bytes (Código de operação)
VR3 = 1/2 byte (registrador de vetor terceiro operando)
NU = 1/2 byte (não usado)
VR1 = 1/2 byte (registrador de vetor primeiro operando)
VR2 = 1/2 byte (registrador de vetor segundo operando)

RSE - 6 bytes
CO = 2 bytes (código de operação)
R3 = 1/2 byte (registrador terceiro operando)
NU = 1/2 byte (não usado)
VR1 = 1/2 byte (registrador de vetor primeiro operando)
NU = 1/2 byte (não usado)
B2 = 1/2 byte (registrador base do segundo operando)
D2 = 1 byte e 1/2 (deslocamento do segundo operando)

SS - 6 bytes
CO = 1 byte (código de operação)
o segundo byte pode ter uma das 3 alternativas:
. R1 = 1/2 byte (registrador primeiro operando)
R3 = 1/2 byte (registrador terceiro operando)
ou . L1 = 1/2 byte (tamanho - 1 do primeiro operando)
L2 = 1/2 byte (tamanho - 1 do segundo operando)
ou . L = 1 byte (tamanho - 1 dos dois operandos)
B1 = 1/2 byte (registrador base do primeiro operando)
D1 = 1 byte e meio (deslocamento do primeiro operando)
B2 = 1/2 byte (registrador base do segundo operando)
D2 = 1 byte e meio (deslocamento do segundo operando)

SSE - 6 bytes
CO = 2 bytes (código de operação)
B1 = 1/2 byte (registrador base do primeiro operando)
D1 = 1 byte e meio (deslocamento do primeiro operando)
B2 = 1/2 byte (registrador base do segundo operando)
D2 = 1 byte e meio (deslocamento do segundo operando)

-------------------------------------------------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 26
26

EXERCÍCIOS PROPOSTOS
Representar, no formato binário de ponto fixo, em half-words e full-words, os seguintes números (especificados
em decimal):

EP121: 1

EP122: -1

EP123: 10

EP124: -10

EP125: 17

EP126: -17

EP127: 254

EP128: -254

EP129: 100000

EP130: -100000

EP131: 32000

EP132: -32000

EP133: 63000

EP134: -63000

EP135: 1010

EP136: -1010

EP137: 4095

EP138: -4095

EP139: 4097

EP140: -4097
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 27
27
Representar, no formato decimal compactado, os seguintes números (especificados em decimal):

EP141: 1

EP142: -1

EP143: 10

EP144: -10

EP145: 17

EP146: -17

EP147: 254

EP148: -254

EP149: 100000

EP150: -100000

EP151: 32000

EP152: -32000

EP153: 63000

EP154: -63000

EP155: 1010

EP156: -1010

EP157: 4095

EP158: -4095

EP159: 4097

EP160: -4097
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 28
28
Representar, no formato decimal zonado, os seguintes números (especificados em decimal):

EP161: 1

EP162: -1

EP163: 10

EP164: -10

EP165: 17

EP166: -17

EP167: 254

EP168: -254

EP169: 100000

EP170: -100000

EP171: 32000

EP172: -32000

EP173: 63000

EP174: -63000

EP175: 1010

EP176: -1010

EP177: 4095

EP178: -4095

EP179: 4097

EP180: -4097
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 29
29
Representar, no formato EBCDIC, os seguintes dados:

EP181: 17

EP182: -17

EP183: AF$BD

EP184: -AF4BD

EP185: ALBERTO

EP186: 15-9

EP187: -4095

EP188: 4095

EP189: *&$//

EP190: 12+3

EP191: EU E ELA

EP192: CR$ 2.584,73

EP193: US$ 1 MILHAO

EP194: TICO'S BAR


EP195 : Decodificar o seguinte conjunto de instruções, especificando, para cada uma delas:
- Código de operação de máquina e Assembler
- Endereço da instrução (supor que a primeira instrução esteja no endereço 00000000).
- Operandos (qual registrador, qual base, qual indexador, qual deslocamento); quando o operando for de memória,
calcular o seu endereço real, supondo que os registradores gerais tenham o seguinte conteúdo:

R00=00112233 R04=00000400 R08=00000800 R12=00000C00


R01=00000100 R05=00000500 R09=00000900 R13=00000D00
R02=00000200 R06=00000600 R10=00000A00 R14=00000E00
R03=00000300 R07=00000700 R11=00000B00 R15=00000F00

Instruções a decodificar:

1ABB41278CF00A13980F334445E00CB490EC0D00FA82305448CCD28233445566
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 30
30

2) MONTADOR ASSEMBLER E ESPECIFICAÇÃO DE ELEMENTOS

2-1) INTRODUÇÃO

2-1-1 O MONTADOR ASSEMBLER

É o programa encarregado de transformar as instruções de linguagem fonte (simbólica) para linguagem objeto. O
programa objeto será posteriormente tratado pelo linkeditor para torná-lo executável.
Uma das diferenças básicas entre um montador e um compilador é que o montador, para cada instrução simbólica
gera uma única instrução de máquina, ao passo que um compilador pode gerar de uma a n instruções de
máquina.

Numa primeira fase, o montador Assembler lê todos os statements fonte, expandindo as macro-instruções e os
COPY's, e, além disso, identificando todos os comandos ao montador e instruções de máquina; ele consegue, para
cada um deles que gera algum byte, identificar quantos bytes devem ser gerados, e, em alguns casos, já colocando
o conteúdo necessário do programa objeto.

À medida que vai alocando os bytes, o montador Assembler vai incrementando um contador denominado
LOCATION COUNTER, que reflete a quantidade de bytes gastos (alocados) até um determinado instante, isto é, o
tamanho do programa até esse instante.

Ao mesmo tempo, cada símbolo encontrado vai formando a TABELA DE SÍMBOLOS, de tal forma que fique
completa ao fim da primeira fase.
A tabela de símbolos contém, entre outras informações: o símbolo, seu endereço, seu atributo de tamanho e seu
atributo de tipo (se é uma instrução, o atributo de tipo é I, se é um campo compactado, o atributo de tipo é P, se for
uma full-word, é F, e assim por diante).

Na segunda fase, de posse da tabela de símbolos completa, ele "varre" o código objeto gerado, completando as
informações que tinham ficado faltando, como por exemplo os endereços na forma base + deslocamento.

Para efeito de exemplificação, vejamos o seguinte fluxo, referente ao sistema operacional MVS:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 31
31

fonte objeto

SYSIN SYSPUNCH

macros/ asmF=IFOX00 listagem


copys
SYSLIB asmH=IEV90 SYSPRINT

work objeto

SYSUT1 SYSGO

objeto
SYSUT1
SYSLIN

statements listagem
de contro- IEWL
le SYSPRINT
SYSIN

outros executável
objetos
SYSLMOD
SYSLIB

executável
(de uma LOADER memória
LINKLIB)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 32
32

2-1-2 O STATEMENT ASSEMBLER

Ele é utilizado para a codificação das instruções de um programa em Assembler.

Normalmente (pode ser diferente - veja o comando ICTL) um statement Assembler é dividido em campos, cada
um com uma função. São os seguintes os campos:

a) Posições 1 a 8: Símbolo
b) Posições 10 a 14: Código da Instrução
c) Posições 16 a 71: Operandos e Comentários
d) Posição 72: Posição de Continuação
e) Posições 73 a 80: Identificação e Sequência

Estudemos mais detalhadamente cada um desses campos:

2-2) SÍMBOLO

Também conhecido como LABEL. É o nome que se atribui a uma Instrução ou de uma área. Para a criação de um
símbolo, deve-se obedecer às seguintes regras:

Um símbolo pode ter de 1 a 8 caracteres (no Assembler F)


ou de 1 a 63 caracteres (no Assembler H)
Os caracteres válidos para a formação de símbolos são:
- Letras: A até Z
- Algarismos: 0 ate 9
- Caracteres $ @ #
O primeiro caracter não pode ser um algarismo

Exemplos:

ARIMP
ARLEIT
TOTAL3
VALOR$ Válidos
$VALOR
SOMAR7
A

3TOTAL
TRANZAMAZONICA
EU E ELA Não-Válidos (o segundo é válido
EU-E-ELA no Assembler H)
CABEC.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33
33

2-3) CÓDIGO DE INSTRUÇÃO

Especifica a instrução. Pode-se especificar um dos 3 tipos:

2-3-1) INSTRUÇÕES AO MONTADOR


São dados para o montador Assembler, a fim de conduzir a montagem de acordo com o necessário. Com poucas
exceções, elas não dão origem a nenhuma instrução em linguagem de máquina. São os seguintes os Comandos ao
Montador Assembler:
a) Definição de áreas : DC, DS, CCW, CCW0, CCW1
b) Seccionamento de um Programa e Ligação: START, CSECT, DSECT, DXD
CXD, COM, ENTRY, EXTRN, WXTRN
c) Controle de Registradores Base: USING, DROP
d) Controle da listagem: TITLE, EJECT, SPACE, PRINT
e) Controle de programa : ICTL, ISEQ, PUNCH, REPRO, ORG, EQU, OPSYN, PUSH
POP, LTORG, CNOP, COPY, END, LOCTR, AMODE, RMODE
f) Definição de macro-instrução: AREAD, MACRO, MEXIT, MEND
g) Montagem condicional: ACTR, AGO, AIF, ANOP, GBLA, GBLB, GBLC
LCLA, LCLB, LCLC, MHELP, MNOTE, SETA, SETB, SETC

2-3-2) INSTRUÇÕES DE MÁQUINA


Para cada código de operação válido no primeiro byte de uma instrução de máquina, existe um código Assembler
correspondente. Verifique nos APÊNDICES A e B a relação de todas as instruções de máquina.

2-3-3) MACRO-INSTRUÇÕES
São códigos que farão com que o montador Assembler dê origem a diversas instruções (de máquina ou ao
montador). Para que ele saiba o que gerar, ele consulta a Biblioteca de Macros (em VSE é a SOURCE
STATEMENT LIBRARY; em MVS é, em geral, a SYS1.MACLIB). As macro-instruções variam de um sistema
operacional para outro.

2-4) OPERANDOS E COMENTÁRIOS


Os operandos informam onde se localizam os dados a serem processados. Deve-se especificar um operando após o
outro, separando-os através de uma vírgula, sem espaços em branco. Terminada a especificação dos operandos,
deve haver pelo menos um espaço em branco; o que vier em seguida, até a posição 71, será considerado
comentário, isto é, servirá somente para, aparecendo na listagem dos statements-fonte fornecida pelo montador,
explicar o que foi feito na instrução. Por exemplo:

COMPLETA MVC ARIMP,=CL133'b' LIMPAR ARIMP


........ ... ............... ............
= = = =
Símbolo Código de Operandos Comentários
Instrução

Os operandos de uma instrução podem ser registradores ou campos de memória. Vejamos agora, como, ao
escrevermos uma instrução, especificamos um operando.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 34
34

2-4-1) OPERANDOS EM REGISTRADOR

Este é o caso mais simples; deve-se apenas colocar o número do registrador que contém o dado a ser processado.
Suponha, por exemplo, que você tenha um número no registrador 7, e queira adicionar a ele outro número que
esteja no registrador 12. Em Assembler a instrução que efetua essa soma é

AR 7,12

Sendo que AR é o código mnemônico da instrução que soma números contidos em registradores.

2-4-2) OPERANDOS EM MEMÓRIA

Para que façamos referência a um operando que seja um campo de memória, utilizamo-nos de EXPRESSÕES que
representam os endereços dos campos utilizados. As expressões são compostas de TERMOS, dos quais existem 5
tipos, descritos a seguir.

2-4-2-1) TÊRMOS DE EXPRESSÕES

I - SÍMBOLOS, que podem ser de 3 tipos: Ordinários (vistos no ítem 2-2), Variáveis e de Sequência (serão vistos
no estudo de macros).

II - ATRIBUTO DE TAMANHO : O seu formato é L's, sendo que s é um símbolo. O valor deste termo será o
tamanho (Length) do símbolo.

III - REFERÊNCIA AO LOCATION COUNTER : O montador Assembler tem para si um contador que é
incrementado durante a montagem, à medida que vão sendo usados bytes, seja por instruções, seja por áreas. O
nome desse contador de posições é LOCATION COUNTER, e a referência a ele (a seu conteúdo) é feita
colocando-se um asterisco (*).
Compreenderemos melhor através de um exemplo. Normalmente, ao ser iniciada a montagem de um programa, o
conteúdo do LOCATION COUNTER é zero. Suponhamos um programa com o seguinte conjunto de instruções e
de áreas:

BALR 3,0 2 BYTES 000000


D --> USING *,3 ----- 000002
BAL 14,ROTLE 4 BYTES 000002
E --> CLC CODIGO,=C'1' 6 BYTES 000006
BNE ERRADO 4 BYTES 00000C
F --> AP CERTO,=P'1' 6 BYTES 000010
BAL 14,IMPRIME 4 BYTES 000016
. 00001A
. 382 " .
. (Por Ex) .
. .
CODIGO DS CL1 1 BYTE 000198
CERTO DC PL3'0' 3 BYTES 000199
. 00019C

A B C
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 35
35
Em A temos as instruções e áreas, conforme definidas no programa.

Em B temos o tamanho de cada instrução ou área.

Em C temos o conteúdo do location counter, que é atualizado a cada campo utilizado, cada byte gasto.

Em D temos um exemplo de uma instrução com 2 operandos, sendo que o primeiro é uma referência ao Location
Counter.

IV - TERMOS AUTO-DEFINIDOS

São termos cujo valor é inerente ao termo, isto é, eles próprios são uma especificação explícita do valor que
representam.

- Decimal: - um número decimal composto de 1 ate 8 algarismos. Ex:

MVI BYTE,240

- Hexadecimal: - um número hexadecimal composto de 1 ate 6 algarismos, colocados entre apóstrofes, e precedido
da letra X. Ex:

MVI BYTE,X'F0'

- Binário:- um número binário composto de 1 ate 24 algarismos, colocados entre apóstrofes, e precedido da letra B.
Ex:

MVI BYTE,B'11110000'

- Caracter:- conjunto de 1 a 3 caracteres quaisquer colocados entre apóstrofes e precedido da letra C. Ex:

MVI BYTE,C'0'

OBS:- Quando o caracter desejado for um apóstrofe (') ou um E Comercial (&), ele deve ser colocado duas vezes.
Ex:

MVC BYTES,=C'A&&B'

MVC BYTES,=C'A''B'

Como vimos, os termos formam expressões cuja função é fazer referência a um operando na memória. Uma
expressão pode ser composta de um ou mais termos, aritmeticamente combinados através dos sinais

+ adição
- subtração
* multiplicação
/ divisão

e, quando necessário, de parênteses, para ordenar a sequência de resolução da expressão. Ex:

ARIMP+L'SALARIO-2*(LEP02/4)

2-4-2-2) EXPRESSÕES PARA REFERÊNCIA DE OPERANDOS


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 36
36
Não esqueçamos que a referência a um campo de memória tem por função informar ao montador qual o endereço
do campo, para que o montador possa transformar a instrução de linguagem simbólica para linguagem de máquina,
na qual o endereço é colocado na forma BASE + DESLOCAMENTO ou INDEXADOR + BASE +
DESLOCAMENTO.

OBS: - daqui em diante, usaremos as seguintes abreviaturas:

R1 = Registrador primeiro operando


R2 = Registrador segundo operando
R3 = Registrador terceiro operando
B1 = Registrador Base do primeiro operando
B2 = Registrador Base do segundo operando
D1 = Deslocamento do primeiro operando
D2 = Deslocamento do segundo operando
X2 = Registrador Indexador do segundo operando
I2 = Operando Imediato (segundo operando)
L = Tamanho do primeiro e do segundo operandos
L1 = Tamanho do primeiro operando
L2 = Tamanho do segundo operando
CO = Código de Operação

Existem três maneiras de especificarmos um operando de memória:

a) EXPLÍCITA: - esta forma é para a especificação de registradores ou de operandos de memória. No caso de


registrador, basta colocar o número do registrador desejado. Para operandos de memória, há uma indicação
explícita de qual é o registrador indexador, qual é o registrador base e qual o deslocamento. A indicação deve ser
feita do seguinte modo:

a-1) Instruções RX:

CO R1,D2(X2,B2)

CO R1,D2(X2) assume base 0

CO R1,D2(,B2) assume
indexador 0

a-2) Instruções RS:

CO R1,R3,D2(B2)

a-3) Instruções SI:

CO D1(B1),I2
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 37
37
a-4) Instruções SS: (1 tamanho)

CO D1(L,B1),D2(B2)

a-4) Instruções SS: (2 tamanhos)

CO D1(L1,B1),D2(L2,B2)

Ex:

LA 7,382(3,12) RX
LA 7,382(3) RX
LA 7,382(,12) RX
LM 1,12,35(14) RS
MVI 0(5),X'80' SI
MVC 0(2,7),5(11) SS (L)
AP 4(8,12),0(2,3) SS (L1 e
L2)

b) IMPLÍCITA: - esta forma é usada, em geral, para operandos de memória; nela, é feita a indicação do endereço
através de expressões, cujo valor, calculado pelo Assembler, é o endereço real do campo desejado. O montador
Assembler se encarrega de transformar o endereço real para a forma base + deslocamento.
Ex:

LA 7,TABELA
LA 7,TABELA-30
LM 1,13,SAVE+4
MVI ARIMP+82,C'*'
MVI BYTE,C'*'
MVC ARIMP+5(6),ARCOMP
MVC ARIMP+5(6),ARCOMP+2
AP TOTAL,=P'1'
AP VALOR,ARLEIT+5(2)
SP ARLEIT+5(8),ARLEIT+28(3)

OBS:- O número que vai entre parênteses após a expressão, indica o tamanho do operando. Numa instrução SS
que faz referência a 1 tamanho, este deve ser especificado no primeiro operando; o segundo operando não pode ter
indicação de tamanho. Observar que as instruções que se enquadram nesse tipo são: MVN, MVC, MVZ, NC, CLC,
OC, XC, TR, TRT, ED, EDMK.

c) LITERAIS :- São áreas (constantes) definidas através das próprias instruções que delas se utilizam. Uma literal
é composta do sinal de igual seguido daquilo que seria a parte de operando de um comando DC ou DS utilizado
para definir a área desejada. O montador Assembler, sabendo o endereço da literal, transforma-o em
base+deslocamento. Ex:

MVC ARIMP,=CL133' '


CLC BYTE,=C' '
CLC =C' ', BYTE

Para entender melhor, veja adiante os comandos DC e DS.

2-5) CONTINUAÇÃO DE STATEMENTS


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 38
38
Quando, ao se escrever uma instrução, ela não couber na linha (statement), deve-se colocar qualquer caracter
diferente de branco na posição 72 do statement a ser continuado, e, a partir da posição 16 (inclusive) do statement
seguinte, deve-se fazer a continuação.

As posições 1 a 15 do statement de continuação devem ficar obrigatoriamente em branco. Vejamos os seguintes


exemplos:

123456789012345678901234567890123456789012345678901234567890123456789012

CABEC DC CL133' RELACAO DE FUNCIONARIOS COM SEUS RE-


SPECTIVOS DEPENDENTES'

ENTRADA DCB DSORG=PS, ORGANIZACAO -


DDNAME=DDENTRA, NOME DO DD -
EODAD=FIM, FIM DE ARQUIVO -
MACRF=(GM) MACROS USADAS

2-6) IDENTIFICAÇÃO E SEQUÊNCIA DE STATEMENTS

Em geral, usa-se essas posições da seguinte maneira:

Pos. 73 a 76 - Identificação. Conjunto de 4 caracteres quaisquer que podem identificar o programa.


Pos. 77 a 80 - Número sequencial do statement, em geral numerado de 10 em 10.

OBS:

1) A divisão estabelecida no início do capítulo 2 não é rígida. O importante é haver pelo menos um espaço em
branco entre o Símbolo e o Código de Operação; outro espaço em branco entre o Código de Operação e os
operandos; e, finalmente, pelo menos um espaço em branco entre os Operandos e Comentários.

2) Quando houver um asterisco (*) na posição 1 de um statement, ele será considerado comentário.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 39
39

3) INSTRUÇÕES AO MONTADOR ASSEMBLER

3-1) Instruções para definição de áreas

DC (Define Constant - Definir Constante)

(Símbolo) DC A1B1C1D1(,A2B2C2D2,...)

A função do DC é definir uma área de memória, atribuindo a ela um conteúdo inicial. Temos que:

A - Atributo de duplicação. É um número decimal que indica quantas vezes se deseja definir a área. O mínimo é 1.
Se omitido, assume 1.

B- Letra que indica o tipo de constante. Pode ser:

C (Caracter)
X (Hexadecimal)
B (Binário)
F (Full-Word)
H (Half-Word)
E (Full-Word - Ponto Flutuante)
D (Double-Word - Ponto Flutuante)
L (Duas Double-Words - Ponto Flutuante)
P (Compactado)
Z (Zonado)
A (Address - Endereço - 4 bytes)
Y (Address - Endereço - 2 bytes)
S (Endereço em Base + Deslocamento)
V (Endereço Externo)
Q (Símbolo que dá nome a DXD ou DSECT)
W (Endereço Externo sem AUTOLINK)

C - Atributo de tamanho. Pode ser no formato Ln ou L.n (L do inglês Length - Comprimento).


No primeiro caso, n indica o número de Bytes que o campo deve ter.
No segundo caso, n indica o número de Bits que o campo deve ter.
Usa-se, em geral, o primeiro formato.
Se omitido, o tamanho assumido vai depender do tipo de constante.

D - Conteúdo inicial da área.


Deve vir entre apóstrofes para as constantes tipo C, X, B, F, H, E, D, L, P e Z.

Deve vir entre parênteses para os tipos A, Y, S, V, Q e W.

Ex: ARTOT DC 5PL3'0'

OBS:- Pode-se colocar num só comando DC quantas definições forem necessárias. Ex:

ACS DC PL4'0',C'*',X'0C'

TABELA DE CONSTANTES
TIPO Tamanho Alinha- Tamanhos Constantes Sentido Completa Trunca Caracteres Cada
assumido mento Válidos por preenchi- com à Válidos carater
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 40
40

operando mento ocupa


C suficiente byte 1 a 256 uma E->D brancos D qualquer 1 byte
X suficiente byte 1 a 256 várias D->E X’0’ E 0aF ½ byte
B suficiente byte 1 a 256 várias D->E B’0’ E 0e1 1 bit
F 4 bytes FullWord 1a8 várias D->E (1) E +-0a9 (2) (4)
H 2 bytes HalfWord 1a8 várias D->E (1) E +-0a9 (3) (4)
P suficiente Byte 1 a 16 várias D->E X’0’ E +-0a9 ½ byte (5)
Z suficiente Byte 1 a 16 várias D->E C’0’ E +-0a9 1 byte
D 8 bytes DoubWord 1a8 várias -x- -x- -x- +-0a9 -x-
A 4 bytes FullWord 1a4 várias E->D B’0’ E expressão -x-
Y 2 bytes HalfWord 1a2 várias E->D B’0’ E expressão -x-
S 2 bytes HalfWord 2 várias -x- -x- -x- expressão -x-

OBS:- (1) 0's se o número for positivo;


1's se o numero for negativo
(2) O nro.máximo que pode ser especificado é 2**31 - 1
(3) O nro.máximo que pode ser especificado é 2**15 - 1
(4) O ponto decimal não ocupa nada
(5) O sinal ocupa 1/2 BYTE

DC tipo C

Cada caracter especificado no conteúdo inicial ocupa um byte, em sua configuração EBCDIC; se não for
especificado tamanho, será assumido o necessário para conter o conteúdo inicial. Se for especificado o atributo de
tamanho, ele prevalece sobre a quantidade de bytes necessária ao conteúdo inicial. Se o tamanho especificado for
maior que o necessário, será feito preenchimento dos bytes restantes à direita com brancos (X'40'). Se o tamanho
for insuficiente, será feito truncamento à direita. O tamanho máximo é 256 bytes. Quando o caracter que se deseja
colocar como conteúdo inicial for um apóstrofe (') ou um E comercial (&), deve-se coloca-lo duas vezes. Ex:

DC 1CL1'*' 5C
DC 2CL1'*' 5C5C
DC CL1'*' 5C
DC CL2'*' 5C40
DC 2CL2'*' 5C405C40
DC C'ABC' C1C2C3
DC CL1'ABC' C1
DC C'A&&B' C150C2
DC C'ZE''S' E5C57DE2
DC C'''' 7D
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 41
41

DC tipo X

Pode-se especificar como conteúdo inicial os algarismos hexadecimais (de 0 a F). Cada algarismo ocupa meio
byte. O preenchimento é da direita para a esquerda. Se sobrarem bytes (ou meios-bytes) à esquerda, será feito
preenchimento com zeros binários (X'0"). Se o tamanho especificado for insuficiente, será feito truncamento à
esquerda. O tamanho máximo permitido é 256 bytes. Aceita múltiplas definições por constante. Ex:

DC 1XL1'0B' 0B
DC 3X'5C' 5C5C5C
DC XL3'5C' 00005C
DC XL2'AB0C14' 0C14
DC X'1A2' 01A2
DC X'00A,B,5A8' 000A0B05A8

DC tipo B

Pode-se especificar como conteúdo inicial somente os algarismos binários( 0 e 1). Cada algarismo ocupa um bit. O
preenchimento é feito da direita para a esquerda. Se sobrarem bits à esquerda, será feito preenchimento com zeros
binários. Se o tamanho especificado for insuficiente, será feito truncamento à esquerda. O tamanho máximo
permitido é 256 bytes. Aceita múltiplas definições por constante. Ex:

DC BL1'0' 00
DC BL2'010001001' 0089
DC B'0101' 05
DC BL2'1' 0001
DC 2B'1' 0101
DC B'1,00101,001' 010501

DC tipo F

O número desejado deve ser colocado em decimal. O montador irá converte-lo para binário e colocá-lo na Full-
Word. Se o sinal não for colocado, o número será assumido positivo. Se o sinal for colocado, ele deve ser único, e
deve vir antes do número. Se for colocado o atributo de tamanho, não será feito o alinhamento. Aceita múltiplas
definições por constante. Ex:

DC F'138' 0000008A
DC F'+138' 0000008A
DC F'-138' FFFFFF76
DC F'4,392' 0000000400000188

DC tipo H

Análoga ao tipo F, com a diferença de que o campo é uma Half-Word.

DC H'138' 008A
DC H'+138' 008A
DC H'-138' FF76
DC H'4,392' 00040188

DC tipo P
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 42
42
O sinal é indicado na parte numérica do último Byte à direita do campo. Se o número for positivo, ela terá C. Se o
número for negativo, terá D. O conteúdo inicial é colocado em decimal, e cada algarismo irá ocupar 1/2 byte; o
preenchimento é feito da direita para a esquerda. Se o tamanho não for especificado, será reservado um campo
com tamanho necessário e suficiente para conter o conteúdo inicial (mais, eventualmente, meio byte, para o caso
de a quantidade de algarismos especificada ser par). Se o tamanho especificado for maior que o necessário, será
feito preenchimento à esquerda com zeros (X'0'). Se for menor, será feito truncamento à esquerda. Aceita múltiplas
definições por constante. Ex:

DC P'122' 122C
DC P'10' 010C
DC P'-345,45,21.6,7' 345D045C216C7C
DC P'0' 0C
DC P'+66' 066C
DC PL3'1' 00001C
DC PL2'43556' 556C
DC 3P'1' 1C1C1C

DC tipo Z

O sinal é indicado na parte de zona do último Byte à direita do campo. Se o número for positivo, ela terá C. Se o
número for negativo, terá D. Se o número for negativo, terá D. O conteúdo inicial é colocado em decimal, e cada
algarismo irá ocupar 1 byte; o preenchimento é feito da direita para a esquerda. Se o tamanho não for especificado,
será reservado um campo com tamanho necessário e suficiente para conter o conteúdo inicial . Se o tamanho
especificado for maior que o necessário, será feito preenchimento à esquerda com zeros zonados (X'F0'). Se for
menor, será feito truncamento à esquerda. Aceita múltiplas definições por constante. Ex:

DC Z'122' F1F2C2
DC Z'-345,45' F3F4D5F4C5
DC Z'+66' F6C6
DC ZL3'1' F0F0C1
DC ZL2'43556' F5C6
DC 3Z'1' C1C1C1

DC tipo A

Se o tamanho for especificado, não será efetuado o alinhamento. O primeiro Byte à esquerda terá zeros binários; os
três Bytes restantes terão o endereço real correspondente à expressão colocada como conteúdo inicial da constante.

DC A(TABELA)
DC A(TABELA-50)
DC A(*)
DC A(259) 00000103
CAMPO DC 3A(*-CAMPO) 00000000.00000004.00000008
DC A(TCABC+28*52)
DC A(FIM-COMECO)

DC tipo Y

Se o tamanho for especificado, não será efetuado o alinhamento. Os dois Bytes da Half-Word terão o endereço real
correspondente à expressão colocada como conteúdo inicial da constante. Observar que o endereço máximo
representável através da constante tipo Y é X'FFFF'; este tipo de constante já quase não é mais utilizado, visto que
sua utilidade era em computadores de memória pequena.

DC Y(TABELA)
DC Y(TABELA-50)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 43
43
DC Y(*)
DC Y(259)
DC Y(TCABC+28*52)
DC Y(FIM-COMECO)

DC tipo S

Se o tamanho for especificado, não será efetuado o alinhamento. Os dois Bytes da Half-Word terão o endereço na
forma BASE+DESLOCAMENTO correspondente à expressão colocada como conteúdo inicial da constante.

DC S(TABELA)
DC S(TABELA-50)
DC S(*)
DC S(TCABC+28*52)

DC tipo V

Se o tamanho for especificado, não será efetuado o alinhamento. Esta constante é usada para reservar memória
para o endereço de um símbolo externo. A Full-Word será reservada com zeros binários, sendo que o endereço
será colocado quando da linkedição do programa.

DC V(ROTINA)

DC tipo Q

Esta constante é usada para reservar memória para o deslocamento numa área de memória de uma DSECT externa.
O deslocamento é colocado na constante durante a linkedição do programa. O símbolo especificado no conteúdo
inicial deve ter sido previamente definido como símbolo de um DXD ou DSECT. Exemplo:

DC Q(DUMMYEXT)

---------------------------------------------------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 44
44
REVISÃO - Agora que já vimos o comando DC, relembremos o conceito de LITERAL.
Supondo a instrução ZAP CONTLIN,ANULA
vemos que ela faz referência a dois operandos na memória. Supondo, ainda, que as definições dadas a esses
campos sejam as seguintes:

CONTLIN DC P'66'
ANULA DC P'0'

Através das literais, poderíamos elaborar o mesmo da seguinte forma:

ZAP CONTLIN,=P'0'
:
:
CONTLIN DC P'66'

Outros exemplos:

ZAP VALOR,=P'0'
MVC ARIMP,=CL133'b'
CLC ARLEIT+5(2),=C'DB'
AP TOTLIDOS,=P'1'
CLC =C'DB',ARLEIT+5
CP CONTLIN,=P'66'
CLC CODCART,=C'*'

É importante notar que uma literal pode ser especificada tanto no primeiro quanto no segundo operandos de uma
instrução. No entanto, ela não pode ser o campo receptor numa instrução que altere o conteúdo de um campo.

----------------------------------------------------------------------------
DS (Define Storage - Definir Memória)
----------------------------------------------------------------------------

A função do comando DS é definir uma área sem conteúdo inicial. O seu formato é análogo ao DC. Se for
especificado conteúdo inicial, ele não será considerado.

DS CL3
DS XL4
DS PL4'0'
DS 3CL8

O comando DS admite atributo de duplicação zero (0). Ex:

ARLEIT DS 0CL80
CODIGO DS CL10
DTEM DS CL8
NOME DS CL50
CIDADE DS CL12

Neste caso, o atributo de duplicação 0 não define a área, mas avisa que as próximas 80 posições definidas
formarão uma área de nome ARLEIT, ou seja, ARLEIT terá atributo de tamanho 80.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 45
45

3-2) Outras instruções ao montador

----------------------------------------------------------------------------
CCW ou CCW0 (Channel Command Word - Palavra de Comando de Canal)

O comando CCW (ou o CCW0) define uma CCW formato 0. O seu formato é:

símbolo CCW ou CCW0 a,b,c,d sendo:

a - Command Code (Código de Comando). Em geral especificado através de um termo auto-definido. É o código
que indica qual a operação de I/O que se deseja efetuar.

b - Expressão que indica o endereço da área (de entrada ou saída) que participará do I/O.

c - FLAGS - Indicadores a respeito do I/O. Em geral especificado através de um termo auto-definido.

d - Tamanho: Indica o número de Bytes que serão transmitidos. Em geral especificado através de um termo auto-
definido.
Ex:

CCW1 CCW X'02',ARLEIT,X'48',80

O primeiro operando dará o conteúdo do Byte 0 da CCW.

O segundo operando dará o conteúdo dos Bytes 1 a 3 da CCW.

O terceiro operando dará o conteúdo do Byte 4 da CCW. O byte 5 será sempre preenchido com zeros.
O quarto operando dará o conteúdo dos Bytes 6 e 7 da CCW.

O formato da CCW é o seguinte:

Byte 0 = Código de comando (COMMAND CODE)


Bytes 1, 2 e 3 = Endereço do buffer (DATA ADDRESS) ou da primeira IDAW
Byte 4 = Flags
Bit 32: 0 - Não haverá DATA CHAIN
1 - Haverá DATA CHAIN
Bit 33: 0 - Não haverá COMMAND CHAIN.
1 - Haverá COMMAND CHAIN
Bit 34: 0 - Erro de tamanho deve ser indicado
1 - A condição acima não deve ser indicada.
Bit 35: 0 - Haverá transferência de dados
1 - Não haverá transferência de dados
Bit 36: 0 - Não haverá interrupção intermediária
1 - Haverá interrupção intermediária
Bit 37: 0 - Data address normal
1 - Data address tem endereço da primeira IDAW
Bit 38: 0 - Execução normal da CCW
1 - Suspende antes da execução desta CCW
Bit 39: não usado; deve ser 0.
Byte 5 = não usado
Bytes 6 e 7 = Tamanho (quantidade de bytes a transferir)

----------------------------------------------------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 46
46

CCW1 (Channel Command Word - Palavra de Comando de Canal)

O comando CCW1 define uma CCW formato 1. O formato do comando CCW1 é este:

símbolo CCW1 a,b,c,d sendo:

a - Command Code
b - Data Address
c - FLAGS
d - Tamanho

Exemplo:

CCW1 CCW1 X'02',ARLEIT,X'48',80

O formato da CCW1 é o seguinte:

Byte 0 = Código de comando (COMMAND CODE)


Byte 1 = Flags
Bit 8 : 0 - Não haverá DATA CHAIN
1 - Haverá DATA CHAIN
Bit 9 : 0 - Não haverá COMMAND CHAIN.
1 - Haverá COMMAND CHAIN
Bit 10: 0 - Erro de tamanho deve ser indicado
1 - A condição acima não deve ser indicada.
Bit 11: 0 - Haverá transferência de dados
1 - Não haverá transferência de dados
Bit 12: 0 - Não haverá interrupção intermediária
1 - Haverá interrupção intermediária
Bit 13: 0 - Data address normal
1 - Data address tem endereço da primeira IDAW
Bit 14: 0 - Execução normal da CCW
1 - Suspende antes da execução desta CCW
Bit 15: não usado; deve ser 0
Bytes 2 e 3 = Tamanho (quantidade de bytes a transferir)
Bytes 4, 5, 6 e 7 = Endereço do buffer (DATA ADDRESS) ou da primeira IDAW
(obs: bit 32=0)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 47
47
----------------------------------------------------------------------------
START (Começo)

O comando START tem por função dar o conteúdo inicial do LOCATION COUNTER. Este comando deve ser
um dos primeiros do programa-fonte (antes dele não pode haver nenhum comando ou instrução que altere o
Location Counter). O seu formato é:

símbolo START a sendo:

Símbolo: O comando START tem por função também definir a primeira Control Section (CSECT) do programa.
Se for colocado o símbolo, ele será o nome da CSECT. Se ele não for colocado, a CSECT é considerada sem
nome.

a - Termo auto-definido (cujo valor deve ser múltiplo de 8) que indica o conteúdo inicial do Location Counter. Se
omitido, será assumido 0.
Ex:

PROG1 START X'305'


START 10240

OBS: - Se o comando START não for colocado, é assumido START 0.

----------------------------------------------------------------------------
CSECT (Control Section - Seção de Controle)

O comando CSECT identifica o início ou a continuação de uma Control Section.

símbolo CSECT

O comando CSECT não admite operandos.


Se o símbolo for colocado, ele dará nome à CSECT.
Os comandos e instruções que forem colocados após o comando CSECT farão parte dela, até que seja colocado um
outro comado CSECT ou DSECT.
Diversos comandos CSECT com o mesmo símbolo podem aparecer num programa. O primeiro dará o nome à
CSECT e os outros identificarão sua continuação.

A CSECT CSECT A = 1 + 4
. 1 CSECT B = 2
. CSECT C = 3 + 5
B CSECT
. 2
.
C CSECT
. 3
.
A CSECT
. 4
.
C CSECT
. 5

END

----------------------------------------------------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 48
48

DSECT (Dummy Section - Seção Simulada)

O comando DSECT define uma Control Section que é montada, mas que não fará parte do programa-objeto. Uma
DSECT serve, por exemplo, para se descrever o lay-out de uma área, sem que para isso seja preciso definí-la. O
seu formato é:

símbolo DSECT

O comando DSECT não admite operandos. O símbolo dará nome à DSECT. Pode haver diversos comandos
DSECT com o mesmo símbolo num programa. O primeiro dará nome à DSECT e os seguintes identificarão a sua
continuação.

A interrupção de uma DSECT é feita através de outro comando DSECT com símbolo diferente, ou de comando
CSECT. Ex:

CSN1 START
.
.
DSN1 DSECT
A DS CL2
B DS CL20
C DS
D DS CL10
CSN1 CSECT
.
.
END

Para usar como operandos de instruções os símbolos definidos dentro de DSECT's, o programador deve, antes
desse uso, providenciar o comando USING que indicará o(s) registrador(es) base das DSECT's.

----------------------------------------------------------------------------
DXD (Define External Dummy Section - Definir Dummy Section Externa)

O comando DXD define uma Dummy Section Externa. O seu formato é o seguinte:

símbolo DXD operando

O símbolo deve aparecer no operando de uma constante tipo Q. Ele representa o endereço do primeiro Byte da
DSECT externa definida, e tem atributo de tamanho igual a 1.

O operando tem o mesmo formato que o operando do comando DS. O montador Assembler calcula a quantidade
de memória e o alinhamento requerido para uma DSECT externa, a partir da área especificada no operando.
Exemplo:

CONST DXD 5F
.
.
DESLOC DC Q(CONST)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 49
49
----------------------------------------------------------------------------
CXD

O comando CXD define uma Full-Word. O Linkage Editor (ou o Loader) colocará nessa área o tamanho total de
todas as DSECT's externas especificadas nos programas-fonte que usam essas DSECT's. O seu formato é o
seguinte:

símbolo CXD

Este comando não tem operandos. Ex:

TAMANHO CXD

----------------------------------------------------------------------------
COM (Blank Common Control Section - Seção de Controle Branca Comum)

Este comando identifica e reserva uma área de memória comum que pode ser referida por módulos independentes
que tenham sido linkeditados e carregados para execução como um só programa.
Somente uma COM é permitida por programa, embora vários comandos COM possam ser dados, o primeiro
definindo o início da COM, e os seguintes definindo a sua continuação. O seu formato é:

COM

Não se deve colocar nem símbolo nem operandos. Ex:

CSPRG START 0
.
.
COM
A DS CL3
B DS CL4
.
.
END
----------------------------------------------------------------------------
LOCTR (Multiple Location Counters - Múltiplos Contadores de localização)

Este comando ao montador permite o uso de diversos location counters dentro de uma Control Section. Seu
formato é:

simbolo LOCTR

O primeiro Location Counter de uma Control Section é definido quando de um comando START, CSECT,
DSECT ou COM. Dentro de uma dessas seções, o comando LOCTR define outro location counter; é como se
houvesse um location counter para cada símbolo especificado através do START, CSECT, DSECT, COM e de
cada LOCTR. Um LOCTR cujo símbolo já tenha sido especificado em outro comando START, DSECT, CSECT,
COM ou LOCTR continua a geração do objeto usando o endereço do location counter respectivo; no final, o
objeto da seção será um único, com os "pedaços" arranjados. Exemplo:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 50
50
PROGRAMA OBJETO GERADO

PGM1A PGM1 CSECT PGM1A (loc. counter PGM1)


PGM1A . PGM1C (loc. counter PGM1)
PGM1A . PGM1E (loc. counter PGM1)
PGM1A . PGM1G (loc. counter PGM1)
PGM1B X LOCTR PGM1B (loc. counter X)
PGM1B AREA1 DS CL80 PGM1F (loc. counter X)
PGM1B AREA2 DS CL4 PGM1D (loc. counter Y)
PGM1C PGM1 LOCTR
PGM1C .
PGM1C .
PGM1C .
PGM1D Y LOCTR
PGM1D TAB1 DS CL10000
PGM1D TAB2 DS CL20000
PGM1E PGM1 LOCTR
PGM1E .
PGM1E .
PGM1E .
PGM1F X LOCTR
PGM1F AREA11 DC C'*'
PGM1F AREA12 DC F'0'
PGM1G PGM1 LOCTR
PGM1G LTORG
END

Se dentro de uma seção for usado um LOCTR cujo símbolo é o de um outro que esteja em outra seção, esta outra
seção é continuada com o location counter em questão.

----------------------------------------------------------------------------
AMODE (Adressing Mode - Modo de endereçamento)

Este comando é utilizado para especificar ao montador Assembler o modo de endereçamento a ser associado a uma
Control Section. O seu formato é:

símbolo AMODE n

n podendo ser 24 ou 31 ou ANY.

O símbolo é opcional. Se ele estiver ausente, o modo de endereçamento será associado à Control Section sem
nome que deve existir no programa.
Se o símbolo estiver presente, o modo de endereçamento será associado à Control Section que tiver nome igual ao
especificado no símbolo.
O operando indica qual modo de endereçamento deve ser associado à Control Section; pode ser 24 (endereçamento
de 24 bits), 31 (endereçamento de 31 bits) ou ANY (a Control Section não é sensível ao modo de endereçamento).
Não pode haver dois ou mais AMODE para uma mesma Control Section.
O comando AMODE pode estar em qualquer lugar do programa.
AMODE 24 é incompatível com RMODE ANY.
Os defaults para AMODE e RMODE quando só um deles (ou nenhum) é especificado são os seguintes:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 51
51

Especificado Assumido

nenhum AMODE 24 e RMODE 24


AMODE 24 RMODE 24
AMODE 31 RMODE 24
AMODE ANY RMODE 24
RMODE 24 AMODE 24
RMODE ANY AMODE 31

----------------------------------------------------------------------------
RMODE (Residence Mode - Modo de residência)

Este comando é utilizado para especificar ao montador Assembler o modo de residência a ser associado a uma
Control Section. O seu formato é:

símbolo RMODE n

n podendo ser 24 ou ANY.

O símbolo é opcional. Se ele estiver ausente, o modo de residência será associado à Control Section sem nome que
deve existir no programa.
Se o símbolo estiver presente, o modo de residência será associado à Control Section que tiver nome igual ao
especificado no símbolo.
O operando indica qual modo de residência deve ser associado à Control Section; pode ser 24 (residência de 24
bits, isto é, a CSECT deve ficar abaixo dos 16 MB) ou ANY (residência de 24 ou de 31 bits, isto é, a CSECT pode
ficar tanto abaixo quanto acima dos 16 MB).
Não pode haver dois ou mais AMODE para uma mesma Control Section.
O comando AMODE pode estar em qualquer lugar do programa.
AMODE 24 é incompatível com RMODE ANY.
Os defaults para AMODE e RMODE quando só um deles (ou nenhum) é especificado são os seguintes:

Especificado Assumido

nenhum AMODE 24 e RMODE 24


AMODE 24 RMODE 24
AMODE 31 RMODE 24
AMODE ANY RMODE 24
RMODE 24 AMODE 24
RMODE ANY AMODE 31
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 52
52
----------------------------------------------------------------------------
ENTRY (Entrada)

Este comando identifica símbolos definidos no programa que contém o ENTRY, e que serão usados por outros
programas. O seu formato é:

ENTRY símbolo(,símbolo...)

No programa que usa o símbolo, ele deve ser definido através de um comando EXTRN.

----------------------------------------------------------------------------
EXTRN (External - Externo)

Este comando permite identificar símbolos referidos num programa, mas definidos em outro programa. Seu
formato é o seguinte:

EXTRN símbolo(,símbolo...)

No programa que define o símbolo, deve haver um comando ENTRY para ele.

PROG1 START 0 PROG2 START 0


. .
. .
ROTINA EQU * CONST DC A(ROTINA)
. .
. .
ENTRY ROTINA EXTRN ROTINA
END END

----------------------------------------------------------------------------
WXTRN

Este comando é análogo ao EXTRN, com as seguintes diferenças:


- com o comando EXTRN, o Linkage Editor faz uma pesquisa automática nas bibliotecas para achar o módulo que
contém os símbolos especificados como operandos no comando EXTRN.
- com o comando WXTRN não é feita essa pesquisa automática. O Linkage Editor somente resolverá as
referências feitas através do comando WXTRN se os símbolos especificados nele estão definidos:
-- num módulo que é linkeditado e carregado junto com o programa que tem o comando WXTRN ou
-- num módulo trazido de uma biblioteca devido à presença de um comando EXTRN em outro módulo
linkeditado e carregado junto com o programa que tem o comando WXTRN.

Seu formato é o seguinte:

WXTRN símbolo(,símbolo ....... )


Ex:

WXTRN MOD
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 53
53
----------------------------------------------------------------------------
USING (Usando)

O comando USING informa ao montador:

A) Qual é (ou quais são) o(s) registrador(es) base do programa (através do segundo operando em diante)

B) Qual o conteúdo do(s) registrador(es) base (através do primeiro operando).

O seu formato é o seguinte:

USING x,R1(,R2,R3 .......R16)

Sendo x uma expressão que indica ao montador o conteúdo do primeiro registrador base especificado (R1). Para
o segundo registrador base, se especificado, será assumido conteúdo igual a V+4096. Para o terceiro, será
assumido V+8192, e assim por diante.
Ex:

USING *,3,8

Neste exemplo, os registradores base serão o 3 (que deverá ter o endereço contido no Location Counter) e o 8 (que
deverá ter o endereço contido no Location Counter + 4096).

Observar que o comando USING apenas avisa o montador qual deverá ser o conteúdo do registrador base quando
o programa for executado. Cabe ao programador providenciar a carga do registrador base (em geral via instrução
BALR).

Observar também que, no caso de DSECT's, o comando USING deve especificar como primeiro operando o nome
que foi dado à DSECT.

----------------------------------------------------------------------------
DROP (Por de lado, Deixar)

Este comando tem por função indicar ao montador que um (ou mais) registrador que anteriormente havia sido
especificado como base (através de um comando USING), não deve mais ser base. O seu formato é o seguinte:

DROP (R1(,R2,R3 ..........R16))

Sendo que R1 .........R16 é a relação dos registradores que não devem mais ser base. Ex:

DROP 3,8

Se não for especificado nenhum operando, todos os registradores base serão desassinalados.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 54
54
----------------------------------------------------------------------------
TITLE (Título)

O comando TITLE especifica qual o cabeçalho que deve ser colocado pelo montador Assembler na listagem do
programa-fonte que ele fornece. O seu formato é o seguinte:

(símbolo) TITLE a

Símbolo --- em VSE pode ter de 1 a 4 caracteres. Do primeiro comando TITLE que tiver o programa, o montador
Assembler pegará o símbolo e o colocará em todos os statements do programa-objeto, nas posições 73 a 76,
identificando-o, portanto.

a -- conjunto de 1 ate 100 caracteres colocados entre apóstrofes. Quando o caracter que se desejar colocar no
cabeçalho for um apóstrofe (') ou um E comercial (&), então deve-se colocá-lo duas vezes.
Ex:

P001 TITLE 'EMISSAO NOTAS FISCAIS'

A cada comando TITLE que for colocado, o montador Assembler providenciará um salto para outra folha na
listagem que ele faz dos statements-fonte, imprimindo, a partir dessa hora, o novo cabeçalho especificado.

----------------------------------------------------------------------------
EJECT (Ejetar)

O comando EJECT causa um salto para a folha seguinte, na hora em que ele for detectado, na listagem dos
statements-fonte que o montador Assembler fornece. O seu formato é o seguinte:

EJECT

Este comando não deve ter símbolo nem operandos.

----------------------------------------------------------------------------
SPACE (Espaço)

O comando SPACE, quando detectado pelo montador Assembler, faz com que o montador, na listagem que ele
fornece, deixe tantas linhas em branco quantas forem especificadas no operando do SPACE.

O seu formato é:

SPACE n

Sendo que n é um número decimal que indica quantas linhas devem ser deixadas em branco. Ex:

SPACE 3
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 55
55
----------------------------------------------------------------------------
PRINT (Impressão)

O comando PRINT é utilizado para controlar a listagem fornecida pelo montador. O seu formato é o seguinte:

PRINT opções

Sendo que as opções são palavras colocadas uma após a outra, separadas por vírgulas, que indicam ao montador o
que deve ou não ser listado. As palavras válidas são as seguintes:

ON - A listagem é fornecida
OFF - A listagem não é fornecida
GEN - As instruções geradas por macro-instruções
devem ser listadas.
NOGEN - As instruções geradas por macro-instruções não
devem ser listadas.
DATA - As áreas definidas terão todo o seu conteúdo
listado.
NODATA - As áreas definidas terão somente os 8
primeiros Bytes seus listados.
Ex:

PRINT OFF,DATA

Enquanto não for colocado um comando PRINT no programa, será assumido

PRINT ON,GEN,NODATA

Pode haver tantos comandos PRINT no programa quantos se desejar.

----------------------------------------------------------------------------
ICTL (Input Control - Controle de Entrada)

Pelo que foi visto quando do estudo da folha de codificação Assembler, pudemos deduzir o seguinte:

--- O símbolo deve começar na posição 1


--- Numa instrução, podemos ir até a posição 71
--- A continuação, quando existir, deve começar na posição 16

O comando ICTL, se usado, deve ser o primeiro statement do programa-fonte (só pode haver um ICTL num
programa), e a sua função é modificar a estrutura explicada acima. O seu formato pode ser um dos 3 seguintes:

ICTL A ou
ICTL A,B ou
ICTL A,B,C

Sendo:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 56
56
A - indica a posição onde começar um símbolo. Pode ser de 1 até 40.
B - indica a última posição até onde pode ir uma instrução. Pode ir de 41 a 80. Se omitido, assume-se 71. Deve ser
maior ou igual a A+5.
C - indica qual a posição de continuação. Pode ser de 2 a 40. Se ele for omitido ou se for colocado 80 no segundo
operando, o Assembler assume que não é permitida continuação.

Ex:

ICTL 4,70,71

----------------------------------------------------------------------------
ISEQ (Input Sequence - Sequência de Entrada)

A função deste comando é indicar ao montador Assembler que se deseja que ele teste a sequência (crescente) dos
statements-fonte. O seu formato é o seguinte:

ISEQ (a,b)

Sendo:

a - número da primeira posição que forma o campo dos statements, campo esse a partir do qual deve ser testada a
sequência.
b - número da última posição do campo.

OBS:- A <= B

Pode-se colocar quantos ISEQ forem necessários num programa. Se os seus dois operandos forem omitidos, não
será testada a sequência.

----------------------------------------------------------------------------
PUNCH (Perfure)

O comando PUNCH tem por função ordenar ao montador Assembler a gravação imediata de um statement no
programa-objeto. O seu formato é:

PUNCH a

Sendo a um conjunto de 1 a 80 caracteres colocados entre apóstrofes. Se o caracter desejado for um apóstrofe (')
ou um E comercial (&), ele deve ser colocado duas vezes. Ex:

PUNCH ' CATALR MOD'

Neste caso, o statement teria:


pos 1 a 2 : brancos
pos 3 a 8 : CATALR
pos 9 a 10 : brancos
pos 11 a 13 : MOD
pos 14 a 80 : brancos
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 57
57
----------------------------------------------------------------------------
REPRO (Reproduza)

O comando REPRO indica ao montador Assembler que ele deve gravar no programa-objeto um statement igual ao
seguinte ao REPRO.

Este comando não deve ter nem símbolo e nem operando.


Ex:

REPRO
CATALR MOD

----------------------------------------------------------------------------
ORG

O comando ORG tem por função alterar o conteúdo do Location Counter, colocando nele o valor da expressão
especificada como operando do ORG. O seu formato é o seguinte:

símbolo ORG expressão

Se não for colocado o seu operando, será colocado no Location Counter o maior conteúdo que ele já teve. Ex:

. . .
. . .
. . .
. . .
0AB84C 0AB94C TABNUM DC 256X'FF'
0AB94C 0AB93C ORG TABNUM+240
0AB93C 0AB946 DC 10X'00'
0AB946 0AB94C ORG
. . .

Location Counter após o comando


Location Counter antes do comando

OBS:- os símbolos usados como operandos do ORG devem ter sido definidos antes do ORG.

----------------------------------------------------------------------------
EQU (Equate - Igualar)

A função do comando EQU é associar um símbolo a um endereço, que é fornecido através do operando do EQU.
O seu formato é um dos seguintes:

Símbolo EQU a
Símbolo EQU a,b
Símbolo EQU a,b,c
Símbolo EQU a,,c
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 58
58
Sendo:

a - expressão cujo valor seja o endereço a ser associado ao símbolo.


b - termo auto-definido que indica o atributo de tamanho desejado para o símbolo.
c - termo auto-definido que indica o atributo de tipo que se deseja para o símbolo que se está definindo. Se omitido
é assumido U.

Se B for omitido, o Assembler vai assumir um atributo de tamanho de acordo com o atributo de tamanho do
primeiro termo (ou único) da esquerda da expressão A:

--- Se ele for uma referência ao Location Counter (*), um termo auto-definido ou uma referência a um atributo de
tamanho (L'x), então o atributo de tamanho assumido será 1 (um).

--- Se ele for um símbolo usado como símbolo de um comando DC ou DS, o atributo de tamanho assumido será
igual ao atributo de tamanho do símbolo

--- Se ele for um símbolo usado como símbolo de uma instrução de máquina, o atributo de tamanho assumido será
igual ao tamanho da instrução (2,4 ou 6 Bytes)

--- Se ele for um símbolo usado como símbolo de um comando ao montador (exceto DC, DS e CCW) o atributo de
tamanho assumido será 1.

Ex:

R5 EQU 5
INST EQU *
OFF EQU X'00'
ON EQU X'FF'
PAGOU EQU X'80'
----------------------------------------------------------------------------
OPSYN (Operation Code Synonim - Sinônimo para código de operação)

O comando OPSYN faz uma equivalência entre um símbolo e um código de operação de uma instrução de
máquina ou comando ao montador. O seu formato é:

Símbolo OPSYN (código)

Sendo:

Símbolo - qualquer símbolo válido em Assembler ou um código de operação (se o operando não for especificado).

Código - qualquer código de operação válido. Se não for especificado, o comando anula o código de operação
colocado como símbolo.

O comando OPSYN deve ser colocado depois do ICTL (se houver ICTL) e pode ser precedido somente por
EJECT, ISEQ, PRINT, SPACE e TITLE. Exemplo:

MOVER OPSYN MVC


MVC OPSYN
----------------------------------------------------------------------------

PUSH (Empurrar)

O comando PUSH salva o estado atual de PRINT e USING. Pode-se colocá-lo num dos 4 formatos:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 59
59

PUSH PRINT
PUSH USING
PUSH PRINT,USING
PUSH USING,PRINT

----------------------------------------------------------------------------
POP

O comando POP restaura o estado de PRINT e USING salvos pelo comando PUSH. Pode-se colocá-lo num dos 4
formatos:

POP PRINT
POP USING
POP PRINT,USING
POP USING,PRINT

----------------------------------------------------------------------------
LTORG

O comando LTORG faz a definição das literais usadas no programa. Antes da definição, ele alinha o Location
Counter para o endereço mais próximo múltiplo de 8. Este comando não tem símbolo nem operandos. Ex:

LTORG

----------------------------------------------------------------------------
CNOP (Conditional Nop - Nop Condicional)

O comando CNOP alinha o Location Counter para uma Half-Word. Os bytes "desprezados" são preenchidos
comX'0700' (instrução NOPR). O seu formato é:

CNOP a,b
Sendo:
a - Pode ser 0, 2, 4 ou 6. Indica em qual Byte da Full-Word ou da Double-Word deve ser posicionado o Location
Counter.
b - Pode ser 4 ou 8. Indica se o campo deve ser uma Full-Word ou Double-Word.

0,8 2,4 0,4 2,4


0,4 2,8 4,8 6,8
.....half-word... .....half-word... .....half-word... .....half-word...
...............full-word........... ...............full-word...........
...............................double-word.............................

Ex:

CNOP 2,4
----------------------------------------------------------------------------

COPY (Copiar)

O comando COPY copia comandos Assembler de uma biblioteca. O seu formato é o seguinte:

COPY símbolo
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 60
60

Sendo símbolo o nome com que o conjunto de comandos se encontra catalogado na biblioteca.

Dentro dos comandos não pode haver nem ICTL nem ISEQ. Ex:

COPY EQUREG

----------------------------------------------------------------------------
END (Fim)

O comando END deve ser o último statement de um programa fonte. O seu formato é:

END Símbolo

Sendo símbolo o símbolo dado à primeira instrução do programa a ser executado. Ex:

END INICIO

----------------------------------------------------------------------------

EXERCÍCIOS PROPOSTOS
Indicar o conteúdo dos campos definidos através dos comandos ao montador colocados a seguir.
No caso de não ser possível (erro de montagem), indicar esta condição.

EP195: DC C'123'

EP196: DC C'+123'

EP197: DC C'-123'

EP198: DC C'12.3'

EP199: DC C'1AB8'

EP200: DC C'01101'

EP201: DC C'A+B=C'

EP202: DC CL4'A'

EP203: DC CL4'ABCDEF'

EP204: DC 3CL2'A'

EP205: DC 2CL3'A,B'

EP206: DC 2C'EU&&VOCE'

EP207: DC C'''S MUSIC'

EP208: DC C'@@OI'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 61
61

EP209: DC CL3'*'

EP210: DC 3C'*'

EP211: DC X'123'

EP212: DC X'-123'

EP213: DC X'1AB2C3'

EP214: DC X'1AB2F4G3'

EP215: DC XL3'12D'

EP216: DC XL3'AABBCCDDEE'

EP217: DC X'1,22,333,4444'

EP218: DC XL2'1,22,333,4444'

EP219: DC 2X'1,22,333'

EP220: DC 2XL2'1,22,333'

EP221: DC B'01010101'

EP222: DC B'1'

EP223: DC BL2'1111'

EP224: DC B'1,1111111111'

EP225: DC BL2'1,1111111111'

EP226: DC 2B'1000'

EP227: DC 2BL2'1000'

EP228: DC F'10'

EP229: DC F'+10'

EP230: DC F'-10'

EP230: DC F'-15,+16'

EP231: DC 2F'22'

EP232: DC 2F'33,44'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 62
62
EP233: DC FL3'258'

EP234: DC 2FL1'255'

EP235: DC F'128000'

EP236: DC H'10'

EP237: DC H'+10'

EP238: DC H'-10'

EP239: DC H'-15,+16'

EP240: DC 2H'22'

EP241: DC 2H'33,44'

EP242: DC HL3'258'

EP243: DC 2HL1'255'

EP244: DC H'128000'

EP245: DC P'123'

EP246: DC P'+123'

EP247: DC P'-123'

EP248: DC PL4'456'

EP249: DC PL1'789'

EP250: DC P'1,-22,333,-4444'

EP251: DC PL2'1,-22,333,-4444'

EP252: DC 3P'0'

EP253: DC PL3'0'

EP254: DC 2P'1,22,333'

EP255: DC 2PL2'1,22,333'

EP256: DC Z'123'

EP257: DC Z'+123'

EP258: DC Z'-123'

EP259: DC ZL4'456'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 63
63

EP260: DC ZL1'789'

EP261: DC Z'1,-22,333,-4444'

EP262: DC ZL3'1,-22,333,-4444'

EP263: DC 3Z'0'

EP264: DC ZL3'0'

EP265: DC 2Z'1,22,333'

EP266: DC 2ZL3'1,22,333'

OBS: para as constantes tipo A, Y e S a seguir, considerar que, a partir da primeira, elas façam parte de um
programa, cujo endereço inicial é zero; as áreas definidas por DS devem ser consideradas para efeito do cálculo
do endereço. Considerar que o primeiro statement do programa seja um USING *,9.

EP267: SIMBOLO1 DC A(0)

EP268: SIMBAA DC A(127)

EP269: SIMBBB DC A(X'8000')

EP270: SIMBCC DC A(B'1111')

EP271: SIMBDD DC A(C'*')

EP272: SIMBEE DC A(*)

EP273: SIMBFF DS CL17

EP274: SIMBGG DC A(*)

EP275: SIMBHH DC A(SIMBGG)

EP276: SIMBII DC A(SIMBAA+12)

EP277: SIMBJJ DC A(SIMBII-SIMBBB)

EP278: SIMBKK DC AL1(*-SIMBKK)

EP279: SIMBLL DC 5AL1(*-SIMBLL)

EP280: SIMBMM DC AL2(3,5,7)

EP281: SIMBNN DC A(SIMBII+5*2)

EP282: SIMBOO DC A(SIMBNN+X'80000000')

EP283: SIMBPP DC 4AL2(*-SIMBPP)


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 64
64
EP284: SIMBQQ DC A(SIMBVV)

EP285: SIMBRR DC A(SIMBKK,SIMBJJ)

EP286: SIMBSS DC A(SIMBTT+40)

EP287: SIMBTT DC A(SIMBUU,*,80)

EP288: SIMBUU DC 2A(*-SIMBUU)

EP289: SIMBVV DC A(C'AMO')

EP290: SIMBWW DC A(X'7FFFFFFF')

EP291: YY1 DC Y(SIMBWW)

EP292: YY2 DC Y(10)

EP293: YY3 DC Y(L'YY2)

EP294: SS1 DC S(SIBAA)

EP295: SS2 DC S(SS1)

EP296: SS3 DC S(10)

EP297: SS4 DC S(*)

EP298: SS5 DC A(125),F'33',C'*',2H'6,18'

EP299: SS6 DC X'1,1',B'1,1',C'1,1'

EP300: LASTDC DC 256AL1(255+LASTDC-*)


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 65
65

4) INSTRUÇÕES DE MÁQUINA

Didaticamente, dividiremos as instruções de máquina por função (somente as que serão objeto de nosso estudo - ,
não veremos as privilegiadas e as de ponto flutuante). Os grupos, segundo as funções executadas, são os seguintes:

a) Movimento de Dados de Memória para Memória

Movimentação simples : MVC, MVN, MVZ, MVI, MVO, MVCIN, ZAP, MVCL
Movimentação com mudança de formato dos dados : PACK, UNPK

b) Operações aritméticas com campos de memória em compactado :


AP, SP, MP, DP, SRP

c) Comparação
Memória com memória : CP, CLC, CLI, CLCL
Registrador com memória : C, CH, CL, CLM
Registrador com registrador : CR, CLR

d) Desvio
Mnemônicos normais : BC, BCR
Mnemônicos B, BR, NOP, NOPR, BE, BER, BL, BLR, BH, BHR, BO, BOR
estendidos : BZ, BZR, BM, BMR, BP, BPR, BNE, BNER, BNL, BNLR, BNH, BNHR
BNO, BNOR, BNZ, BNZR, BNM, BNMR, BNP, BNPR

e) Controle de Loop : BCT, BCTR, BXH, BXLE

f) Edição : ED, EDMK

g) Tradução e teste de bytes : TR, TRT

h) Shift (deslocamento) em registradores : SLL, SRL, SLDL, SRDL


SLA, SRA, SLDA, SRDA

i) Booleanas : N, O, X, NR, OR, XR, NI, OI, XI, NC, OC, XC

j) Carga e Desvio : BALR, BAL, BASR, BAS, BASSM, BSM

k) Movimento de Dados de Registrador para Memória


Movimentação simples : ST, STH, STM, STC, STCM
Movimentação com mudança de formato dos dados : CVD

l) Movimento de dados de Memória para Registrador : L, LH, LM, IC, ICM


Movimentação com mudança de formato dos dados : CVB

m) Movimento de Dados de Registrador p/ Registrador : LR, LPR, LNR, LCR, LTR

n) Operações aritméticas com registradores (dados em binário) :


AR, SH, MR, DR, ALR, SLR

o) Operações Aritméticas com Registradores e Memória (dados em binário):


A, S, M, D, AH, SH, MH, AL, SL

p) Outras : LA, TM, EX, SVC, MC, SPM, STCK, TS, CD, CDS, IPM
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 66
66
Algumas observações que são importantes:

1 - As instruções SS-L, que tem, portanto, um único tamanho, são:


MVN, MVC, MVZ, NC, CLC, OC, XC, TR, TRT, ED, EDMK, MVCIN

2 - As instruções SS-L1/L2, que tem, portanto, dois tamanhos, são:


MVO, PACK, UNPK, ZAP, CP, AP, SP, MP, DP

3 - A instrução SRP é excessão no grupo das SS, à medida que faz referência a um tamanho (em metade do seu
segundo byte), e a um arredondamento (na outra metade desse segundo byte).

4 - As instruções, em geral, quando algum operando é afetado, alteram o primeiro operando. As exceções são:
CVD, STC, ST, STH, STCM, STM

5 - As instruções de ponto flutuante tem códigos de operação desde X'20' até X'3F' e desde X'60' até X'7F'.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 67
67

4-1) INSTRUÇÕES DE MOVIMENTO DE MEMÓRIA PARA MEMÓRIA

MVC (Move Character - Movimentar Caracteres)


Código de máquina D2 (Instrução SS - L)
Condition code não é alterado
Interrupções Possíveis 0004,0005

A instrução MVC move um campo de memória para outro campo de memória, byte a byte, da esquerda para a
direita. Ex:

MVC CPOA,CPOB

antes depois

CPOB C1 . C2 . C3 C1 . C2 . C3
CPOA C4 . C5 . C6 C1 . C2 . C3

O campo emissor é o segundo operando, e permanece inalterado após a execução da instrução. O campo receptor é
o primeiro operando.
Ambos devem ter o mesmo tamanho.

MVC ARGRAV+5(2),ARLEIT+2
MVC ARGRAV,ARLEIT
MVC ARIMP,=CL133'b'
MVC ARIMP(1),=C'b'
MVC ARIMP+1(132),ARIMP
MVC 0(2,5),8(13)
MVC ARCOMP,7(15)
MVC 138(7,5),VALOR

MVZ (Move Zones - Movimentar Zonas)


Código de máquina D3 (Instrução SS - L)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

A instrução MVZ é análoga à MVC, com a diferença de que ela move somente a parte de zona dos bytes. Ex:

MVZ CPOA,CPOB

antes depois
CPOB 12 . 34 . 56 12 . 34 . 56
CPOA 78 . 9A . BC 18 . 3A . 5C

MVZ ARIMP+58(1),=X'F0'
MVZ ARAUX+1(19),ARAUX
MVZ INST+1(1),0(7)
MVZ 5(2,7),AUX
MVZ 29(3,8),1(9)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 68
68

MVN (Move Numerics - Movimentar Numéricos)


Código de máquina D1 (Instrução SS - L)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

A instrução MVN é análoga à MVC, com a diferença de que ela move somente a parte numérica dos bytes. Ex:

MVN CPOA,CPOB

antes depois
CPOB 12 . 34 . 56 12 . 34 . 56
CPOA 78 . 9A . BC 72 . 94 . B6

MVN TOTAL+5(1),=X'0C'
MVN ARAUX+1(19),ARAUX
MVN INST+1(10),0(7)
MVN 5(2,7),AUX
MVN 29(3,8),1(9)

MVI (Move Immediate - Movimentar Imediato)


Código de máquina 92 (Instrução SI)
Condition code não é alterado
Interrupções Possíveis 0004,0005

A instrução MVI movimenta um byte de memória (o 2. byte da instrução - o operando imediato) para outro byte
de memória. O 2º operando é o campo emissor (operando imediato) e o 1º operando é o campo receptor.

O operando imediato pode ser especificado somente através de um termo auto-definido. Ex:

MVI CPOA,C'*' ou
MVI CPOA,X'5C' ou
MVI CPOA,B'01011100' ou
MVI CPOA,92

antes depois
operando Imediato 5C 5C
CPOA 12 5C

MVI ARIMP+72,C'/'
MVI 0(4),X'80'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 69
69

MVO (Move with Offset – Movimetar com deslocamento)


Código de máquina F1 (Instrução SS – L1 e L2)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

A instrução MVO move o campo especificado no 2ºoperando para o campo especificado no 1º operando da direita
para a esquerda, da seguinte forma:

A parte numérica do último byte à direita do 1º operando permanece inalterada. A parte numérica do último byte à
direita do 2º operando é colocada na parte de zona do último byte à direita do 1º operando; e assim por diante.

Se o 1º operando (campo receptor) não for suficientemente grande para receber todo o 2º operando (campo
emissor) os meios-bytes à esquerda serão truncados.

Se o 1º operando for maior que o suficiente para conter o 2º operando, a instrução preencherá com 0's à esquerda.
Ex:

MVO CPOA,CPOB

Antes Depois

1º Caso
CPOB 12 . 34 . 56 12 . 34 . 56
CPOA 78 . 9A 45 . 6A

2º Caso
CPOB AB . 72 AB . 72
CPOA 4A . 5C . B9 . FC 00 . 0A . B7 . 2C

Outros exemplos:

MVO ARCALC(5),ARCALC(4)
MVO 0(4,7),ARCALC
MVO AREA,2(5,8)
MVO 2(7,13),19(5,15)

ZAP (Zero and Add Packed – Zerar e Somar em Compactado)


Código de máquina F8 (Instrução SS – L1 e L2)
Condition code 00 Se o campo movido = 0
01 Se o campo movido < 0
10 Se o campo movido > 0
11 Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A

A instrução ZAP movimenta o campo especificado no 2º operando (campo emissor) para o campo especificado no
1º operando (campo receptor). O emissor permanece inalterado, e deve estar obrigatoriamente em compactado.

A movimentação é feita da direita para a esquerda.

Se o emissor for maior (em tamanho) que o receptor, os algarismos em excesso à esquerda serão truncados.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 70
70
Se o emissor for menor (em tamanho) que o receptor, o ZAP preencherá à esquerda com zeros. Ex:

ZAP CPOA,CPOB

Antes Depois

1º Caso
CPOB 12 . 34 . 5C 12 . 34 . 5C
CPOA B4 . F8 34 . 5C

2º Caso
CPOB 12 . 3C 12 . 3C
CPOA 07 . B8 . 92 00 . 12 . 3C

Outros exemplos:

ZAP TOTAL,=P'0'
ZAP TOTAL,TOTAL
ZAP CONTLIN,=P'2'

MVCL (Move Long – Mover [campo] Longo)


Código de máquina 0E (Instrução RR)
Condition code 00 Tamanhos do 1. e 2º operandos são iguais
01 Tamanho do 1º operando é menor
10 Tamanho do 1º operando é maior
11 Movimento não efetuado
Interrupções Possíveis 0004,0005,0006

Tanto o 1º como o 2º operandos especificados devem ser registradores pares, os quais indicam (cada um deles)
conjuntos de registradores par-ímpar, os quais chamaremos de R1 e R1+1 e R2 e R2+1.

Esta instrução movimenta um campo de memória para outro campo de memória, byte a byte, da esquerda para a
direita.

O endereço do campo receptor deve estar nos 3 últimos bytes à direita de R1.

O endereço do campo emissor deve estar nos 3 últimos bytes à direita de R2.

O tamanho (número de bytes) do campo receptor deve estar nos 3 últimos bytes à direita de R1+1.

O tamanho (número de bytes) do campo emissor deve estar nos 3 últimos bytes à direita de R2+1.

O 1. byte à esquerda de R2+1 deve conter o caracter de preenchimento.

O conteúdo do 1. byte à esquerda de R1, R2 e R1+1 é desprezado.

A movimentação de um campo para outro termina quando for completado o tamanho do campo receptor.
Se o campo emissor for menor que o campo receptor, os bytes à direita que sobrarem do campo receptor serão
preenchidos com o caracter de preenchimento.

Como parte da execução da instrução, os tamanhos dos dois campos são comparados, e o resultado é indicado pelo
condition code.

Além disso, é feito um teste para verificar se haverá ou não sobreposição destrutiva dos campos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 71
71
Dá-se o nome de sobreposição destrutiva ao fato de o campo receptor ser usado como emissor depois que algum
dado seja movido sobre ele.
(Lembrar que o movimento é feito byte a byte).

Caso vá haver uma sobreposição destrutiva, o movimento não é efetuado.

O último byte à direita do campo emissor é calculado usando-se os tamanhos dos campos receptor e emissor
(aquele que for menor).

Se o campo emissor ultrapassar ou não do byte 16.777.215 para o byte 0, o movimento é efetuado nos seguintes
casos:
 quando não ultrapassar, o movimento é executado quando o byte mais à esquerda do campo receptor coincide
ou está à esquerda do byte mais à esquerda do campo emissor, ou se o byte mais à esquerda do campo receptor
está à direita do byte (que participa da operação) mais à direita do campo emissor.
 quando ultrapassar, o movimento é executado quando o byte mais à esquerda do campo receptor coincide ou
está à esquerda do byte mais à esquerda do campo emissor, e se o byte mais à esquerda do campo receptor está
à direita do byte (que participa da operação) mais à direita do campo emissor.

Após efetuado o movimento, temos que:


 Os 3 últimos bytes à direita de R1+1 (tamanho do campo receptor) ficam com zero.
 Aos 3 últimos bytes à direita de R1 (endereço do campo receptor) é somado o tamanho originalmente
especificado em R1+1.
 Dos 3 últimos bytes à direita de R2+1 (tamanho do campo emissor) é subtraido o número de bytes movidos do
campo emissor para o receptor.
 Aos 3 últimos bytes à direita de R2 (endereço do campo emissor) é somado o número de bytes movidos do
campo emissor para o receptor.
 byte mais à esquerda, tanto de R1 quanto de R2, fica com 0, mesmo quando o movimento não é efetuado.
 byte mais à esquerda, tanto de R1+1 quanto de R2+1, não é alterado.

Ex:
MVCL 2,8
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 72
72

PACK (Compactar)
Código de máquina F2 (Instrução SS – L1 e L2)
Condition code não é alterado
Interrupções Possíveis 0004,0005

A instrução PACK movimenta um campo de memória para outro campo de memória, transformando-o de zonado
para compactado.

A movimentação é feita da direita para a esquerda, da seguinte forma (o 2º operando é o campo emissor e o 1º
operando é o campo receptor):

O byte mais à direita do campo emissor é invertido e colocado no byte mais à direita do campo receptor (Inverter =
a sua parte de zona vira parte numérica, e a sua parte numérica vira parte de zona). Em seguida, cada parte
numérica de cada byte do campo emissor é colocada num meio byte do campo receptor, desprezando-se as partes
de zona do campo emissor.

Se o receptor for maior que o necessário, ele será preenchido com zeros à esquerda.

Se ele for menor que o necessário, os algarismos em excesso serão truncados.

O 2º operando permanece inalterado.


Ex:
PACK CPOA,CPOB

antes depois

1ºcaso
CPOB F1 . F2 . F3 . F4 F1 . F2 . F3 . F4
CPOA 00 . B7 . 2A 01 . 23 . 4F

2ºcaso
CPOB F1 . F2 . F3 . F4 F1 . F2 . F3 . F4
CPOA C9 . 4A 23 . 4F

3ºcaso
CPOB 9A . 48 . F9 . DB 9A . 48 . F9 . DB
CPOA 19 . B7 . DF 0A . 89 . BD

Observar, pelo 3º Caso, que o campo emissor não é testado quando ao fato de ele estar em zonado e,
consequentemente, o campo receptor pode não ficar em compactado. Outros exemplos:

PACK VALOR,ARLEIT+5(9)
PACK QUANTO+2(7),2(8,5)
PACK 0(10,2),AREA
PACK 2(5,7),2(3,8)
PACK DOUBLE,DOUBLE
PACK BYTE,BYTE

UNPK (Unpack – descompactar)


Código de máquina F3 (Instrução SS – L1 e L2)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 73
73

Condition code não é alterado


Interrupções Possíveis 0004,0005

A instrução UNPK movimenta um campo de memória para outro campo de memória, transformando-o de
compactado para zonado.

Não é feito nenhum teste quanto à validade dos campos.

O 1º operando é o campo receptor e o 2º operando é o campo emissor.

A movimentação é feita da direita para a esquerda, da seguinte forma:

O byte mais à direita do campo emissor é invertido e colocado no byte mais à direita do campo receptor (inverter =
a sua parte de zona vira parte numérica, e a sua parte numérica vira parte de zona). Em seguida, cada meio byte do
campo emissor é colocado na parte numérica de um byte do campo receptor, sendo que na parte de zona do byte
do campo receptor é colocado X'F'.

O 2º operando permanece inalterado.

Se o campo receptor for menor que o necessário, os algarismos em excesso serão truncados.

Se o campo receptor for maior que o necessário, os bytes em excesso serão preenchidos com X'F0'. Ex:

UNPK CPOA,CPOB

antes depois
1. caso
CPOB 12 . 34 . 5C 12 . 34 . 5C
CPOA 92 . B8 . 4C . D0 F2 . F3 . F4 . C5
2. caso
CPOB 12 . 3C 12. 3C
CPOA 92 . B8 . 4C . D0 F0 . F1 . F2 . C3

Outros exemplos:

UNPK ARGRAV+5(12),TOTLIQ
UNPK AX2,2(3,7)
UNPK 17(10,8),T4B2F+3(5)
UNPK 2(13,10),0(5,3)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 74
74

MVCI (Move Inverse – Mover invertido)


Código de máquina E8 (Instrução SS – L)
Condition code Não é alterado
Interrupções Possíveis 0001,0004,0005

Esta instrução move o conteúdo do 2º operando (campo emissor) para o 1º operando (campo receptor), invertendo
a sequência.

Observar que o endereço especificado do 1º operando é o do seu byte mais à esquerda, enquanto o endereço do
segundo operando é o do seu byte mais à direita.

O movimento é feito byte a byte; para o emissor, é da direita para a esquerda, e para o receptor é da esquerda para
a direita.
Se houver sobreposição de mais de um byte entre emissor e receptor, os resultados são imprevisíveis. Exemplo:

MVCIN A(3),B+2

antes depois

B C1 . C2 . C3 C1 . C2 . C3
A C4 . C5 . C6 C3 . C2 . C1
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 75
75

4-2) INSTRUÇÕES ARITMÉTICAS COM CAMPOS COMPACTADOS

AP (Add Packed – Somar em compactado)


Código de máquina FA (Instrução SS – L1 e L2)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A

A instrução AP efetua a soma entre dois campos de memória que estejam no formato compactado.

O resultado da soma é colocado no campo especificado no 1º operando.

O campo especificado no 2º operando fica inalterado. Ex:

AP CPOA,CPOB

antes depois

CPOB 12 . 3C 12 . 3C
CPOA 12 . 34 . 5C 12 . 46 . 8C

Outros exemplos:

AP CONTLIN,=P'1'
AP ARL+2(5),ARL+7(2)
AP TOTAL,2(3,7)
AP 4(3,8),PRT
AP 7(12,8),14(2,3)
AP ANTER,ATUAL

SP (Subtract Packed – Subtrair em compactado)


Código de máquina FB (Instrução SS – L1 e L2)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A

A instrução SP efetua a subtração entre dois campos de memória que estejam no formato compactado.

O campo especificado no 1º operando tem o minuendo;


O campo especificado no 2º operando tem o subtraendo.

Após efetuada a subtração, o resto é colocado no campo especificado no 1º operando.

O campo especificado no 2º operando permanece inalterado.

Ex.:
SP CPOA,CPOB

antes depois
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 76
76

CPOB 98 . 7C 98 . 7C
CPOA 12 . 34 . 5C 11 . 35 . 8C

Outros exemplos:

SP VALOR,VALOR
SP TOTAL,=P'1'
SP AE+5(8),AE+15(3)
SP 0(2,7),4(1,8)

MP (Multiply Packed – Multiplicar em compactado)


Código de máquina FC (Instrução SS – L1 e L2)
Condition code Não é alterado
Interrupções Possíveis 0001,0004,0005,0006,0007

A instrução MP efetua a multiplicação entre dois campos de memória que estejam no formato compactado.

O resultado da multiplicação é colocado no campo especificado no 1º operando.

O 2º operando pode ter tamanho máximo de 8 bytes.

O tamanho do 2º operando deve obrigatoriamente ser menor que o tamanho do 1º operando.

Se o tamanho do 2º operando for maior que 8 ou for menor ou igual ao tamanho do 1º operando, haverá
interrupções de programa (código 0006).

O 1º operando deve ter tantos algarismos em zero (à esquerda) quantos forem os algarismos do 2º operando; se isto
não acontecer, haverá interrupção de programa (código 0007). Ex:

MP CPOA,CPOB

antes depois

CPOB 99 . 9C 99 . 9C
CPOA 00 . 09 . 99 . 9C 99 . 89 . 00 . 1C

Outros exemplos:

MP PERCENT,=P'20'
MP 2(13,4),7(3,5)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 77
77

DP (Divide Packed – Dividir em compactado)


Código de máquina FD (Instrução SS – L1 e L2)
Condition code Não é alterado
Interrupções Possíveis 0004,0005,0006,0007,000B

A interrupção DP efetua a divisão entre dois campos de memória que estejam no formato decimal compactado.

O 1º operando deve conter o dividendo, e o 2º operando deve conter o divisor. Após efetuada a divisão, o cociente
e o resto são colocados no campo especificado no 1º operando. O campo especificado no 2º operando permanece
inalterado.

O tamanho do 2º operando (divisor) não pode ser maior que 8 bytes, nem maior ou igual ao tamanho do 1º
operando; se uma dessas duas condições ocorrer, haverá interrupção de programa (código 0006).

O resto da divisão é colocado à direita do campo 1º operando, com tamanho do divisor. No restante do 1º
operando, à esquerda, é colocado o cociente da divisão. O 2º operando permanece inalterado.

A interrupção de programa por código 000B é causada quando:


 tamanho do cociente é maior que o tamanho a ele reservado no 1º operando.
 dividendo não tem pelo menos um 0 (zero) à esquerda.
 divisor é o número 0.
Ex:

DP CPOA,CPOB

antes depois

CPOB 00 . 2C 00 . 2C
CPOA 00 . 00 . 45 . 67 . 8C 22 . 83 . 9C . 00 . 0C

Outros exemplos:

DP VALOR,=P'5'
DP 2(4,7),0(1,1)
DP PERCT,0(2,7)
DP 4(12,5),1(3,7)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 78
78

SRP (Shift and Round Packed – Deslocar e arredondar compactado)


Código de máquina F0 (Instrução SS)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A

O seu formato de máquina é o seguinte:

CO = 1 byte (código de operação)


L1 = 1/2 byte (tamanho do primeiro operando - 1)
I3 = 1/2 byte (operando imediato (terceiro operando)
E1 = 2 bytes (B1D1D1D1 endereço base+deslocamento do primeiro operando)
E2 = 2 bytes (B2D2D2D2 endereço base+deslocamento do segundo operando)

O campo especificado no 1º operando sofre um deslocamento de dígitos (algarismos) na direção e quantidade de


dígitos especificada pelo endereço do 2º operando, e, quando o deslocamento é para a direita, é feito um
arredondamento, o qual é especificado no 3. operando.

O endereço do 2º operando não é usado para especificação de dados; os 6 últimos bits à direita do número que
representa o endereço do 2º operando são analisados da seguinte maneira:
 1º bit à esquerda indica o sentido do deslocamento: se estiver desligado, o deslocamento é à esquerda; se
estiver ligado, o deslocamento e à direita.
 Os outros 5 bits formam um número que indica quantos dígitos devem ser deslocados (se o deslocamento for à
direita, este número está negativo).

O campo especificado no 1º operando deve estar em compactado.

O arredondamento é feito somando-se o número especificado no 3. operando ao último dígito deslocado, e, se for
1, esse 1 é somado ao número resultante do deslocamento. Vejamos os seguintes exemplos:

SRP TOTAL,61,5

TOTAL antes 12 . 34 . 56 . 78 . 9C
depois 00 . 01 . 23 . 45 . 7C

SRP TOTAL,3,0

TOTAL antes 12 . 34 . 56 . 78 . 9C
depois 45 . 67 . 89 . 00 . 0C

Estas regras facilitam a especificação do sentido e da quantidade de algarismos do deslocamento:


DESLOCAMENTO PARA A ESQUERDA = ESPECIFICAR DIRETO O NUMERO DE ALGARISMOS
SRP TOTAL,3,5 desloca 3 casas para a esquerda

DESLOCAMENTO PARA A DIREITA = ESPECIFICAR (64 - QTDD DE ALGARISMOS)


SRP TOTAL,64-3,5 desloca 3 casas para a direita
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 79
79

4-3) INSTRUÇÕES DE COMPARAÇÃO

CP (Compare Packed – Comparar em compactado)


Código de máquina F9 (Instrução SS – L1 e L2)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CP
Interrupções Possíveis 0005,0007

A instrução CP efetua a comparação algébrica entre dois campos de memória que estejam no formato decimal
compactado. Os dois campos permanecem inalterados. Ex:

CP CPOA,CPOB
CP CONTLIN,=P'1'
CP 0(5,9),=P'0'
CP TOTAL,2(5,9)

CLC (Compare Logical Character – Comparar Caracteres Logicamente)


Código de máquina D5 (Instrução SS – L)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CLC
Interrupções Possíveis 0005

A interrupção CLC faz a comparação lógica (bit a bit, da esquerda para a direita) entre dois campos de memória.
Ex:

CLC CPOA,CPOB
CLC AE+78(2),=C'*1'
CLC 4(2,7),2(9)
CLC ID,2(7)
CLC 194(5,11),AE+3

CLI (Compare Logical Immediate - Comparar Logicamente com Operando Imediato)


Código de máquina 95 (Instrução SI)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CLI
Interrupções Possíveis 0005

A instrução CLI faz a comparação lógica entre dois campos de memória (1 byte cada). O seu 2º operando deve ser
um termo auto definido. Ex:

CLI AE+79,C'*'
CLI 2(5),X'00'
CLI BYTE,B'11110000'
CLI NOP+1,240

CLCL (Compare Logocal Character Long – Comparar Logicamente campos longos)


Código de máquina 0F (Instrução RR)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 80
80

Condition code 00 1ºoperando = 2ºoperando ou ambos os operandos


tem tamanho 0.
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 Nunca o condition code fica em 11 após um CLCL
Interrupções Possíveis 0005,0006

Tanto o 1. como o 2º operandos especificados devem ser registradores pares, os quais indicam (cada um deles)
conjuntos de registradores par-ímpar, os quais chamaremos de R1 e R1+1 e R2 e R2+1.

Esta instrução compara dois campos de memória, do mesmo modo que um CLC.

O endereço do campo 1º operando deve estar nos 3 últimos bytes à direita de R1.

O endereço do campo 2º operando deve estar nos 3 últimos bytes à direita de R2.

O tamanho (número de bytes) do 1º operando deve estar nos 3 últimos bytes à direita de R1+1.
O tamanho (número de bytes) do 2º operando deve estar nos 3 últimos bytes à direita de R2+1.

O 1º byte à esquerda de R2+1 deve conter o caracter de preenchimento.

O conteúdo do 1º byte à esquerda de R1, R2 e R1+1 é desprezado.

A comparação é feita bit a bit, da esquerda para a direita. Ela termina quando é encontrada uma desigualdade entre
bits, ou quando o tamanho do maior operando for alcançado.

Se os operandos não tiverem o mesmo tamanho, o menor é estendido com o caracter de preenchimento (para a
comparação - a expansão é feita internamente, sem alteração de campos).

Se a execução da instrução termina por causa de uma desigualdade, temos que:


 Do conteúdo dos 3 últimos bytes à direita de R1+1 e R2+1 é subtraído o número de bytes iguais, a menos que a
desigualdade tenha ocorrido com o caracter de preenchimento, sendo que, neste caso, os 3 últimos bytes à
direita de R1+1 ou R2+1 (o que indicar o menor tamanho) são zerados.
 Ao conteúdo dos 3 últimos bytes à direita de R1 e R2 é somado o número de bytes iguais.
Se os 2 operandos forem iguais (incluindo o caracter de preenchimento, se necessário), temos que:
 Os 3 últimos bytes à direita de R1+1 e R2+1 são zerados.
 Aos 3 últimos bytes à direita de R1 e R2 é somado o número de bytes iguais.

Em ambos os casos, o 1º byte à esquerda de R1 e R2 é zerado, e o 1º byte à esquerda de R1+1 e R2+1 não são
alterados. Ex:

CLCL 2,8

C (Compare)
Código de máquina 59 (Instrução RX)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um C
Interrupções Possíveis 0005

A instrução C efetua a comparação algébrica entre um número binário contido num registrador (especificado no 1º
operando) e um número binário contido num campo de memória de 4 bytes (especificado no 2º operando - em
geral uma Full-Word). Ex:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 81
81

C 9,CPO
C 8,=F'0'
C 13,=A(TABELA+430)
C 1,2(4)
C 1,2(,4)
C 1,2(7,4)

CH (Compare Halfword)
Código de máquina 49 (Instrução RX)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CH
Interrupções Possíveis 0005

A instrução CH efetua a comparação algébrica entre um número binário contido num registrador (especificado no
1º operando) e um número binário contido num campo de memória de 2 bytes (especificado no 2º operando - em
geral uma Half-Word). Para efetuar a comparação o campo de 2 bytes é colocado (internamente, na UCP) em 4
bytes; a expansão do campo de 2 para 4 bytes é feita colocando-se os seus 2 bytes nos 2 bytes à direita do campo
de 4 bytes, e, nos seus 2 bytes à direita todos os bits ficam em 0 ou 1, dependendo de como estiver o bit mais à
esquerda do campo de 2 bytes. Ex:

CH 9,CPO
CH 8,=H'0'
CH 13,=Y(TABELA+430)
CH 1,2(4)
CH 1,2(,4)
CH 1,2(7,4)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 82
82

CL (Compare Logical – Compare Logicamente)


Código de máquina 55 (Instrução RX)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CL
Interrupções Possíveis 0005

A instrução CL efetua uma comparação lógica entre o conteúdo de um registrador (especificado no 1º operando) e
o conteúdo de um campo de 4 bytes (Especificado no 2º operando - em geral uma Full-Word). Ex:

CL 9,CPO
CL 8,=F'0'
CL 1,2(4)
CL 1,2(,4)
CL 1,2(7,4)

CLM (Compare Logical Characters Under Mask - Comparar campos lógicamente,


sob máscara)
Código de máquina BD (Instrução RS)
Condition code 00 Os bytes selecionados são iguais, ou a máscara
é zero.
01 Campo selecionado do 1ºoperando é menor
10 Campo selecionado do 1ºoperando é maior
11 Nunca o condition code fica em 11 após um CLM
Interrupções Possíveis 0005

O conteúdo do registrador 1º operando é comparado logicamente com o conteúdo do campo de memória 2º


operando, sob o controle de uma máscara, e o resultado é indicado no condition code. O seu formato de máquina é
o seguinte:

CO = 1 byte (código de operação)


R1 = 1/2 byte (registrador primeiro operando)
M3 = 1/2 byte (máscara)
E2 = 2 bytes (endereço base+deslocamento do segundo operando)

Os 4 bits da máscara, da esquerda para a direita, correspondem aos 4 bytes do registrador especificado no
1ºoperando. Os bytes do registrador que tiverem os seus bits correspondentes na máscara ligados, são considerados
como um "campo" contíguo, e comparados com o campo especificado no último operando da instrução (2º
operando), o qual deve ter tantos bytes de tamanho quantos forem os bits da máscara ligados. Os bytes do
registrador cujos bits correspondentes na máscara estiverem desligados, não participam da operação. Ex:
CLM 5,B'1011',ARCOMP

Neste caso o "campo" formado pelos 1º, 3º e 4º bytes do registrador 5, será comparado o campo de 3 bytes
denominado ARCOMP.

CR (Compare Register – Comparar Registradores)


Código de máquina 19 (Instrução RR)
Condition code 00 1ºoperando = 2ºoperando
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 83
83

01 1ºoperando < 2ºoperando


10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CR
Interrupções Possíveis nenhuma

A instrução CR faz uma comparação algébrica entre um número binário contido num registrador (especificado no
1º operando) e outro número binário contido em outro registrador (especificado no 2º operando). Ex:

CR 4,5

CLR (Compare Logical Register – Comparar Registradores Logicamente)


Código de máquina 15 (Instrução RR)
Condition code 00 1ºoperando = 2ºoperando
01 1ºoperando < 2ºoperando
10 1ºoperando > 2ºoperando
11 O condition code nunca fica em 11 após um CLR
Interrupções Possíveis Nenhuma

A instrução CLR faz uma comparação lógica entre o conteúdo de um registrador (especificado no 1º operando) e o
conteúdo de outro registrador (especificado no 2º operando). Ex:

CLR 4,5
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 84
84

4-4) INSTRUÇÕES DE DESVIO

4-4-1) Introdução

As instruções de desvio são duas: BC (instrução RX) e BCR (instrução RR).

No entanto, elas possuem uma série de códigos mnemônicos auxiliares, denominados estendidos, para facilitar o
seu uso.

O funcionamento das instruções de desvio é baseado no estado do Condition Code e de uma máscara de 4 bits
existente na instrução, na metade à esquerda de seu segundo byte.

Os 4 estados em que o Condition Code pode se encontrar são: 00, 01, 10 e 11.

A cada um desses estados atribui-se um código que o representa:

ESTADO CÓDIGO
00 8
01 4
10 2
11 1

A MÁSCARA indica em que condição deve ser efetuado o desvio, e, como ocupa meio byte, pode ir de X'0' a X'F'
(em decimal, de 0 a 15).

Se a máscara estiver com 8, o desvio será efetuado se o condition code estiver em B'00' ; se ela estiver em 4, o
desvio ocorrerá se o condition code estiver em B'01'; máscara 2 causa desvio se o condition code estiver em B'10";
e, finalmente, máscara 1 acarreta desvio se o condition code estiver posicionado em B'11'.

Pode-se fazer combinação dessas condições, somando-se os valores referentes aos códigos do condition code. Por
exemplo, a máscara estando em X'C', significa que o desvio deve ser efetuado caso o condition code esteja em 8 ou
4 (8 + 4 = C).

Se a máscara for zero, não será efetuado desvio (NOP/NOPR = no operation).

Se a máscara for 15 (X'F') será efetuado o desvio independentemente do estado


do condition code, pois 15 é a soma dos 4 códigos (8+4+2+1); é o desvio incondicional.

As instruções de desvio que especificarem máscara de 1 a 14 são as de desvio condicional (desviam


condicionalmente, dependendo do posicionamento do condition code).

Vejamos, a seguir, a tabela de mnemônicos normais (BC ou BCR) e suas máscaras possíveis, e seus respectivos
mnemônicos estendidos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 85
85
---------------------------------------------------------------------------
USO MNEMÔNICO SIGNIFICADO BC/BCR EQUIVALENTE
---------------------------------------------------------------------------
Geral B ou BR Desvia sempre BC 15 ou BCR 15
NOP ou NOPR Nao Desvia BC 0 ou BCR 0
---------------------------------------------------------------------------
Apos BH ou BHR Desvia se A > B BC 2 ou BCR 2
Comparações BL ou BLR Desvia se A < B BC 4 ou BCR 4
BE ou BER Desvia se A = B BC 8 ou BCR 8
BNH ou BNHR Desvia se A < ou = B BC 13 ou BCR 13
BNL ou BNLR Desvia se A > ou = B BC 11 ou BCR 11
BNE ou BNLR Desvia se A não = B BC 7 ou BCR 7
---------------------------------------------------------------------------
Apos BO ou BOR Desvia se overflow BC 1 ou BCR 1
Instruções BP ou BPR Desvia se R > 0 BC 2 ou BCR 2
Aritmeticas BM ou BMR Desvia se R < 0 BC 4 ou BCR 4
BZ ou BZR Desvia se R = 0 BC 8 ou BCR 8
BNP ou BNPR Desvia se R < ou = 0 BC 13 ou BCR 13
BNM ou BNMR Desvia se R > ou = 0 BC 11 ou BCR 11
BNZ ou BNZR Desvia se R não = 0 BC 7 ou BCR 7
---------------------------------------------------------------------------
Apos um TM BO ou BOR Desvia se todos 1 BC 1 ou BCR 1
BM ou BMR Desvia se misturados BC 4 ou BCR 4
BZ ou BZR Desvia se todos 0 BC 8 ou BCR 8
BNO ou BNOR Desvia se nem todos 1 BC 14 ou BCR 14
---------------------------------------------------------------------------

OBS: - A = 1º operando ; B = 2º operando ; R = 1º operando após a conta

O significado das instruções é o seguinte:

B = Branch (Desvie)
NOP = No Operation (Sem operação - não desvie)
BH = Branch High (Desvie se Maior)
BL = Branch Low (Desvie se Menor)
BE = Branch Equal (Desvie se Igual)
BNH = Branch Not High (Desvie se Nao Maior)
BNL = Branch Not Low (Desvie se Nao Menor)
BNE = Branch Not Equal (Desvie se Nao Igual)
BO = Branch If Overflow (Desvie se Overflow)
BP = Branch If Plus (Desvie se Mais)
BM = Branch If Minus (Desvie se Menos)
BZ = Branch If Zero (Desvie se Zero)
BNP = Branch If Not Plus (Desvie se Nao Mais)
BNM = Branch If Not Minus (Desvie se Nao Menos)
BNZ = Branch If Not Zero (Desvie se Nao Zero)
BO = Branch If Ones (Desvie se Um's)
BM = Branch If Mixed (Desvie se Misturados)
BZ = Branch If Zeros (Desvie se Zeros)
BNO = Branch If Not Ones (Desvie se Nao UM's)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 86
86

BC (Branch on Condition – Desviar na Condição)


Código de máquina 47 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

Esta instrução efetua (ou não) um desvio para outra instrução. Seu formato é:
CO = 1 byte (código de operação)
M1 = 1/2 byte (MÁSCARA)
X2 = 1/2 byte (indexador do endereço do segundo operando)
E2 = 2 bytes (base+deslocamento do endereço do segundo operando)

O endereço do 2º operando é o endereço da instrução para onde deve ser efetuado o desvio. A MÁSCARA indica
em que condição deve haver o desvio.

Se a condição especificada na máscara não for satisfeita, o desvio não será efetuado, isto é, o processamento
continuará na instrução seguinte ao BC.
Usando o BC, o 1º operando é a máscara, e o 2ºoperando é uma indicação da instrução para onde deve ser efetuado
o desvio. Se o mnemônico estendido for usado, deve-se especificar um único operando equivalente ao 2º operando
do BC (a máscara estará implícita no código de operação mnemônico). Ex:
BC 8,VOLTA
BE VOLTA
Neste caso, será efetuado o desvio para VOLTA se o condition code tiver 00.
Outros exemplos:
B LER
BH AGAIN
BL COMPARA
BE 0(2)
BE 0(,4)
BE 0(2,4)

BCR (Branch on Condition Register – Desviar [para endereço de registrador]


na Condição)
Código de máquina 07 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

A instrução BCR é análoga ao BC e tem o seguinte formato de máquina:


CO = 1 byte (código de operação = 07)
M1 = 1/2 byte (MÁSCARA)
R2 = registrador segundo operando

Ela ocasiona um desvio (ou não) para a instrução cujo endereço esteja no registrador operando.
Usando BCR, o primeiro operando é a máscara, e o segundo é o número do registrador que contém o endereço da
instrução para onde será efetuado o desvio. Se usarmos o mnemônico estendido, o único operando especificado é o
número do registrador que é o segundo operando da instrução (mas único na especificação). Exemplos:
BCR 2,10
BR 7
BNER 10
BLR 15
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 87
87

4-5) INSTRUÇÕES DE CONTROLE DE LOOP

BCT (Branch on Count – Desvie na condição [de contagem] testada)


Código de máquina 46 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

A instrução BCT tem dois operandos: o 1. é um registrador, e o 2. é o endereço de uma instrução.


A sua função é a seguinte:
O BCT subtrai 1 do registrador especificado no 1º operando e, em seguida, compara o número resultante com
zeros:
 Se o resultado não for zero, será efetuado um desvio para a instrução especificada no 2º operando.
 Se o resultado for zero, não será efetuado o desvio, continuando o processamento através da instrução seguinte
ao BCT.

Exemplos:
BCT 5,VOLTA
BCT 2,0(4,7)
BCT 2,0(4)
BCT 2,0(,7)

BCTR (Branch on Count Register – Desvie na condição [de contagem] testada


para [endereço contido em] registrador)
Código de máquina 06 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

A instrução BCTR tem dois operandos registradores. A sua função é a seguinte:


O BCTR subtrai 1 do registrador especificado no 1º operando e, em seguida, compara o número resultante com
zeros;
 Se o resultado não for zero, será efetuado um desvio para a instrução cujo endereço estiver no registrador 2º
operando.
 Se o resultado for zero, não será efetuado o desvio, continuando o processamento através da instrução seguinte
ao BCTR.

IMPORTANTE: Se o registrador 2º operando for o registrador 0 (zero) o desvio não será efetuado.

Exemplos:
BCTR 2,7
BCTR 4,0
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 88
88

BXH (Branch on Index High – Desvie se o Índice for Maior)


Código de máquina 86 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

O 1º e o 2º operandos especificados são registradores.


O 3º operando é o endereço de uma instrução.
O funcionamento desta instrução é o seguinte:

O conteúdo do registrador especificado no 2º operando é somado ao conteúdo do registrador especificado no 1º


operando, ficando o resultado da soma no registrador especificado no 1º operando.

Em seguida, o resultado da soma é comparado com:


 O conteúdo do registrador especificado no 2º operando, se ele for ímpar ou
 O conteúdo do registrador seguinte ao especificado no 2º operando, se este for par.
Se o resultado da comparação for:
 Maior, será efetuado um desvio para a instrução cujo endereço estiver especificado no 3. operando.
 Menor ou igual, não será efetuado o desvio, continuando o processamento através da instrução seguinte ao
BXH.

Exemplos:

BXH 7,8,COMPARA
BXH 7,9,COMPARA
BXH 7,9,8(4)

BXLE (Branch on Index Low or Equal – Desvie se o Índice for Menor ou Igual)
Código de máquina 87 (Instrução RS)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

A instrução BXLE é análoga ao BXH, com a diferença de que o desvio será efetuado se o resultado da comparação
der menor ou igual; e se o resultado der maior não será efetuado o desvio.

Exemplos:

BXLE 7,8,COMPARA
BXLE 7,9,COMPARA
BXLE 7,9,8(4)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 89
89

4-6) INSTRUÇÕES DE EDIÇÃO

ED (Edit – Editar)
Código de máquina DE (Instrução SS – L)
Condition code 00 Último Campo = 0
01 Último Campo < 0
10 Último Campo > 0
11 O condition code nunca fica em 11 após o ED
Interrupções Possíveis 0004,0005,0007

O seu formato é o seguinte:

(símbolo) ED camporeceptor,campoemissor

O campo emissor (segundo operando) é transformado de compactado para zonado, e colocado no campo receptor
(primeiro operando), substituindo, assim, o modelo da edição (que estava no primeiro operando).

A edição inclui controle de sinal e pontuação, e a supressão e proteção de zeros não significativos.
Pode-se editar diversos campos numa só operação.

O tamanho especificado refere-se apenas ao 1º operando.

O 2º operando deve estar no formato compactado. Se algum byte do 2º operando tiver em sua parte de zona
configuração A, B, C, D , E ou F, então haverá interrupção de programa (0007).

A edição é feita da esquerda para a direita.

Durante a edição, cada caracter do campo receptor (modelo), pode ter um dos três destinos:
 Não é modificado
 É substituído por um algarismo do campo emissor, transformado para zonado.
 É substituído pelo primeiro caracter à esquerda do campo receptor (denominado CARACTER DE
PREENCHIMENTO).

Qual das 3 ações acima é executada, é determinado pelo conteúdo do modelo e se o algarismo a ser editado é zero
ou não.

Examinemos como é formado o modelo de edição:


 O seu 1º Byte à esquerda é o caracter de preenchimento; se for X'20' ou X'21', a ação correspondente é tomada
após ele ter sido assinalado como caracter de preenchimento.
 Cada um dos bytes seguintes pode ter um dos seguintes conteúdos:
 SELETOR DE DÍGITOS (X'20')
 INÍCIO DE SIGNIFICÂNCIA (X'21')
 SEPARADOR DE CAMPOS (X'22')
 Qualquer outro
 Quando, na edição, é detectado um X'20' ou X'21' no 1º operando, a instrução verifica duas coisas:
 O INDICADOR DE SIGNIFICANCIA (é um indicador da UCP que pode estar ligado --ON-- ou
desligado --OFF--), que, chamaremos abreviadamente de S-TRIGGER.
 O algarismo correspondente no 2º operando. Como resultado dessa verificação, temos que o caracter do
modelo (X'20' ou X'21') será substituído pelo algarismo do 2º operando transformado para zonado, ou
pelo caracter de preenchimento.

Quanto ao S-TRIGGER, temos que:


 Ele é colocado OFF no início da edição, após ser encontrado um X'22', ou após ser encontrado na parte
numérica de um byte do 2º operando uma configuração A, C, E ou F (número positivo).
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 90
90
 Ele é colocado ON após ser encontrado um X'21' ou quando é encontrado um X'20' cujo algarismo
correspondente no 2º operando não seja 0; ainda nestes dois casos, o S-TRIGGER só é colocado ON se o
byte do 2º operando não tiver nem A, nem C, nem E, e nem F, na sua parte numérica.

O separador de campos (X'22') identifica campos numa edição de vários campos. Ele é sempre substituído pelo
caracter de preenchimento. Exemplos:

MVC ARIMP+5(10),MODELO
ED ARIMP+5(10),TOTAL
.
.
MODELO DC X'4020204B202126B2020'

Antes: TOTAL 00.12.34.5C


ARIMP+5(10) 40.20.20.4B.20.21.20.6B.20.20.20

Depois: TOTAL 00.12.34.5C


ARIMP+5(10) 40.40.40.40.F1.F2.F3.6B.F4.F5
b b b b 1 2 3 , 4 5

Outros Exemplos do ED:


ED 0(5,7),CPO
ED ARIMP+17(8),ISDRT
ED 4(12,9),2(10)

EDMK (Edit and Mark – Editar e Marcar)


Código de máquina DF (Instrução SS – L)
Condition code 00 Último Campo = 0
01 Último Campo < 0
10 Último Campo > 0
11 O condition code nunca fica em 11 após o EDMK
Interrupções Possíveis 0004,0005,0007

A instrução EDMK é análoga a instrução ED, com a diferença de que ela coloca no registrador 1 (nos bits 8 a 31;
os bits 0 a 7 permanecem inalterados) o endereço do byte do 1º operando que recebeu o primeiro algarismo
significativo.
OBS:- O endereço não é colocado quando a significância foi forçada (via X'21').
Ex:
EDMK ARIMP+5(10),TOTAL
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 91
91

4-7) INSTRUÇÕES DE TRADUÇÃO E TESTE DE BYTES

TR (Translate – Traduzir)
Código de máquina DC (Instrução SS – L)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

A instrução TR movimenta o conteúdo do 2º operando para o 1º operando, de acordo com o conteúdo do 1º


operando. Para tanto, ela processa da esquerda para a direita, byte a byte, da seguinte forma:
 ela soma o conteúdo de um byte do 1º operando ao endereço do 2º operando;
 o byte cujo endereço foi encontrado, será movido para o byte do 1º operando.

Ex:
TR ACSD,TABELA

Antes
ACSD 02.00.08.FF.05
TABELA I C1.48.B9.D7.A1.C3.D9.5C.4B ........1A
.......... 256 bytes ................

Depois
ACSD B9.C1.4B.1A.C3
TABELA não é alterado

Outros exemplos:

TR 0(5,7),0(10)
TR ARIMP+7(10),TABASTER
TR 2(5,124),CAMP

TRT (Translate and Test – Traduzir e Testar)


Código de máquina DD (Instrução SS – L)
Condition code 00 Todos os bytes testados estavam em X'00'
01 O teste parou num byte que não era o último a
ser testado.
10 O teste foi ate o último byte a ser testado, o
qual não estava em X'00'
11 O condition code nunca fica em 11 após um TRT
Interrupções Possíveis 0005

A instrução TRT testa bytes do campo especificado no 2º operando, verificando se eles estão ou não em X'00'. O
primeiro que for testado e que não esteja em X'00' faz com que a execução da instrução seja encerrada.

O 1º operando indica quais os bytes do 2º operando a testar: o TRT soma o conteúdo de um byte do 1º operando ao
endereço do 2º operando; o byte cujo endereço foi encontrado é que será testado.
Quando é encontrado um byte que não esteja em X'00', a instrução coloca no registrador 1 (nos seus bits 8 a 31; os
bits 0 a 7 não são alterados) o endereço do byte do 1º operando cujo conteúdo levou ao byte do 2º operando que
não estava em X'00"; além disso, ela coloca no último byte à direita do registrador 2 (os seus bits 0 a 23 não são
alterados) o conteúdo do byte do 2º operando que não estava em X'00'.

A instrução TRT é, em geral, usada num dos casos abaixo:

a) Testar se um campo (1º operando) está no formato decimal zonado - campo numérico:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 92
92
TRT CART+9(6),TABNUM
BZ NUMÉRICO
.
.
.
TABNUM DC 240X'FF',10X'00',6X'FF'

b) Testar se um campo (1º operando) é alfabético (só tem letras e brancos)

TRT CART+9(6),TABALFAB
BZ FABETICO
.
.
TABALFAB DC CL256X'FF'
ORG TABALFAB+C' '
DC X'00'
ORG TABALFAB+C'A'
DC 9X'00'
ORG TABALFAB+C'J'
DC 9X'00'
ORG TABALFAB+C'S'
DC 8X'00'
ORG

c) Achar o 1º byte de um campo que tenha determinado caracter (* no exemplo).

TRT 0(80,7),TABASTER
BZ NOTASTER
aqui o registrador 1 tem o
endereço do byte desejado
.
.
.
TABASTER DC 256X'00'
ORG TABASTER+C'*'
DC X'FF'
ORG
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 93
93

4-8) SHIFT EM REGISTRADORES

As instruções de deslocamento em registradores deslocam bits de registradores para a esquerda ou para a direita.
Podemos ter os seguintes tipos de deslocamentos:
a) Simples - só um registrador participa do Shift
b) Duplos - dois registradores seguidos (conjunto par-ímpar; deve-se especificar o registrador par) participarão do
Shift
c) Lógicos - todos os bits são deslocados para a esquerda ou para a direita.
d) Algébricos - o bit do sinal (o mais à esquerda do registrador) não é deslocado.

Todas as instruções de Shift são RS, e os bits 12 a 15 dessas instruções são ignorados pela UCP.
Os 6 bits mais à direita do número que é o endereço do 2º operando, formam um número que indica quantas
"casas" devem ser deslocadas.

SLL (Shift Left Logical – Deslocamento Simples Lógico à esquerda)


Código de máquina 89 (Instrução RS)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

Pode-se deslocar 32 "casas" no máximo. Exemplo:


SLL 5,2

Registrador 5 antes do Shift

B9 . 4F . FF . FF

Registrador 5 após o Shift

E5 . 3F . FF . FC

SRL (Shift Right Logical – Deslocamento Simples Lógico à direita)


Código de máquina 88 (Instrução RS)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

Pode-se deslocar 32 "casas" no máximo. Exemplo:


SRL 5,2

Registrador 5 antes do Shift

B9 . 4F . FF . FF

Registrador 5 após o Shift

2E . 53 . FF . FF

SLDL (Shift Left Double Logical – Deslocamento Duplo Lógico à esquerda)


Código de máquina 8D (Instrução RS)
Condition code Não é alterado
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 94
94

Interrupções Possíveis 0006

Pode-se deslocar 63 "casas" no máximo.

Ex:
SLDL 8,4

Registradores 8 e 9 antes do Shift

12 . FE . 3D . 4C . 5B . 6A . 78 . 90

8 9

Registradores 8 e 9 após o Shift

2F . E3 . D4 . C5 . B6 . A7 . 89 . 00

8 9

SRDL (Shift Right Double Logical – Deslocamento Duplo Lógico à direita)


Código de máquina 8C (Instrução RS)
Condition code Não é alterado
Interrupções Possíveis 0006

Pode-se deslocar 63 "casas" no máximo.

Ex:
SRDL 8,4

Registradores 8 e 9 antes do Shift

12 . FE . 3D . 4C . 5B . 6A . 78 . 90

8 9

Registradores 8 e 9 após o Shift

01 . 2F . E3 . D4 . C5 . B6 . A7 . 89

8 9
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 95
95

SLA (Shift Left Algebraic – Deslocamento Simples Algébrico à esquerda)


Código de máquina 8B (Instrução RS)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis Nenhuma

Pode-se deslocar 15 "casas" no máximo. Ex:

SLA 5,3

Registrador 5 antes do Shift

FF . 80 . 9A . 00

Registrador 5 após o Shift

FC . 00 . 50 . 00

SRA (Shift Right Algebraic – Deslocamento Simples Algébrico à direita)


Código de máquina 8A (Instrução RS)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 O condition code nunca fica em 11 após um SRA
Interrupções Possíveis Nenhuma

Pode-se deslocar 15 "casas" no máximo. Ex:

SRA 5,3

Registrador 5 antes do Shift

FF . 80 . 0A . 00

Registrador 5 após o Shift

8F . F0 . 01 . 40
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 96
96

SLDA (Shift Left Double Algebraic – Deslocamento Duplo Algébrico à esquerda)


Código de máquina 8F (Instrução RS)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0004, 0008

Pode-se deslocar 63 "casas" no máximo. Exemplo:

SLDA 8,3

Registradores 8 e 9 antes do Shift

B4 . 20 . 08 . 91 . C4 . 00 . 02 . FF

8 9

Registradores 8 e 9 após o Shift

A1 . 00 . 44 . 8E . 20 . 00 . 17 . F8

8 9

SRDA (Shift Right Double Algebraic – Deslocamento Duplo Algébrico à direita)


Código de máquina 8E (Instrução RS)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 O condition code nunca fica em 11 após um SRDA
Interrupções Possíveis 0006

Pode-se deslocar 63 "casas" no máximo. Exemplo:

SRDA 8,3

Registradores 8 e 9 antes do Shift

B4 . 20 . 08 . 91 . C4 . 00 . 02 . FF

8 9

Registradores 8 e 9 após o Shift

86 . 84 . 01 . 12 . 38 . 80 . 00 . 5F

8 9
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 97
97

4-9) INSTRUÇÕES DE ÁLGEBRA BOOLEANA

São instruções que modificam o conteúdo do 1º operando de acordo com o seu conteúdo, e o do 2º operando
(máscara).

Existem 3 tipos de instruções booleanas: AND, OR e EXCLUSIVE OR.

Para facilitar a compreensão do funcionamento de cada uma delas, vejamos as seguintes regras práticas,
considerando-se que a operação é efetuada bit a bit, aplicando-se o bit da máscara no bit correspondente do
primeiro operando, o qual é alterado (ou não) de acordo com o seguinte:

Instruções tipo AND:


Bit da máscara = 0 então bit resultante = 0
Bit da máscara = 1 então bit resultante não é alterado

Instruções tipo OR:


Bit da máscara = 0 então bit resultante não é alterado
Bit da máscara = 1 então bit resultante = 1

Instruções tipo EXCLUSIVE OR:


Bit da máscara = 0 então bit resultante não é alterado
Bit da máscara = 1 então bit resultante é o inverso
(se era 0 fica 1 e se era 1 fica 0)

O segundo operando (máscara) especificado nunca é alterado.

N (And – E)
Código de máquina 54 (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um N
11 O condition code nunca fica em 11 após um N
Interrupções Possíveis 0005

A instrução N executa um AND entre um registrador (especificado no 1º operando) e um campo de memória de 4


bytes (especificado no 2º operando - em geral uma Full-Word). Ex:

N 13,CAMPOF

Antes Depois

Reg. 13 B4 . EF . 2F . A8 00 . 00 . 00 . A8
CAMPOF 00 . 00 . 00 . FF 00 . 00 . 00 . FF

Outros exemplos:

N 11,=F'15'
N 3,0(4)
N 3,0(,4)
N 3,0(8,4)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 98
98

O (Or – Ou)
Código de máquina 56 (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um O
11 O condition code nunca fica em 11 após um O
Interrupções Possíveis 0005

A instrução O executa um OR entre um registrador (Especificado no 1º operando) e um campo de memória de 4


bytes (especificado no 2º operando - em geral uma Full-Word). Ex:

O 13,CAMPOF

Antes Depois

Reg. 13 B4 . EF . 2F . A8 B4 . EF . 2F . FF
CAMPOF 00 . 00 . 00 . FF 00 . 00 . 00 . FF

X (Exclusive Or – Ou exclusivo)
Código de máquina 57 (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um X
11 O condition code nunca fica em 11 após um X
Interrupções Possíveis 0005

A instrução X executa um EXCLUSIVE OR entre um registrador (especificado no 1º operando) e um campo de


memória de 4 bytes (Especificado no 2º operando - em geral uma Full-Word). Ex:

X 13,CAMPOF

antes depois

Reg. 13 B4 . EF . 2F . A8 B4 . EF . 2F . 57
CAMPOF 00 . 00 . 00 . FF 00 . 00 . 00 . FF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 99
99

NR (And Register – E entre registradores)


Código de máquina 14 (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um NR
11 O condition code nunca fica em 11 após um NR
Interrupções Possíveis Nenhuma

A instrução NR executa um AND entre 2 registradores. Ex:

NR 5,8

Antes Depois

Reg. 5 B4 . EF . 2F . A8 00 . 00 . 00 . A8
Reg. 8 00 . 00 . 00 . FF 00 . 00 . 00 . FF

OR (Or Register – Ou entre registradores)


Código de máquina 16 (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um OR
11 O condition code nunca fica em 11 após um OR
Interrupções Possíveis Nenhuma

A instrução OR executa um OR entre 2 registradores. Ex:

OR 5,8

Antes Depois

Reg. 5 B4 . EF . 2F . A8 B4 . EF . 2F . FF
Reg. 8 00 . 00 . 00 . FF 00 . 00 . 00 . FF

XR (Exclusive or Register – Ou exclusivo entre registradores)


Código de máquina 17 (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um XR
11 O condition code nunca fica em 11 após um XR
Interrupções Possíveis Nenhuma

A instrução XR executa um EXCLUSIVE OR entre 2 registradores. Ex:

XR 5,8

Antes Depois

Reg. 5 B4 . EF . 2F . A8 B4 . EF . 2F . 57
Reg. 8 00 . 00 . 00 . FF 00 . 00 . 00 . FF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 100
100

NI (And Immediate – E [com operando] imediato)


Código de máquina 94 (Instrução SI)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um NI
11 O condition code nunca fica em 11 após um NI
Interrupções Possíveis 0004, 0005

A instrução NI executa um AND entre 2 campos de memória (um byte cada). Ex:

NI BYTE,X'0F'

antes depois

BYTE B4 04
Op.Imed. 0F 0F

OI (Or Immediate – Ou [com operando] imediato)


Código de máquina 96 (Instrução SI)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um OI
11 O condition code nunca fica em 11 após um OI
Interrupções Possíveis 0004, 0005

A instrução OI executa um Or entre 2 campos de memória (um byte cada). Ex:

OI BYTE,X'0F'

antes depois

BYTE B4 BF
Op.Imed. 0F 0F

XI (Exclusive Or Immediate – Ou exclusivo [com operando] imediato)


Código de máquina 97 (Instrução SI)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um OI
11 O condition code nunca fica em 11 após um OI
Interrupções Possíveis 0004, 0005

A instrução XI executa um EXCLUSIVE OR entre 2 campos de memória (um byte cada). Exemplo:
Antes Depois

BYTE B4 BB
Op.Imed. 0F 0F
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 101
101

NC (And Character – E entre campos com caracteres)


Código de máquina D4 (Instrução SS – L)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um NC
11 O condition code nunca fica em 11 após um NC
Interrupções Possíveis 0004, 0005

A instrução NC executa um AND entre 2 campos de memória. Ex:

NC CPOA,CPOB

antes depois

CPOA EF . 2F . A8 00 . 00 . A8
CPOB 00 . 00 . FF 00 . 00 . FF

OC (Or Character – Ou entre campos com caracteres)


Código de máquina D6 (Instrução SS – L)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um OC
11 O condition code nunca fica em 11 após um OC
Interrupções Possíveis 0004, 0005

A instrução OC executa um OR entre 2 campos de memória. Ex:

OC CPOA,CPOB

Antes Depois

CPOA EF . 2F . A8 EF . 2F . FF
CPOB 00 . 00 . FF 00 . 00 . FF

XC (Exclusive Or Character – Ou exclusivo entre campos com caracteres)


Código de máquina D7 (Instrução SS – L)
Condition code 00 Resultado = 0
01 Resultado <> 0
10 O condition code nunca fica em 10 após um XC
11 O condition code nunca fica em 11 após um XC
Interrupções Possíveis 0004, 0005

A instrução XC executa um EXCLUSIVE OR entre 2 campos de memória. Ex:

XC CPOA,CPOB

antes depois

CPOA EF . 2F . A8 EF . 2F . 57
CPOB 00 . 00 . 00 00 . 00 . FF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 102
102

4-10) INSTRUÇÕES DE CARGA E DESVIO

BALR (Branch and Link Register – Desviar e ligar via registrador)


Código de máquina 05 (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

A instrução BALR carrega no registrador especificado no 1º operando o endereço da instrução (do byte) seguinte
ao BALR e, em seguida, desvia para a instrução cujo endereço esteja no registrador especificado no 2º operando.
OBS:- 1) Se o registrador 2º operando for o registrador 0, o desvio não será feito.
2) Para carregar o endereço no registrador 1º operando, o BALR nele coloca os 4 últimos bytes à direita da
PSW atual (BC mode).

Ex:
BALR 3,0
BALR 14,15

BAL (Branch and Link – Desviar e ligar)


Código de máquina 45 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

A instrução BAL é análoga ao BALR. A diferença é que seu 2º operando especifica o endereço de uma instrução
para onde sempre será efetuado o desvio. Ex:
BAL 9,ROTINA
BAL 14,CABEC
BAL 7,2(5)
BAL 7.2(,8)
BAL 7,2(5,8)

BAS (Branch and Save – Desviar e salvar)


Código de máquina 4D (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

O endereço da instrução seguinte (do byte seguinte à instrução BAS) é carregado no registrador 1º operando
(carregando nos bytes 1,2 e 3 do registrador os bytes 5, 6 e 7 da PSW atual), e em seguida é efetuado um desvio
para a instrução especificada no 2º operando.
O primeiro byte à esquerda do registrador 1º operando é zerado, e esta é a diferença entre o BAS e o BAL, pois o
BAL, ao carregar o endereço do byte seguinte no registrador 1º operando, ele o faz dos 4 últimos bytes da PSW
atual, trazendo o conteúdo do byte 4 da PSW para o byte 0 do registrador 1º operando. Exemplo:

BAS 14, ROT

BASR (Branch and Save Register – Desviar para endereço em registrador e


salvar)
Código de máquina 0D (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis Nenhuma
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 103
103

O endereço da instrução seguinte (do byte seguinte à instrução BASR) é carregado no registrador 1º operando
(carregando nos bytes 1,2 e 3 do registrador os bytes 5, 6 e 7 da PSW atual), e em seguida é efetuado um desvio
para a instrução cujo endereço está no registrador 2º operando.
O primeiro byte à esquerda do registrador 1º operando é zerado, e esta é a diferença entre o BASR e o BALR, pois
o BALR, ao carregar o endereço do byte seguinte no registrador 1º operando, ele o faz dos 4 últimos bytes da PSW
atual, trazendo o conteúdo do byte 4 da PSW para o byte 0 do registrador 1º operando. Se o registrador 2º
operando for o zero, não é efetuado o desvio. Exemplo:

BASR 14, 15

BASSM (Branch and Save and Set Mode – Desviar, salvar e posicionar modo)
Código de máquina 0C (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

O endereço da instrução seguinte (do byte seguinte à instrução BASSM) é carregado no registrador 1º operando
(carregado dos bytes 4, 5, 6 e 7 da PSW atual), e em seguida é carregado nos bytes 4 a 7 da PSW atual o conteúdo
do registrador 2º operando, incluindo o bit de addressing mode e o endereço da próxima instrução; isto causa um
posicionamento do addressing mode e o desvio para a instrução.
Se o registrador 2º operando for o zero, não é feita a carga da PSW. Exemplo:

BASSM 14, 15

BSM (Branch and Set Mode – Desviar e posicionar modo)


Código de máquina 0B (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

O bit 32 da PSW atual (addressing mode) é carregado no bit 0 do registrador 1º operando (os bits 1-31 do
registrador 1º operando não são alterados), e em seguida é carregado nos bytes 4 a 7 da PSW atual o conteúdo do
registrador 2º operando, incluindo o bit de addressing mode e o endereço da próxima instrução; isto causa um
posicionamento do addressing mode e o desvio para a instrução.
Se o registrador 2º operando for o zero, não é feita a carga da PSW. Exemplo:

BSM 14, 15
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 104
104

4-11) INSTRUÇÕES DE MOVIMENTO DE DADOS DE REGISTRADOR PARA MEMORIA

ST (Store – Armazenar)
Código de máquina 50 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

O conteúdo do registrador especificado no 1º operando é colocado no campo de memória de 4 bytes especificado


no 2º operando (em geral uma Full-Word).
O registrador 1º operando permanece inalterado. Ex:

ST 14,SALVA
ST 14,FULL+4
ST 14,0(2)
ST 14,0(,8)
ST 14,0(2,8)

STH (Store Halfword – Armazenar halfword)


Código de máquina 40 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

O conteúdo dos 2 últimos bytes à direita do registrador especificado no 1º operando é colocado no campo de
memória de 2 bytes especificado no 2º operando (em geral uma Half-Word). O registrador 1º operando permanece
inalterado. Ex:

STH 14,SALVA+18
STH 14,HALF
STH 14,0(2)
STH 14,0(,8)
STH 14,0(2,8)
STH 0,CPO

STM (Store Multiple – Armazenar Múltiplos)


Código de máquina 90 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

Esta instrução trabalha com 3 operandos: os 2 primeiros especificados são registradores e o terceiro é um endereço
de memória.
A instrução STM coloca o conteúdo do conjunto de n registradores (indicado pelos registradores especificados) no
campo de memória de (n.4) bytes especificado no último operando. Ex:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 105
105
STM 14,1,SALVA

<------- SALVA -------------------------------->

<----------><---------><----------><---------->
Reg. 14 Reg.15 Reg.0 Reg.1

Outro Exemplo:

STM 1,7,2(10)

STC (Store Character – Armazenar um byte)


Código de máquina 42 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

O conteúdo do último byte à direita do registrador especificado no 1º operando (o qual permanece inalterado) é
colocado no campo de 1 byte especificado no 2º operando. Ex:

STC 4,BYTE
STC 8,0(5)
STC 8,0(,9)
STC 8,0(5,9)

STCM (Store Characters under Mask – Armazenar caracteres por máscara)


Código de máquina BE (Instrução RS)
Condition code Não é alterado
Interrupções Possíveis 0004,0005

O seu formato de máquina é o seguinte:

CO = 1 byte (código de operação)


R1 = 1/2 byte (registrador primeiro operando)
M3 = 1/2 byte (máscara terceiro operando)
E2 = 2 bytes (base+deslocamento do segundo operando)

Os 4 bits da máscara, da esquerda para a direita, correspondem aos 4 bytes do registrador especificado no 1º
operando.
Os bytes do registrador que tiverem os seus bits correspondentes na máscara ligados, são considerados como um
"campo" contíguo, e movidos para o campo de memória especificado no último operando da instrução (2º
operando), o qual deve ter tantos bytes de tamanho quantos forem os bits da máscara ligados.
O registrador 1º operando não é alterado. Ex:

STCM 5,B'1010',SAVE

Neste caso, o "campo" formado pelos 1. e 2. bytes do registrador 5, será movido para o campo de memória de 2
bytes denominado SAVE.

CVD (Convert to decimal – Converter [de binário] para [decimal] compactado)


Código de máquina 4E (Instrução RX)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 106
106

Condition code Não é alterado


Interrupções Possíveis 0004,0005

O número (binário) contido no registrador especificado no 1º operando é convertido para formato decimal
compactado e colocado no campo de memória de 8 bytes (em geral uma Double-Word) especificado no 2º
operando.
OBS:- número positivo: sinal C
número negativo: sinal D
Exemplos:

CVD 8,DOUBLE
CVD 8,0(5,9)
CVD 8,0(,9)
CVD 8,0(5)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 107
107

4-12) INSTRUÇÕES DE MOVIMENTO DE DADOS DE UM CAMPO DE MEMÕRIA PARA


REGISTRADOR

L (Load – Carregar)
Código de máquina 58 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005

O conteúdo do campo de memória de 4 bytes especificado no 2º operando (em geral uma Full-Word) será
colocado no registrador especificado no 1º operando. O campo de memória permanece inalterado. Ex:

L 7,FULL
L 14,SALVA
L 8,0(10)
L 8,0(,11)
L 8,0(10,11)
L 5,=F'200'

LH (Load Halfword – Carregar halfword)


Código de máquina 48 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005

O conteúdo do campo de 2 bytes especificados no 2º operando (em geral uma Half-Word) será colocado nos 2
últimos bytes à direita do registrador especificado no 1º operando; os 2 bytes à esquerda do registrador terão os
seus bits posicionados do mesmo modo que estiver o 1º bit à esquerda do campo, o qual permanece inalterado. Ex:
LH 5,CPO

Antes Depois

Reg. 5 00 . 00 . 00 . 00 FF . FF . 8A . B4
CPO 8A . B4 8A . B4

Outro Exemplo:

Antes Depois

Reg. 5 FF . FF . FF . FF 00 . 00 . 7A . B4
CPO 7A . B4 7A . B4

Outros exemplos:

LH 7,HALF
LH 8,0(10)
LH 8,0(,11)
LH 8,0(10,11)
LH 8,=H'200'

LM (Load Multiple – Carregar Múltiplos)


Código de máquina 98 (Instrução RX)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 108
108

Condition code Não é alterado


Interrupções Possíveis 0005

Esta instrução trabalha com 3 operandos: os 2 primeiros especificados são registradores, e o terceiro especificado é
um endereço de memória. A instrução LM coloca o conteúdo de um campo de memória de (n x 4) bytes no
conjunto de n registradores (indicado pelos dois primeiros operandos). Ex:

LM 14,1,SALVA

<------- SALVA -------------------------------->

<----------><---------><----------><---------->
Reg. 14 Reg.15 Reg.0 Reg.1

IC (Insert Character – Inserir Byte)


Código de máquina 43 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005

O conteúdo do campo de um byte especificado no 2º operando é colocado no último byte à direita do registrador
especificado no 1º operando.
Os outros 3 bytes do registrador permanecem inalterados. Exemplo:

IC 4,BYTE
IC 8,0(5)
IC 8,0(,9)
IC 8,0(5,9)
IC 9,=C'A'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 109
109

ICM (Insert Character under Mask – Inserir bytes sob máscara)


Código de máquina BF (Instrução RS)
Condition code 00 Todos os bits inseridos estão em 0, ou a
máscara é 0.
01 O 1º bit do campo inserido está em 1.
10 O 1º bit do campo inserido está em 0, e nem
todos os bits inseridos estão em 0.
11 Nunca o condition code fica em 11 após um ICM.
Interrupções Possíveis 0005

O seu formato de máquina é o seguinte:

CO = 1 byte (código de operação)


R1 = 1/2 byte (registrador primeiro operando)
M3 = 1/2 byte (máscara terceiro operando)
E2 = 2 bytes (base+deslocamento do segundo operando)

Os 4 bits da máscara, da esquerda para a direita, correspondem aos 4 bytes do registrador especificado no 1º
operando.
O campo de memória especificado no último operando da instrução (2º operando), deve ter tantos bytes quantos
forem os bits da máscara ligados. Os bytes do campo de memória são movidos, um a um, da esquerda para a
direita, para os bytes do registrador 1º operando que tiverem os bits correspondentes na máscara ligados.
Os bytes do registrador 1º operando que tiverem os bits correspondentes na máscara desligados, permanecem
inalterados. Ex:

ICM 5,B'1010',SAVE

Neste caso, o 1º byte de SAVE será movido para o 1º byte do registrador 5, e o 2º byte de SAVE será movido para
o 3º byte do registrador 5.

CVB (Convert to binary – Converter [de compactado] para binário)


Código de máquina 4F (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005, 0007, 0009

O número compactado que esta no campo de 8 bytes especificado no 2º operando (em geral uma Double-Word), o
qual permanece inalterado, é transformado para binário e colocado no registrador especificado no 1º operando. Ex:

CVB 8,DOUBLE
CVB 8,0(5,9)
CVB 8,0(,9)
CVB 8,0(5)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 110
110

4-13) INSTRUÇÕES DE MOVIMENTO DE DADOS DE REGISTRADOR PARA REGISTRADOR

LR (Load Register – Carregar registrador)


Código de máquina 18 (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

O conteúdo do registrador especificado no 2º operando é colocado no registrador especificado no 1º operando. Ex:

LR 4,5

LPR (Load Positive Register – Carregar registrador positivo)


Código de máquina 10 (Instrução RR)
Condition code 00 Resultado = 0
01 Nunca o condition code fica em 1 após um LPR.
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0008

O número binário contido no registrador especificado no 2º operando (o qual permanece inalterado) é


transformado para positivo e colocado no registrador especificado no 1º operando.
Números positivos não sofrem transformação.
Números negativos são transformados por complementação.
O overflow ocorre quando o maior número negativo é complementado; neste caso, o número permanece
inalterado. Ex:

LPR 4,5

LNR (Load Negative Register – Carregar registrador negativo)


Código de máquina 11 (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Nunca o condition code fica em 10 após um LNR
11 Nunca o condition code fica em 10 após um LNR
Interrupções Possíveis Nenhuma

O número binário contido no registrador especificado no 2º operando (O qual permanece inalterado) é


transformado para negativo (por complementação) e colocado no registrador especificado no 1º operando.
Números negativos não são transformados.
O zero permanece inalterado com sinal positivo. Ex:

LNR 4,5
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 111
111

LCR (Load Complement Register – Carregar o complemento do registrador)


Código de máquina 13 (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0008

O número binário contido no registrador especificado no 2º operando (o qual permanece inalterado) é


complementado (se for positivo fica negativo e vice-versa) e colocado no registrador especificado no 1º operando.
O overflow ocorre quando o maior número negativo é complementado. EX:

LCR 4,5
LCR 4,4

LTR (Load and test Register – Carregar e testar registrador)


Código de máquina 12 (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Nunca o condition code fica em 10 após um LTR
Interrupções Possíveis Nenhuma

O conteúdo do registrador especificado no 2º operando (o qual permanece inalterado) é colocado no registrador


especificado no 1º operando. Ex:

LTR 5,8
LTR 4,4
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 112
112

4-14) OPERAÇÕES ARITMÉTICAS ENTRE REGISTRADORES

AR (Add Register – Somar registradores)


Código de máquina 1A (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0008

O conteúdo do registrador especificado no 2º operando (o qual não é alterado) é somado algebricamente ao


conteúdo do registrador especificado no 1º operando (ambos os números em binário) e o resultado é colocado no
registrador 1º operando. Ex:

AR 7,8
AR 2,2

SR (Subtract Register – Subtrair registradores)


Código de máquina 1B (Instrução RR)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0008

O número binário contido no registrador especificado no 2º operando é subtraído algebricamente do número


binário contido no registrador especificado no 1º operando, e o resto é colocado no registrador 1º operando.
Portanto: Minuendo : 1ºoperando
Subtraendo : 2ºoperando
Resto : 1ºoperando
Ex:
SR 7,8
SR 2,2

MR (Multiply Register – Multiplicar registradores)


Código de máquina 1C (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis 0006

O 1º operando especificado deve ser um registrador par (o número binário nele contido será desprezado, a menos
que ele seja o multiplicador).

O número binário contido no registrador especificado no 2º operando será o multiplicador. O produto será
colocado no conjunto de 2 registradores (par-ímpar) indicado pelo 1º operando: o registrador par será ele mesmo, e
o ímpar será o seguinte a ele.

O multiplicando será o número binário do registrador ímpar do conjunto par-ímpar indicado pelo 1º operando.
Exemplo:

MR 4,9

Multiplicando: Reg.5
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 113
113
Multiplicador: Reg.9
Produto : Numero binário de 64 bits contido nos registradores 4 e 5, em conjunto.

DR (Divide Register – Dividir registradores)


Código de máquina 1D (Instrução RR)
Condition code Não é alterado
Interrupções Possíveis 0006,0009

O 1º operando especificado deve ser um registrador par. O número contido nele e no registrador ímpar seguinte a
ele (número binário com 64 bits) será o dividendo.
O número binário contido no registrador especificado no 2º operando será o divisor.
Após a divisão, o registrador ímpar receberá o quociente. Ex:

DR 4,9

Dividendo : Número binário de 64 bits (sinal + 63 bits), contido nos


registradores 4 e 5, em conjunto.
Divisor : Reg. 9
Resto : Reg. 4
Quociente : Reg. 5

Resto ou quociente = 0: sinal sempre positivo


Sinal do resto = Sinal do dividendo

ALR (Add Logical Register – Somar registradores logicamente)


Código de máquina 1E (Instrução RR)
Condition code 00 Resultado = 0, não perde sinal
01 Resultado <> 0, não perde sinal
10 Resultado = 0, perde sinal
11 Resultado <> 0, perde sinal
Interrupções Possíveis Nenhuma

É efetuada uma soma lógica entre os números binários (considerados com 32 bits cada, positivos) contidos nos
registradores especificados como operandos. O resultado é colocado no registrador 1º operando. Ex:

ALR 7,12
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 114
114

SLR (Subtract Logical Register – Subtrair registradores logicamente)


Código de máquina 1F (Instrução RR)
Condition code 00 Nunca o condition code fica em 00 após um SLR
01 Resultado <> 0, não perde sinal
10 Resultado = 0, perde sinal
11 Resultado <> 0, perde sinal
Interrupções Possíveis Nenhuma

É efetuada uma subtração lógica entre os números binários (considerados com 32 bits cada, positivos) contidos no
1º operando (minuendo) e 2º operando (subtraendo). O resto é colocado no registrador 1º operando. Ex:

SLR 7,12
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 115
115

4-15) OPERAÇÕES ARITMÉTICAS ENTRE REGISTRADORES E CAMPOS DE MEMÕRIA

A (Add – Somar)
Código de máquina 5A (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0005,0008

Esta instrução efetua a soma algébrica entre um número binário contido num registrador (especificado no 1º
operando) e um número binário contido num campo de memória de 4 bytes (especificado no 2º operando; em geral
uma Full-Word). O resultado é colocado no registrador 1º operando. Ex:

A 5,=F'259'
A 7,FULL
A 7,4(2,8)
A 7,4(2)
A 7,4(,8)

S (Subtract – Subtrair)
Código de máquina 5B (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0005,0008

Esta instrução efetua a subtração algébrica entre um número binário contido num registrador (especificado no 1º
operando - é o Minuendo) e um número binário contido num campo de memória de 4 bytes (especificado no 2º
operando; em geral uma Full-Word - é o Subtraendo).
O resto é colocado no registrador 1º operando. Ex:

S 5,=F'259'
S 7,FULL
S 7,4(2,8)
S 7,4(2)
S 7,4(,8)

M (Multiply – Multiplicar)
Código de máquina 5C (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005,0006

Esta instrução efetua uma multiplicação entre dois números binários.


O registrador especificado no 1º operando deve ser par.
O registrador ímpar seguinte deve conter o Multiplicando.
O campo de memória de 4 bytes especificado no 2º operando (em geral uma Full-Word) deve conter o
Multiplicador.
O resultado é um número binário de 64 bits que é colocado no conjunto de registradores par-ímpar indicado pelo
1º operando. Exemplo:

M 6,CPOA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 116
116

Neste caso, temos: Multiplicando: Reg. 7


Multiplicador: CPOA
Produto : Regs. 6 e 7 juntos

Outros exemplos:
M 6,=F'256'
M 6,FULL
M 6,4(2,8)
M 6,4(2)
M 6,4(,8)
M 6,CPO+8
M 6,CPO+4(1)

D (Divide – Dividir)
Código de máquina 5D (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005,0006,0008

Esta instrução efetua uma divisão entre dois números binários.


O registrador especificado no 1º operando deve ser par.
O dividendo é um número binário de 64 bits contido no conjunto de registradores par-ímpar indicado no 1º
operando.
O divisor é um número contido num campo de memória de 4 bytes (especificado no 2º operando - em geral uma
Full-Word).
Após efetuada a divisão, o resto será colocado no registrador par do conjunto par-ímpar; o quociente será colocado
no registrador ímpar do conjunto par-ímpar. Exemplo:

D 6,CPOA

Neste caso, temos: Dividendo : Regs. 6 e 7 juntos


Divisor : CPOA
Quociente : Reg. 7
Resto : Reg. 6

Outros exemplos:

D 6,=F'256'
D 6,FULL
D 6,4(2,8)
D 6,4(2)
D 6,4(,8)
D 6,CPO+8
D 6,CPO+4(1)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 117
117

AH (Add Halfword – Somar hafword)


Código de máquina 4A (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0005,0008

Esta instrução efetua uma soma algébrica entre dois números binários.
Um deles esta localizado no registrador especificado no 1º operando, e o outro num campo de memória de 2 bytes
especificado no 2º operando (em geral uma Half-Word).
Antes de efetuada a soma pela UCP, o 2º operando é expandido na UCP para que fique com 32 bits (o bit de sinal
é expandido a esquerda); aí então é feita a adição. O resultado é colocado no registrador 1º operando. Ex:

AH 5,=H'259'
AH 5,HALF
AH 5,4(2,8)
AH 5,4(2)
AH 5,4(,8)

SH (Subtract Halfword – Subtrair hafword)


Código de máquina 4B (Instrução RX)
Condition code 00 Resultado = 0
01 Resultado < 0
10 Resultado > 0
11 Overflow
Interrupções Possíveis 0005,0008

Esta instrução efetua uma subtração algébrica entre dois números binários.
Um deles está localizado no registrador especificado no 1º operando, e o outro num campo de memória de 2 bytes
especificado no 2º operando (em geral uma Half-Word).
Antes de efetuada a subtração pela UCP, o 2º operando é expandido na UCP para que fique com 32 bits (o bit de
sinal é expandido a esquerda); aí então é feita a subtração. O resultado é colocado no registrador 1º operando. Ex:

SH 5,=H'259'
SH 5,HALF
SH 5,4(2,8)
SH 5,4(2)
SH 5,4(,8)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 118
118

MH (Multiply Halfword – Multiplicar hafword)


Código de máquina 4C (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis 0005

Esta instrução efetua uma multiplicação algébrica entre dois números binários.
Um deles esta localizado no registrador especificado no 1º operando, e o outro num campo de memória de 2 bytes
especificado no 2º operando (em geral uma Half-Word).
Antes de efetuada a multiplicação pela UCP, o 2º operando é expandido na UCP para que fique com 32 bits (o bit
de sinal é expandido a esquerda); aí então é feita a multiplicação. O Resultado é colocado no registrador 1º
operando.
OBS:- em caso de overflow (condição esta que não é indicada pelo condition code) o bit de sinal do produto pode
não estar correto.
Produto = 0, sinal positivo.
Ex:

MH 5,=H'259'
MH 5,HALF
MH 5,4(2,8)
MH 5,4(2)
MH 5,4(,8)

AL (Add Logical – Somar logicamente)


Código de máquina 5E (Instrução RX)
Condition code 00 Resultado = 0, não perde sinal
01 Resultado <> 0, não perde sinal
10 Resultado = 0, perde sinal
11 Resultado <> 0, perde sinal
Interrupções Possíveis 0005

Esta instrução efetua uma soma lógica entre dois números binários.
Um deles está localizado no registrador especificado no 1º operando. O outro, num campo de memória de 4 bytes
especificado no 2º operando (em geral uma Full-Word).
O resultado é colocado no registrador 1º operando. Ex:

AL 5,=F'259'
AL 5,FULL
AL 5,4(2,8)
AL 5,4(2)
AL 5,4(,8)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 119
119

SL (Subtract Logical – Subtrair logicamente)


Código de máquina 5F (Instrução RX)
Condition code 00 O condition code nunca fica em 00 após um SL
01 Resultado <> 0, não perde sinal
10 Resultado = 0, perde sinal
11 Resultado <> 0, perde sinal
Interrupções Possíveis 0005

Esta instrução efetua uma subtração lógica entre dois números binários.
Um deles localizado no registrador especificado no 1º operando.
O outro, num campo de memória de 4 bytes especificado no 2º operando (em geral uma Full-Word).
O resultado é colocado no registrador 1º operando. Ex:

SL 5,=F'259'
SL 5,FULL
SL 5,4(2,8)
SL 5,4(2)
SL 5,4(,8)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 120
120

4-16) OUTRAS INSTRUÇÕES

LA (Load Address – Carregar Endereço)


Código de máquina 41 (Instrução RX)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

Esta instrução calcula o endereço real do 2º operando especificado (um endereço qualquer de memória), e o coloca
nos 3 últimos bytes à direita do registrador, especificado no 1º operando). No primeiro byte à esquerda do
registrador são colocados zeros binários. Ex:

LA 5,TABELA
LA 5,CPO+17
LA 5,CPO+17(9)
LA 5,2(4,8)
LA 5,2(4)
LA 5,2(,8)
LA 5,2(5)
LA 5,0(5)
LA 5,200

TM (Test Under Mask – Testar com máscara)


Código de máquina 91 (Instrução SI)
Condition code 00 Todos os bits testados estão desligados, ou a
máscara é 0
01 Dos bits testados, alguns estão ligados e
outros desligados
10 Nunca o condition code fica em 10 após um TM
11 Todos os bits testados estão ligados
Interrupções Possíveis 0005

Esta instrução testa bits do campo de 1 byte especificado no 1º operando, a partir da máscara especificada no 2º
operando (termo auto-definido), a qual indica quais são os bits que devem ser testados.
Os bits ligados na máscara indicam que os seus correspondentes no 1º operando devem ser testados. Após o teste,
o condition code é posicionado. Ex:

TM BYTE,X'9C'

Neste caso, os bits 0, 3, 4 e 5 de BYTE serão testados. Outros exemplos:

TM CHAVE,B'10000001'
TM 0(4),240
TM 2(8),X'80'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 121
121

EX (Execute)
Código de máquina 44 (Instrução RX)
Condition code o seu posicionamento (ou não) depende da instrução
que for executada
Interrupções Possíveis 0003,0005,0006

A instrução especificada no 2º operando é modificada (temporariamente) de acordo com o conteúdo do registrador


especificado no 1º operando, e executada.
O segundo byte da instrução especificada sofre um OR de acordo com o conteúdo do último byte à direita do
registrador 1º operando; em seguida, a instrução é executada.
IMPORTANTE: 1) nenhum dos 2 operandos é alterado, pois o OR
é feito internamente, na UCP.
2) se o registrador 1º operando for o registrador
0, o OR não será feito.
Ex:

EX 5,MVC
.
.
.
MVC MVC 0,(0,12),=CL256'b'

SVC (Supervisor Call – Chamada ao Supervisor)


Código de máquina 0A (Instrução RR)
Condition code Permanece inalterado na PSW velha
Interrupções Possíveis Nenhuma

O seu formato de Máquina é o seguinte:

CO = 1 byte (código de operação)


SVC nro = 1 byte (número do SVC)

Esta instrução causa interrupção de programa, através de uma chamada ao programa supervisor, chamada essa que
pede a ele que execute alguma função.
O código especificado no único operando (entre 0 e 255) indica qual a função desejada. Ex:
SVC 0
SVC 7

Exemplos de SVC's de MVS:

X'00' (000) = EXCP/XDAP X'13' (019) = OPEN


X'01' (001) = WAIT/WAITR/PRTOV X'14' (020) = CLOSE
X'02' (002) = POST X'23' (035) = WTO/WTOR
X'04' (004) = GETMAIN X'24' (036) = WTL
X'05' (005) = FREEMAIN X'5D' (093) = TGET/TPUT
X'0B' (011) = TIME X'63' (099) = DYNALLOC
X'0D' (013) = ABEND X'6B' (107) = MODESET
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 122
122

MC (Monitor Call – Chamada do monitor)


Código de máquina AF (Instrução SI)
Condition code Permanece inalterado
Interrupções Possíveis 0006,0040

Esta instrução causa uma interrupção de programa, se o bit que mascara esta situação no registrador de controle 8
estiver ligado.
Os bits de máscara no registrador de controle 8 são os bits 16 a 31, e que correspondem às classes 0 a 15,
respectivamente.
No operando imediato, os 4 primeiros bits à esquerda (bits 8 a 11 da instrução) devem estar em zero. Os bits 12 a
15 (a metade da direita do segundo byte da instrução) especificam um número binário que indica qual a classe de
interrupção desejada; se o bit a ela referente no registrador de controle 8 estiver ligado, será causada a interrupção.
O endereço do segundo operando não faz referência a um campo de memória, e sim indicam um código que deve
ser colocado na fullword de endereço X'000156' de memória.
Se a máscara referente à interrupção desejada estiver desligada no registrador de controle 8, a instrução funciona
como um NOP. Exemplo:
MC MONITCOD,7

SPM (Set Program Mask – estabelecer máscara de programa)


Código de máquina 04 (Instrução RR)
Condition code fica com o conteúdo dos bits 2 e 3 do reg. 1º operando
Interrupções Possíveis nenhuma

Os bits 12 a 15 da instrução (onde haveria o registrador 2º operando) são ignorados. O conteúdo do registrador 1º
operando é usado como base para colocar o condition code e a máscara de programa na PSW atual.
Os bits 2 e 3 do registrador 1º operando tem seu conteúdo colocado no condition code da PSW atual, e os bits
4,5,6 e 7 tem seu conteúdo colocado na máscara de programa da PSW atual.
Os bits 0 e 1, e os bits 8 a 31 do registrador 1º operando são ignorados. Ex:
SPM 8

IPM (Insert Program Mask – inserir máscara de programa)


Código de máquina B222 (Instrução RRE)
Condition code Não é alterado
Interrupções Possíveis Nenhuma

Os bits 16-23 (terceiro byte) e 28-31 (segunda metade do quarto byte) da instrução são ignorados.
O condition code e a máscara de programa da PSW atual são colocados nos bits 2-3 )condition code) e 4-7
(máscara de programa) do registrador primeiro (e único) operando; Os bits 0-1 do registrador são zerados e os bits
8-31 não são alterados. Exemplo:
IPM 8
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 123
123

STCK (Store clock – armazenar clock)


Código de máquina B205 (Instrução S)
Condition code 00 O clock está em estado de set
01 O clock não está em estado de set
10 O clock está em estado de erro
11 Nunca fica em 11 após um STCK
Interrupções Possíveis 0004

O conteúdo do TOD clock é armazenado no campo de 8 bytes especificado como operando. O clock deve estar em
estado de set, stop ou não-set.
As posições à direita não providas pelo TOD clock são preenchidas com zeros.
Se o TOD clock está em estado de erro, o conteúdo do campo é imprevisível.
Se ele está não operacional, é colocado zeros no campo. Exemplo:
STCK DW

TS (Test and Set – Testar e posicionar)


Código de máquina 93 (Instrução S)
Condition code 00 Bit mais à esquerda desligado
01 Bit mais à esquerda ligado
10 Nunca fica em 10 após um TS
11 Nunca fica em 11 após um TS
Interrupções Possíveis 0004,0005

O segundo byte da instrução é ignorado.


O bit mais à esquerda do único byte do operando é testado para ver se está ligado ou desligado; o condition code é
posicionado, e o byte tem todos os seus bits ligados (fica com X'FF'). Exemplo:
TS BYTE

CS (Compare and Swap – Comparar e Trocar)


Código de máquina BA (Instrução RS)
Condition code 00 1º e 2º operandos são iguais, o 3. Operando foi
colocado no 2º operando
01 1º e 2º operandos são diferentes, o 2º operando
foi colocado no 1º operando
10 Nunca fica em 10 após um CS
11 Nunca fica em 11 após um CS
Interrupções Possíveis 0004,0005,0006

O primeiro e o terceiro operandos são registradores.


O segundo operando é um campo de memória (full-word).
O conteúdo do registrador 1º operando é comparado com o conteúdo da full-word. Se eles forem iguais, o
conteúdo do registrador 3º operando é colocado na full-word(store). Se eles forem diferentes, o conteúdo da full-
word é colocado no registrador 1º operando (load). Exemplo:
CS 5,8,FW
Antes: R5 00.BF.C4.20 R8 7D.48.C0.00 FW 00.BF.C4.20
Depois: R5 00.BF.C4.20 R8 7D.48.C0.00 FW 7D.48.C0.00

Outro exemplo: CS 5,8,FW


Antes: R5 00.BF.C4.20 R8 7D.48.C0.00 FW 00.FF.EE.DD
Depois: R5 00.FF.EE.DD R8 7D.48.C0.00 FW 00.FF.EE.DD

CDS (Compare Double and Swap – Comparar double e Trocar)


Código de máquina BB (Instrução RS)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 124
124

Condition code 00 1º e 2º operandos são iguais, o 3º operando foi


colocado no 2º operando
01 1º e 2º operandos são diferentes, o 2º operando
foi colocado no 1º operando
10 Nunca fica em 10 após um CDS
11 Nunca fica em 11 após um CDS
Interrupções Possíveis 0004,0005,0006

O primeiro e o terceiro operandos são registradores pares, e são considerados os registradores R1 e R1+1 como 1º
operando, e R3 e R3+1 como 3º operando.
O segundo operando é um campo de memória (double-word).
O conteúdo dos registradores R1 e R1+1 é comparado com o conteúdo da double word. Se eles forem iguais, o
conteúdo dos registradores R3 e R3+1 é colocado na double-word (store). Se eles forem diferentes, o conteúdo da
double-word é colocado nos registradores R1 e R1+1 (load). Exemplo:

CDS 4,8,DW

Antes: R4/R5 00.BF.C4.20.50.CC.A0.00


R8/R9 7D.48.C0.00.00.00.00.02
DW 00.BF.C4.20.50.CC.A0.00

Depois: R4/R5 00.BF.C4.20.50.CC.A0.00


R8/R9 7D.48.C0.00.00.00.00.02
DW 7D.48.C0.00.00.00.00.02

Outro exemplo: CDS 4,8,DW

Antes: R4/R5 00.CC.DD.EE.FF.FF.FF.FF


R8/R9 7D.48.C0.00.00.00.00.02
DW 00.BF.C4.20.50.CC.A0.00

Depois: R4/R5 00.BF.C4.20.50.CC.A0.00


R8/R9 7D.48.C0.00.00.00.00.02
DW 00.BF.C4.20.50.CC.A0.00
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 125
125

5 - MACRO-INSTRUÇÕES

5-1 INTRODUÇÃO

Os comandos de montagem condicional formam uma "linguagem" através da qual especifica-se ao montador
Assembler o que desejamos seja feito em tempo de montagem. Embora esses comandos possam ser usados mesmo
sem a especificação de macro-instruções, é nelas em que se aplica com maior intensidade toda a versatilidade
permitida através dos comandos de montagem condicional, cuja relação repetimos a seguir:

ACTR LCLA GBLA SETA ANOP MHELP


AGO LCLB GBLB SETB AREAD MNOTE
AIF LCLC GBLC SETC

Além desses comandos ao montador, outros existem, específicos para uso na elaboração de macro-instruções,
quais sejam:

MACRO MEXIT MEND

As macro instruções podem tanto residir numa biblioteca fonte (onde, normalmente, ele faz busca automática), ou
podem estar no próprio programa que as utiliza. Neste caso, elas devem preceder qualquer statement fonte, e sua
presença é detectada pelo montador através dos comandos que identificam o ponto onde ela(s) começa(m) e
termina(m).
Esses comandos são, respectivamente, o MACRO (indica o início de uma macro-instrução) e o MEND (indica o
seu fim).
O statement que se segue ao MACRO identifica, entre outras coisas, o nome da macro que se está especificando.
Vejamos o aspecto geral de um programa onde se deseja especificar duas macro-instruções, chamadas CALCULA
e EXIBE.

MACRO
(símbolo) CALCULA (parâmetros)
.
especificação da macro
.
MEND
MACRO
(símbolo) EXIBE (parâmetros)
.
especificação da macro
.
MEND
PROGRAMA CSECT
.
.
programa
.
.
.
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 126
126

5-2 SÍMBOLOS VARIÁVEIS E DE SEQUÊNCIA

Para que possamos explorar o universo das macro-instruções, dois conceitos se fazem necessários: SÍMBOLOS
VARIÁVEIS e SÍMBOLOS DE SEQÜÊNCIA, embora eles possam ser utilizados num programa,
independentemente da presença de macro-instruções.

Símbolos VARIÁVEIS são aqueles cujo primeiro caracter é o & (E comercial).

Eles permitem que se faça referência a uma variável, sendo, toda vez que são encontrados pelo montador,
substituídos pelo conteúdo da variável.

Vejamos, por exemplo, o símbolo variável &SYSDATE. Ele se refere a uma variável interna do montador
Assembler, cujo conteúdo é a data corrente, com 8 bytes; se utilizarmos o comando

MINEDATE DC C'&SYSDATE'

o montador irá gerar

+MINEDATE DC C'06/04/90'

Existem alguns símbolos variáveis já definidos pelo Assembler. São eles:

&SYSDATE = data (da montagem) no formato da data do sistema (dma ou mda);


se for dma o formato será 8 bytes com dd/mm/aa

&SYSTIME = hora (da montagem) com 5 bytes no formato hh.mm

&SYSNDX = contador de macro instruções chamadas. Vejamos este exemplo:


MACRO
MAK1
.
.
.
MEND
MACRO
MAK2
.
.
MAK1
.
.
MEND
.
.
MAK1 nesta chamada, &SYSNDX tem 1
.
MAK1 nesta chamada, &SYSNDX tem 2
.
MAK2 nesta chamada, dentro das instruções de MAK2
&SYSNDX tem 3 e dentro da MAK1 tem 4
. &SYSNDX sai da chamada de MAK2 com 4
.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 127
127
&SYSPARM = nele é colocado o conteúdo do SYSPARM (vindo via JCL), para ser
testado durante a montagem (não pode ser modificado).

&SYSLOC = contém o nome do location counter em uso no momento.

&SYSECT = tem o nome da seção (CSECT, DSECT ou START) ativa quando a macro
foi chamada. Exemplo:

MACRO
DEFDSEK
NOME DSECT
A1 DS CL4
A2 DS CL4
A3 DS CL4
&SYSECT CSECT
MEND

&SYSLIST = recurso para referenciar um parâmetro posicional, sem o uso do


seu símbolo variável. Pode ser usado como &SYSLIST(n) ou como
&SYSLIST(n,m). Supondo a macro

MACRO
MAK &P1,&P2,&P3
.
.
.
MEND

se nos referirmos a &SYSLIST(1) estaremos nos referenciando a &P1


&SYSLIST(2) refere-se a &P2 e &SYSLIST(3) refere-se a &P3.
Se a macro for chamada da seguinte forma:
MAK ALFA,BETA,GAMA
&SYSLIST(1) vale 'ALFA', &SYSLIST(2) vale 'BETA' e &SYSLIST(3)
vale 'GAMA'.
Pode-se também usar o conceito de sublista (subparâmetros).
Se a macro for chamada da seguinte forma:
MAK (AA,AB,AC),(BA,BB),CC
&SYSLIST(1,1) vale 'AA'
&SYSLIST(1,2) vale 'AB'
&SYSLIST(1,3) vale 'AC'
&SYSLIST(2,1) vale 'BA'
&SYSLIST(2,2) vale 'BB'
&SYSLIST(1) vale 'CC'

Se especificarmos n como zero, será pego o símbolo que tenha sido


colocado na chamada da macro.

Tanto n quanto m podem ser expressões.

Pode-se referenciar o atributo N'&SYSLIST, que tem o número de


operandos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 128
128
Além desses símbolos variáveis, podemos criar outros, respeitando as seguintes regras:
- máximo 8 caracteres
- primeiro caracter deve ser &
- os demais podem ser letras (A até Z), algarismos decimais (0 até 9), ou então um dos caracteres: $ # @

Os símbolos variáveis definidos através de LCLC ou GBLC podem ser subscritos. Neste caso deve-se usar a forma
&simbolo(p,t) sendo p a primeira posição a ser considerada do string e t o tamanho com que o string deve ser
considerado.

Aos símbolos variáveis e aos ordinários estão associados atributos que descrevem algumas características dos
campos. Os principais atributos são:

L'campo = ATRIBUTO DE TAMANHO


indica o tamanho do campo
T'campo = ATRIBUTO DE TIPO
indica o tipo de campo. Pode ter, entre outros:
O = operando omitido
I = instrução de máquina
C = constante tipo C
P = constante tipo P
S'campo = ATRIBUTO DE ESCALA
pode ser usado para campos numéricos. No caso de campos binários
tem o valor do modificador de escala, e no caso de campos decimais
tem o número de dígitos especificados após o ponto decimal.
I'campo = ATRIBUTO DE INTEIRO
tem um valor que depende do tamanho e do atributo de escala do
campo
K'simbolovariável = ATRIBUTO DE CONTAGEM
tem um número que indica quantos caracteres tem um
operando de uma macro instrução ou quantos caracteres
tem um campo do Assembler definido através do SET
N'simbolovariável = ATRIBUTO DE NÚMERO
contém o número de sub-operandos de um operando de
uma macro instrução
D'simboloordinário = ATRIBUTO DE DEFINIÇÃO
indica se o símbolo referenciado foi definido antes
do statement onde o teste usando o D' é feito. Este
atributo não tem conteúdo; simplesmente indica uma
condição (que pode ser falsa ou verdadeira) para uso
no AIF.

Quanto aos SÍMBOLOS DE SEQUÊNCIA, eles são identificados pelo fato de o primeiro caracter ser um ponto
(.). Os restantes podem ser no máximo 7, e pode-se usar as letras, os algarismos decimais e os símbolos $ # e @.
Os símbolos de sequência são usados para identificar pontos do programa-fonte, de tal forma que possam ser
referenciados em comandos que efetuem desvios condicionais ou incondicionais a esses pontos. Observar que
esses símbolos não fazem parte da Tabela de Símbolos Ordinários, e servem somente para orientação do montador
Assembler, em tempo de montagem, portanto. Adiante veremos mais alguns detalhes.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 129
129

5-3 EXPRESSÕES

Uma expressão é um conjunto de termos (1 a 19) e dos respectivos operadores aritméticos, que podem ser:
símbolos ordinários, símbolos variáveis, termos auto-definidos e referências a atributos. Na realidade são as
mesmas expressões vistas no item 2-4-2; elas podem ter como termos também os símbolos variáveis.

Uma expressão pode ser usada para especificar: um endereço, um tamanho, um modificador (num DC ou DS), um
fator de duplicação ou um operando.

As expressões podem ser absolutas (independem dos endereços dos símbolos) ou relocáveis (variam de acordo
com o endereço dos símbolos nela usados).

Uma expressão pode ter no máximo 6 níveis de parênteses.

Os operadores podem operar sobre um termo ou sobre dois termos. Ex:


+A opera sobre um termo (só pode ser soma (+) ou subtração (-)
A-B opera sobre dois termos; pode ser soma (+), subtração (-),
divisão (/) ou multiplicação (*)

A resolução das expressões é efetuada seguindo-se as seguintes regras:


- cada termo é calculado individualmente
- se a expressão tiver parênteses, o Assembler calcula as expressões mais
internas, considerando o seu resultado como termo da expressão que tinha
o parênteses, e assim por diante até a eliminação de todos os níveis de
parênteses
- as operações aritméticas são efetuadas da esquerda para a direita;
primeiro são resolvidas as operações de operadores de um termo,
depois as operações de multiplicação e divisão de operadores de 2 termos
e depois as de soma e subtração de operadores de 2 termos
- na divisão, o resultado considerado é o cociente inteiro, sendo o resto
desprezado
- divisão por zero resulta zero
- um termo (ou valores intermediários) pode estar entre -231 e +231-1
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 130
130

5-4 VARIÁVEIS DE MONTAGEM : DECLARAÇÃO E ATRIBUIÇÃO DE CONTEÚDO

Podemos nos utilizar de variáveis próprias, por nós definidas, e que nos auxiliem nos controles necessários à
expansão da macro.

Existem dois tipos de variáveis: LOCAIS e GLOBAIS.


As variáveis LOCAIS tem "vida" durante a resolução da macro, enquanto as GLOBAIS são válidas durante toda a
montagem.

Para a declaração das variáveis locais, devemos nos utilizar dos comandos LCLA, LCLB e LCLC.

O comando LCLA declara variáveis locais aritméticas decimais.


O comando LCLB declara variáveis locais aritméticas binárias.
O comando LCLC declara variáveis locais alfanuméricas (character).

Não se deve especificar nada na parte de símbolos, e na parte de operandos especifica-se os símbolos das variáveis
que se deseja declarar.

Exemplos:

LCLA &VL1
LCLA &VLA2,&VLA3

LCLB &VLB1
LCLB &VLB2,&VLB3

LCLC &VLC1
LCLC &VLC2,&VLC3

Para a colocação de valores nessas variáveis, utiliza-se os comandos SETA, SETB e SETC, respectivamente para
as variáveis definidas através do LCLA, LCLB e LCLC.

Na parte do símbolo do comando desejado, especifica-se o nome da variável onde se deseja seja colocado um
valor.
Na parte de operandos coloca-se uma expressão cujo resultado seja aquele que se deseja como conteúdo da
variável.

Exemplos:

&VLA1 SETA 2
&VLB1 SETB 101
&VLC1 SETC 'GENTE'
&VLA2 SETA 2+&VLA1
&VLB2 SETB 1001+11
&VLC2 SETC 'ABCDEF'
&VLA3 SETA 2+L'CAMPO
&VLB3 SETB 1+11+111
&VLC3 SETC 'MUDOU'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 131
131
Para a declaração das variáveis globais, devemos nos utilizar dos comandos GBLA, GBLB e GBLC.

O comando GBLA declara variáveis globais aritméticas decimais.


O comando GBLB declara variáveis globais aritméticas binárias.
O comando GBLC declara variáveis globais alfanuméricas (character).

Não se deve especificar nada na parte de símbolos, e na parte de operandos especifica-se os símbolos das variáveis
que se deseja declarar.

Exemplos:

GBLA &VGA1
GBLA &VGA2,&VGA3

GBLB &VGB1
GBLB &VGB2,&VGB3

GBGB &VGB1
GBLC &VGC2,&VGC3

Para a colocação de valores nessas variáveis, utiliza-se os comandos SETA, SETB e SETC, respectivamente para
as variáveis definidas através do GBLA, GBLB e GBLC.

Na parte do símbolo do comando desejado, especifica-se o nome da variável onde se deseja seja colocado um
valor.
Na parte de operandos coloca-se uma expressão cujo resultado seja aquele que se deseja como conteúdo da
variável.

Exemplos:

&VGA1 SETA 2
&VGB1 SETB 101
&VGC1 SETC 'GENTE'
&VGA2 SETA 2+&VLA1
&VGB2 SETB 1001+11
&VGC2 SETC 'ABCDEF'
&VGA3 SETA 2+L'CAMPO
&VGB3 SETB 1+11+111
&VGC3 SETC 'MUDOU'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 132
132

5-5 ANOP, MNOTE E AREAD

ANOP

O comando ANOP causa uma não operação pelo montador Assembler, permitindo identificar um ponto do
programa fonte através de um símbolo de sequência, sem a necessidade de ter alguma operação associada.
Exemplo:
MACRO
YYY
.
.
.
.TESTE ANOP
.
.
.
MEND

MNOTE

O comando MNOTE tem por finalidade exibir uma mensagem de aviso ao programa. O aviso pode ser tanto um
comentário quanto uma mensagem de erro. Seu formato é o seguinte:

MNOTE codigoseveridade,'mensagem'

O código de severidade pode ser * , o que indica simples comentário; a vantagem em relação ao * na posição 1 é
que o Assembler faz no MNOTE a substituição dos símbolos variáveis. Exemplo:

MACRO
QUALKER &PARAM
MNOTE *,'O PARAMETRO INFORMADO FOI &PARAM'
DC C'&PARAM'
MEND

Uma chamada da macro desta forma: QUALKER ALBERTO ao ser expandida geraria:

+ *,O PARAMETRO INFORMADO FOI ALBERTO


+ DC C'ALBERTO'

O código de severidade, quando diferente de * (um número de 0 a 255) indica um erro de montagem, e está
associado ao PARM do montador. Se o sub-parâmetro FLAG do PARM estiver com FLAG(0), que é o default, as
mensagens de erro dos MNOTE com código de severidade zero ou maior serão listadas como erro. FLAG(8) irá
suprimir mensagens de erro para as mensagens com código de severidade 0 a 7.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 133
133
AREAD

Este comando tem por função colocar um valor num string definido através do comando LCLC ou GBLC. O
conteúdo a ser colocado é o conteúdo do(s) "statement(s)" seguinte(s) à chamada da macro que contenha o(s)
comando(s) AREAD. Seu formato é o seguinte:

simbolovariavel AREAD ou
simbolovariavel AREAD NOSTMT ou
simbolovariavel AREAD NOPRINT

Se não for especificado o operando, o statement lido é impresso e a ele é associado um número (número de
statement); se for especificado NOSTMT, o statement lido é listado, mas a ele não é atribuído um número; e se for
especificado NOPRINT, o statement lido não é listado, e a ele também não é atribuído um número. Exemplo:

Se este for o fonte do programa:

MACRO
MEXAR
LCLC &VAR1,&VAR2
&VAR1 AREAD
DC C'&VAR1'
&VAR2 AREAD
DC C'&VAR2'
MEND
PROGRAMA CSECT
MEXAR
PRIMEIRA LEITURA VIA AREAD DA PRIMEIRA CHAMADA DA MEXAR
SEGUNDA LEITURA VIA AREAD DA PRIMEIRA CHAMADA DA MEXAR
MEXAR
PRIMEIRA LEITURA DA SEGUNDA CHAMADA DA MEXAR
SEGUNDA LEITURA DA SEGUNDA CHAMADA DA MEXAR
END

O programa gerado terá:

PROGRAMA CSECT
MEXAR
+ DC C'PRIMEIRA LEITURA VIA AREAD DA PRIMEIRA CHAMADA DA MEXAR'
+ DC C'SEGUNDA LEITURA VIA AREAD DA PRIMEIRA CHAMADA DA MEXAR'
MEXAR
+ DC C'PRIMEIRA LEITURA DA SEGUNDA CHAMADA DA MEXAR '
+ DC C'SEGUNDA LEITURA DA SEGUNDA CHAMADA DA MEXAR'
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 134
134

5-6 MHELP

O comando MHELP tem por finalidade controlar um conjunto de recursos de trace e dump para macros, de forma
a facilitar a sua depuração.
Para tanto, o Assembler usa uma full-word, a qual tem um número que indica o valor máximo desejado para o
&SYSNDX (se o valor for maior que 255 - quando &SYSNDX alcançar o valor, a geração da macro é terminada),
e, além disso, o último byte à direita (byte 3) indica as opções de trace.
IMPORTANTE: o número é tratado como único, mas tem funções ambíguas.

BYTE 3 = BIT 0 = (B'10000000') = MHELP supression.


se ligado, anula as opções em vigor do MHELP.
BIT 1 = (B'01000000') = macro hex dump.
usada em conjunto com as opções dos bits 5, 4 e 3, causará
uma listagem (dump) dos parâmetros e dos símbolos carater
(SETC) em EBCDIC e em hexa. Os símbolos do sistema serão
listados somente em EBCDIC.
BIT 2 = (B'00100000') = global supression.
suprime a listagem dos símbolos globais nas condições
pedidas pelos bits 4 e 5.
BIT 3 = (B'00010000') = macro entry dump.
causa a listagem (dump) dos valores dos parâmetros logo
após a chamada da macro.
BIT 4 = (B'00001000') = macro exit dump.
causa a listagem (dump) dos valores dos símbolos variáveis
com valores colocados pelos comandos SET, antes de MEXIT ou
de MEND.
BIT 5 = (B'00000100') = macro AIF dump
causa a listagem (dump) dos valores dos símbolos variáveis
com valores colocados pelos comandos SET, antes de cada AIF.
BIT 6 = (B'00000010') = macro branch trace.
se ligado, gera uma linha de trace para cada AGO ou AIF
que ocasionaram um desvio. Nessa linha indica o statement
"de" onde foi efetuado o desvio e o statement "para" onde
foi efetuado o desvio. Esta opção não fica ativa para macros
de bibliotecas.
BIT 7 = (B'00000001') = macro call trace.
controla trace de chamada de macro (gera uma linha com
o nome da macro chamada, seu nível de aninhamento e o valor
do &SYSNDX.

Exemplos:

MHELP 256 limita a &SYSNDX a 256


MHELP 1 trace macro calls
MHELP 256+1 limita &SYSNDX a 257 e faz trace dos macros calls
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 135
135

5-7 DESVIOS - AGO, ACTR E AIF

O comando AGO indica que o montador deve dirigir-se, interpretativamente, a um ponto do programa fonte
identificado através de um símbolo de sequência.
O comando ACTR indica a quantidade máxima de desvios interpretados que podem ser efetuados através do AGO
ou do AIF (veja próximo tópico). Ex:

MACRO
XXXXX
LCLA &A
ACTR 1000
.
.
.
.LUP ANOP
.
.
AGO .LUP
.
.
MEND

O comando AIF tem por função efetuar um teste (em tempo de montagem) e desviar condicionalmente para
determinado ponto nos statements que compõem a macro-instrução.

O seu formato é:

(símbolo de AIF (expressão operador expressão)símbolodesequência


sequência)

Vejamos alguns exemplos:

AIF (&A LT &B).AMENOR


.TESTE AIF ('&PRM1' NE '').VEIOPR1
AIF (&VGA1+1 EQ 99).JAFEZ

Os operadores podem ser:

EQ (equal to - igual a)
NE (not equal to - diferente de)
LT (less than - menor que)
GT (greater than - maior que)
LE (less or equal to - menor ou igual)
GE (greater than or equal to - maior ou igual).

Dentro da especificação pode-se também utilizar os operadores lógicos AND ou OR, como por exemplo:

AIF (&A GT 5 OR &A LT 9).NAFAIXA


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 136
136

5-8 PARÂMETROS POSICIONAIS E KEYWORD

Uma macro instrução pode ter dois tipos de parâmetros: posicionais e keyword.
Pode ter também os dois tipos, desde que os posicionais sejam especificados antes dos keyword, e estes em
qualquer ordem.

Os parâmetros POSICIONAIS são aqueles que são identificados pela sua posição relativa no conjunto de
parâmetros. Eles necessitam ser especificados na ordem adequada, e, caso se queira omitir algum, isso deve ser
indicado através da presença de uma vírgula. Exemplo:

MACRO
MACPA1 &P1,&P2,&P3
X DC A(&P1)
Y DC A(&P2)
Z DC A(&P3)
MEND

Neste caso, o campo X será definido com conteúdo dependente do primeiro parâmetro, o campo Y com conteúdo
dependente do segundo parâmetro e o campo Z com conteúdo dependente do terceiro parâmetro.
A chamada da macro, especificando-se os três parâmetros, deve ser :

MACPA1 ALFA,BETA,GAMA

Caso fosse omitido algum dos parâmetros, isso ocasionaria erro de montagem, pois haveria a tentativa de gerar
uma constante de endereço de uma expressão não informada.
Se especificássemos MACPA1 FLD,,CPO então seria gerado:

DC A(FLD)
DC A()
DC A(CPO)
onde o segundo comando DC tem erro de sintaxe.
Para que seja possível omitir um parâmetro, quase sempre deve ser feito um teste pela própria macro a respeito de
sua existência, de forma a gerar somente o que for necessário em função da omissão do(s) parâmetro(s). O teste
deve ser feito com o comando AIF, da seguinte forma:

ASSIM OU ENTÃO

MACRO MACRO
MACPA1 &P1,&P2,&P3 MACPA1 &P1,&P2,&P3
AIF ('&P1' EQ '').NG1 AIF (T'&P1 EQ 'O').NG1
X DC A(&P1) X DC A(&P1)
.NG1 AIF ('&P2' EQ '').NG2 .NG1 AIF (T'&P2 EQ 'O').NG2
Y DC A(&P2) Y DC A(&P2)
.NG2 AIF ('&P3' EQ '').NG3 .NG2 AIF (T'&P3 EQ 'O').NG3
Z DC A(&P3) Z DC A(&P3)
.NG3 ANOP .NG3 ANOP
MEND MEND
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 137
137
De uma forma ou de outra, à medida que o teste é feito e que o comando DC é "bypassado" caso o parâmetro tenha
sido omitido, não seria feita a tentativa de gerar o DC de uma expressão não fornecida, e, consequentemente, não
haveria erro de montagem devido a isso.

Os parâmetros KEYWORD são especificados através de palavras-chave (seguidas do carater =), o que permite ao
montador identificá-lo. Devido a isso, podem ser especificados em qualquer ordem e ser usados na chamada da
macro também em qualquer ordem.
Além disso, os parâmetros keyword permitem que se coloque um valor "default"; neste caso, se não forem
especificados na chamada da macro, será entendido pelo montador como se ele tivesse sido especificado tendo
como conteúdo o valor do default colocado na definição da macro. Vejamos o seguinte exemplo:

MACRO
MACPA1 &P2=,&P1=,&P3=
X DC A(&P1)
Y DC A(&P2)
Z DC A(&P3)
MEND

Neste caso, nenhum dos parâmetros tem valor default, de forma que se fosse feita uma chamada da macro com
MACPA1 P3=FLD,P2=FFF,P1=TT seria gerado:

DC A(TT)
DC A(FFF)
DC A(FLD)

Mas, se a chamada fosse feita com MACPA1 P3=FLD,P1=TT seria gerado:

DC A(TT)
DC A()
DC A(FLD)

Caso a macro tivesse sido definida assim:

MACRO
MACPA1 &P2=KKK,&P1=WWW,&P3=YYY
X DC A(&P1)
Y DC A(&P2)
Z DC A(&P3)
MEND

e a sua chamada fosse MACPA1 P3=FLD,P1=TT seria gerado:

DC A(TT)
DC A(KKK)
DC A(FLD)

Portanto, se não houver valores default, e o conteúdo for necessário para efeito de sintaxe, cabe à macro testar se
o(s) parâmetro(s) foi(foram) informado(s) ou não, para gerar os statements adequadamente.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 138
138

5-9 FUNCIONAMENTO DAS MACROS - EXEMPLOS

5-9-1 Macro sem símbolo e sem parâmetros

MACRO
SIMPLES
DC C'CAMPO GERADO PELA MACRO SIMPLES'
MEND
EXMAC001 START
.
.
.
SIMPLES
+ DC C'CAMPO GERADO PELA MACRO SIMPLES'
.
.
.
SIMPLES
+ DC C'CAMPO GERADO PELA MACRO SIMPLES'
.
.
.
END

5-9-2 Macro com símbolo fixo e sem parâmetros

MACRO
MACSIM
NOME DC C'CAMPO GERADO PELA MACRO MACSIM'
MEND
EXMAC002 START
.
.
.
MACSIM
+NOME DC C'CAMPO GERADO PELA MACRO MACSIM'
.
.
.
MACSIM
+NOME DC C'CAMPO GERADO PELA MACRO MACSIM'
.
.
.
END

Observar que neste caso, haveria erro de montagem, à medida em que foi definido mais do que um campo com o
mesmo símbolo. Cabe ao programador, sabendo das convenções e limitações de uma macro em particular, não
transgredir essas normas, pois o erro não é, neste caso, da macro, e sim originário do fato de ela ter sido
impropriamente chamada duas vezes.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 139
139

5-9-3 Macro com símbolo variável e sem parâmetros

MACRO
MACVAR
&LAB DC C'CAMPO GERADO PELA MACRO MACVAR'
MEND
EXMAC003 START
.
.
.
ANA MACVAR
+ANA DC C'CAMPO GERADO PELA MACRO MACVAR'
.
.
.
BETE MACVAR
+BETE DC C'CAMPO GERADO PELA MACRO MACVAR'
.
.
.
END

5-9-4 Macro com símbolo variável e com 1 parâmetro posicional

MACRO
&JJJ MACTOK &VAL
&JJJ DC F'&VAL'
MEND
EXMAC004 START
.
.
CIDA MACTOK 256
+CIDA DC F'256'
.
.
DIANA MACTOK 100
+DIANA DC F'100'
.
.
ELISA MACTOK Esta chamada causaria erro de montagem
+ELISA DC F''
.
.
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 140
140

5-9-5 Macro com símbolo variável e com 2 parâmetros posicionais

MACRO
&KKK MACTIK &VALX,&VALY
&KKK DC F'&VALX,&VALY'
MEND
EXMAC005 START
.
.
MACTIK -1,-2
+ DC F'-1,-2'
.
.
FERNANDA MACTIK 256,100
+FERNANDA DC F'256,100'
.
.
GILDA MACTIK 100,256
+GILDA DC F'100,256'
.
.
HEBE MACTIK 300 Esta chamada causaria erro de montagem
+HEBE DC F'300,'
.
.
IEDA MACTIK ,300 Esta chamada causaria erro de montagem
+IEDA DC F',300'
.
.
END

5-9-6 Macro com símbolo variável e com 1 parâmetro keyword (sem default)

MACRO
&LL MACTAK &VAL=
&LL DC F'&VAL'
MEND
EXMAC006 START
.
.
JULIA MACTAK VAL=256
+JULIA DC F'256'
.
.
.
MACTAK Esta chamada causaria erro de montagem,, pois
. não foi especificado o parâmetro
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 141
141

5-9-7 Macro com símbolo variável e com 1 parâmetro keyword (com default)

MACRO
&MVVB MACTEK &VAL=06
&MVVB DC F'&VAL'
MEND
EXMAC007 START
.
.
MACTEK VAL=256
+ DC F'256'
.
.
MACTEK
+ DC F'06'
.
.
KAREN MACTEK
+KAREN DC F'06'
.
.
LIGIA MACTEK VAL=88
+LIGIA DC F'88'
.
.
END

5-9-8 Macro com símbolo variável e com 2 parâmetros keyword (sem default)

MACRO
&TA MACTUK &VAL=,&NUM=
&TA DC F'&VAL,&NUM'
MEND
EXMAC008 START
.
.
MARTA MACTUK VAL=22,NUM=33
+MARTA DC F'22,33'
.
.
MACTUK NUM=55,VAL=77
+ DC F'77,55'
.
.
MACTUK NUM=3 Esta chamada causaria erro de montagem,
. pois VAL não foi especificado
.
MACTUK VAL=99 Esta chamada causaria erro de montagem,
. pois NUM não foi especificado
.
MACTUK Esta chamada causaria erro de montagem
. pois não foram especificados parâmetros
.
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 142
142

5-9-9 Macro com símbolo variável e com 2 parâmetros keyword (com default)

MACRO
&TOO MACTOO &VAL=19,&NUM=54
&TOO DC F'&VAL,&NUM'
MEND
EXMAC009 START
.
.
NADIA MACTOO VAL=22,NUM=33
+NADIA DC F'22,33'
.
.
MACTOO NUM=55,VAL=77
+ DC F'77,55'
.
.
MACTOO NUM=3
+ DC F'19,3'
.
.
MACTOO VAL=99
+ DC F'99,54'
.
.
MACTOO
+ DC F'19,54'
.
.
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 143
143

A P E N D I C E S

APÊNDICE A - INSTRUÇÕES DE MÁQUINA


APÊNDICE B - TABELA DE POTÓNCIAS
APÊNDICE C - TABELA DE CARACTERES EBCDIC
APÊNDICE D - CARACTERES DE CONTROLE (Impressão)
APÊNDICE E - INTERRUPÇÕES POR ERRO DE PROGRAMA
APÊNDICE F - TRUQUES ÚTEIS A PROGRAMAS ASSEMBLER
APÊNDICE G - ALGUMAS MACROS MVS
APÊNDICE H - EXEMPLO DE PROGRAMA EM MVS
APÊNDICE I - ALGUMAS MACROS VSE
APÊNDICE J - EXEMPLO DE PROGRAMA EM VSE
APÊNDICE K - ALGUMAS MACROS VM
APÊNDICE L - EXEMPLO DE PROGRAMA EM VM
APÊNDICE M - MACROS XEGUEI E TCHAU
APÊNDICE N - EXEMPLO 1 DE SUBROTINA
APÊNDICE O - EXEMPLO 2 DE SUBROTINA
APÊNDICE P - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 1
APÊNDICE Q - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 2
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 144
144

APÊNDICE A - INSTRUÇÕES

Esta tabela apresenta o conjunto de instruções da arquitetura ESA.


Está dividida em duas colunas principais: a da esquerda, apresenta as instruções por ordem alfabética de seu
mnemônico Assembler; a da direita as apresenta por ordem de código (hexa) de operação.

Cada uma das duas colunas principais contém as seguintes informações:

a) código mnemônico Assembler.


b) código de operação
c) tipo de instrução
d) posicionamento do Condition Code (se tiver S, a instrução o posiciona)
e) PF = instrução de ponto flutuante
P = instrução privilegiada
Q = instrução semi-privilegiada
I = instrução interrompível

----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

------ 00 ----- - --- ------ 00 ----- - ---


------ 02 ----- - --- PR 0101 E S Q
------ 03 ----- - --- UPT 0102 E S I
------ 08 ----- - --- ------ 02 ----- - ---
------ 09 ----- - --- ------ 03 ----- - ---
------ 52 ----- - --- SPM 04 RR
------ 53 ----- - --- BALR 05 RR
------ 61 ----- - --- BCTR 06 RR
------ 62 ----- - --- BCR 07 RR
------ 63 ----- - --- ------ 08 ----- - ---
------ 64 ----- - --- ------ 09 ----- - ---
------ 65 ----- - --- SVC 0A RR
------ 66 ----- - --- BSM 0B RR
------ 71 ----- - --- BASSM 0C RR
------ 72 ----- - --- BASR 0D RR
------ 73 ----- - --- MVCL 0E RR S I
------ 74 ----- - --- CLCL 0F RR S I
------ 75 ----- - --- LPR 10 RR S
------ 76 ----- - --- LNR 11 RR S
------ 77 ----- - --- LTR 12 RR S
------ 81 ----- - --- LCR 13 RR S
------ 84 ----- - --- NR 14 RR S
------ 85 ----- - --- CLR 15 RR S
------ 9C ----- - --- OR 16 RR S
------ 9D ----- - --- XR 17 RR S
------ 9E ----- - --- LR 18 RR
------ 9F ----- - --- CR 19 RR S
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 145
145
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

------ A0 ----- - --- AR 1A RR S


------ A1 ----- - --- SR 1B RR S
------ A2 ----- - --- MR 1C RR
------ A3 ----- - --- DR 1D RR
------ A7 ----- - --- ALR 1E RR S
------ A8 ----- - --- SLR 1F RR S
------ A9 ----- - --- LPDR 20 RR S PF
------ AA ----- - --- LNDR 21 RR S PF
------ AB ----- - --- LTDR 22 RR S PF
------ B0 ----- - --- LCDR 23 RR S PF
------ B3 ----- - --- HDR 24 RR PF
------ B4 ----- - --- LRDR 25 RR PF
------ B5 ----- - --- MXR 26 RR PF
------ B8 ----- - --- MXDR 27 RR PF
------ B9 ----- - --- LDR 28 RR PF
------ BC ----- - --- CDR 29 RR S PF
------ C0 ----- - --- ADR 2A RR S PF
------ C1 ----- - --- SDR 2B RR S PF
------ C2 ----- - --- MDR 2C RR PF
------ C3 ----- - --- DDR 2D RR PF
------ C4 ----- - --- AWR 2E RR S PF
------ C5 ----- - --- SWR 2F RR S PF
------ C6 ----- - --- LPER 30 RR S PF
------ C7 ----- - --- LNER 31 RR S PF
------ C8 ----- - --- LTER 32 RR S PF
------ C9 ----- - --- LCER 33 RR S PF
------ CA ----- - --- HER 34 RR PF
------ CB ----- - --- LRER 35 RR PF
------ CC ----- - --- AXR 36 RR S PF
------ CD ----- - --- SXR 37 RR S PF
------ CE ----- - --- LER 38 RR PF
------ CF ----- - --- CER 39 RR S PF
------ D0 ----- - --- AER 3A RR S PF
------ D8 ----- - --- SER 3B RR S PF
------ E0 ----- - --- MER 3C RR PF
------ E1 ----- - --- DER 3D RR PF
------ E2 ----- - --- AUR 3E RR S PF
------ E3 ----- - --- SUR 3F RR S PF
------ E6 ----- - --- STH 40 RX
------ E7 ----- - --- LA 41 RX
------ E9 ----- - --- STC 42 RX
------ EA ----- - --- IC 43 RX
------ EB ----- - --- EX 44 RX
------ EC ----- - --- BAL 45 RX
------ ED ----- - --- BCT 46 RX
------ EE ----- - --- BC 47 RX
------ EF ----- - --- LH 48 RX
------ F4 ----- - --- CH 49 RX S
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 146
146
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

------ F5 ----- - --- AH 4A RX S


------ F6 ----- - --- SH 4B RX S
------ F7 ----- - --- MH 4C RX
------ FE ----- - --- BAS 4D RX
------ FF ----- - --- CVD 4E RX
A 5A RX S CVB 4F RX
AD 6A RX S PF ST 50 RX
ADR 2A RR S PF LAE 51 RX
AE 7A RX S PF ------ 52 ----- -
AER 3A RR S PF ------ 53 ----- -
AH 4A RX S N 54 RX S
AL 5E RX S CL 55 RX S
ALR 1E RR S O 56 RX S
AP FA SSt1t2 S X 57 RX S
AR 1A RR S L 58 RX
AU 7E RX S PF C 59 RX S
AUR 3E RR S PF A 5A RX S
AW 6E RX S PF S 5B RX S
AWR 2E RR S PF M 5C RX
AXR 36 RR S PF D 5D RX
BAKR B240 RRE Q AL 5E RX S
BAL 45 RX SL 5F RX S
BALR 05 RR STD 60 RX
BAS 4D RX ------ 61 ----- -
BASR 0D RR ------ 62 ----- -
BASSM 0C RR ------ 63 ----- -
BC 47 RX ------ 64 ----- -
BCR 07 RR ------ 65 ----- -
BCT 46 RX ------ 66 ----- -
BCTR 06 RR MXD 67 RX
BSM 0B RR LD 68 RX
BXH 86 RS CD 69 RX S
BXLE 87 RS AD 6A RX S
C 59 RX S SD 6B RX S
CD 69 RX S PF MD 6C RX
CDR 29 RR S PF DD 6D RX
CDS BB RS S AW 6E RX S
CE 79 RX S PF SW 6F RX S
CER 39 RR S PF STE 70 RX
CFC B21A S S ----- 71 - - ---
CH 49 RX S ------ 72 ----- -
CL 55 RX S ------ 73 ----- -
CLC D5 SS/L S ------ 74 ----- -
CLCL 0F RR S ------ 75 ----- - ---
CLI 95 SI S ------ 76 ----- - ---
CLM BD RS S ------ 77 ----- -
CLR 15 RR S LE 78 RX
CP F9 SSt1t2 S CE 79 RX S
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 147
147
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

CPYA B24D RRE AE 7A RX S PF


CR 19 RR S SE 7B RX S PF
CS BA RS S ME 7C RX PF
CSCH B230 S S P DE 7D RX PF
CVB 4F RX AU 7E RX S PF
CVD 4E RX SU 7F RX S PF
D 5D RX SSM 80 S P
DD 6D RX PF ------ 81 ----- - ---
DDR 2D RR PF LPSW 82 S (1) P
DE 7D RX PF Diagnose 83 - (2)
DER 3D RR PF ------ 84 ----- - ---
Diagnose 83 - (2) ------ 85 ----- - ---
DP FD SSt1t2 BXH 86 RS
DR 1D RR BXLE 87 RS
DXR B22D RRE PF SRL 88 RS
EAR B24F RRE SLL 89 RS
ED DE SS/L S SRA 8A RS S P
EDMK DF SS/L S SLA 8B RS S
EPAR B226 RRE Q SRDL 8C RS
EREG B249 RRE Q SLDL 8D RS
ESAR B227 RRE Q SRDA 8E RS S
ESTA B24A RRE S Q SLDA 8F RS S
EX 44 RX STM 90 RS
HDR 24 RR PF TM 91 SI S
HER 34 RR PF MVI 92 SI
HSCH B231 S S P TS 93 S S
IAC B224 RRE S Q NI 94 SI S
IC 43 RX CLI 95 SI S
ICM BF RS S OI 96 SI S
IPK B20B S Q XI 97 SI S
IPM B222 RRE LM 98 RS
IPTE B221 RRE P TRACE 99 RS P
ISKE B229 RRE P LAM 9A RS
IVSK B223 RRE Q STAM 9B RS
L 58 RX ------ 9C ----- - ---
LA 41 RX ------ 9D ----- - ---
LAE 51 RX ------ 9E ----- - ---
LAM 9A RS ------ 9F ----- - ---
LASP E500 SSE S P ------ A0 ----- - ---
LCDR 23 RR S PF ------ A1 ----- - ---
LCER 33 RR S PF ------ A2 ----- - ---
LCR 13 RR S ------ A3 ----- - ---
LCTL B7 RS P VAE A400 VST
LD 68 RX PF VSE A401 VST
LDR 28 RR PF VME A402 VST
LE 78 RX PF VDE A403 VST
LER 38 RR PF VMAE A404 VST
LH 48 RX VMSE A405 VST
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 148
148
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

LM 98 RS VMCE A406 VST


LNDR 21 RR S PF VACE A407 VST
LNER 31 RR S PF VCE A408 VST
LNR 11 RR S VL A409 VST
LPDR 20 RR S PF VLE A409 VST
LPER 30 RR S PF VLM A40A VST
LPR 10 RR S VLME A40A VST
LPSW 82 S (1) P VLY A40B VST
LR 18 RR VLYE A40B VST
LRA B1 RX S P VST A40D VST
LRDR 25 RR PF VSTE A40D VST
LRER 35 RR PF VSTM A40E VST
LTDR 22 RR S PF VSTME A40E VST
LTER 32 RR S PF VSTK A40F VST
LTR 12 RR S VSTKE A40F VST
LURA B24B RRE P VAD A410 VST
M 5C RX VSD A411 VST
MC AF SI VMD A412 VST
MD 6C RX PF VDD A413 VST
MDR 2C RR PF VMAD A414 VST
ME 7C RX PF VMSD A415 VST
MER 3C RR PF VMCD A416 QST
MH 4C RX VACD A417 VST
MP FC SSt1t2 VCD A418 VST
MR 1C RR VLD A419 VST
MSCH B232 S S P VLMD A41A VST
MSTA B247 RRE Q VLYD A41B VST
MVC D2 SS/L VSTD A41D VST
MVCDK E50F SSE Q VSTMD A41E VST
MVCIN E8 SS/L VSTKD A41F VST
MVCK D9 SSr1r2 S Q VA A420 VST
MVCL 0E RR S I VS A421 VST
MVCP DA SSr1r2 S Q VM A422 VST
MVCS DB SSr1r2 S Q VN A424 VST
MVCSK E50E SSE Q VO A425 VST
MVI 92 SI VX A426 VST
MVN D1 SS/L VC A428 VST
MVO F1 SSt1t2 VLH A429 VST
MVZ D3 SS/L VLINT A42A VST
MXD 67 RX PF VSTH A42D VST
MXDR 27 RR PF VAES A480 QST
MXR 26 RR PF VSES A481 QST
N 54 RX S VMES A482 QST
NC D4 SS/L S VDES A483 QST
NI 94 SI S VMAES A484 QST
NR 14 RR S VMSES A485 QST
O 56 RX S VCES A488 QST
OC D6 SS/L S VADS A490 QST
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 149
149
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

OI 96 SI S VSDS A491 QST


OR 16 RR S VMDS A492 QST
PACK F2 SSt1t2 VDDS A493 QST
PALB B248 RRE P VMADS A494 QST
PC B218 S Q VMSDS A495 QST
PR 0101 E S Q VCDS A498 QST
PT B228 RRE Q VAS A4A0 QST
PTLB B20D S P VSS A4A1 QST
RCHP B23B S S P VMS A4A2 QST
RRBE B22A RRE S P VNS A4A4 QST
RSCH B238 S S P VOS A4A5 QST
S 5B RX S VXS A4A6 QST
SAC B219 S Q VCS A4A8 QST
SAL B237 S P VAER A500 VV
SAR B24E RRE VSER A501 VV
SCHM B23C S P VMER A502 VV
SCK B204 S S P VDER A503 VV
SCKC B206 S P VMCER A506 VV
SD 6B RX S PF VACER A507 VV
SDR 2B RR S PF VCER A508 VV
SE 7B RX S PF VLER A509 VV
SER 3B RR S PF VLR A509 VV
SH 4B RX S VLMER A50A VV
SIE B214 S IP VLMR A50A VV
SIGP AE RS S P VLZER A50B VV
SL 5F RX S VLZR A50B VV
SLA 8B RS S VADR A510 VV
SLDA 8F RS S VSDR A511 VV
SLDL 8D RS VMDR A512 VV
SLL 89 RS VDDR A513 VV
SLR 1F RR S VMCDR A516 VV
SP FB SSt1t2 S VACDR A517 VV
SPKA B20A S Q VCDR A518 VV
SPM 04 RR VLDR A519 VV
SPT B208 S P VLMDR A51A VV
SPX B210 S P VLZDR A51B VV
SR 1B RR S VAR A520 VV
SRA 8A RS S P VSR A521 VV
SRDA 8E RS S VMR A522 VV
SRDL 8C RS VNR A524 VV
SRL 88 RS VOR A525 VV
SRP F0 SSt1i3 S VXR A526 VV
SSAR B225 RRE Q VCR A528 VV
SSCH B233 S S P VLPER A540 VV
SSKE B22B RRE P VLNER A541 VV
SSM 80 S P VLCER A542 VV
ST 50 RX VLPDR A550 VV
STAM 9B RS VLNDR A551 VV
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 150
150
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

STAP B212 S P VLCDR A552 VV


STC 42 RX VLPR A560 VV
STCK B205 S S VLNR A561 VV
STCKC B207 S P VLCR A562 VV
STCM BE RS VAEQ A580 QV
STCPS B23A S P VSEQ A581 QV
STCRW B239 S S P VMEQ A582 QV
STCTL B6 RS P VDEQ A583 QV
STD 60 RX PF VMAEQ A584 QV
STE 70 RX PF VMSEQ A585 QV
STH 40 RX VCEQ A588 QV
STIDP B202 S P VLEQ A589 QV
STM 90 RS VLMEQ A58A QV
STNSM AC S P VADQ A590 QV
STOSM AD S P VSSDQ A591 QV
STPT B209 S P VMDQ A592 QV
STPX B211 S P VDDQ A593 QV
STSCH B234 S S P VMADQ A594 QV
STURA B246 RRE P VMSDQ A595 QV
SU 7F RX S PF VCDQ A596 QV
SUR 3F RR S PF VLDQ A599 QV
SVC 0A RR VLMDQ A59A QV
SW 6F RX S PF VAQ A5A0 QV
SWR 2F RR S PF VSQ A5A1 QV
SXR 37 RR S PF VMQ A5A2 QV
TAR B24C RRE S Q VNQ A5A4 QV
TB B22C RRE S P VOQ A5A5 QV
TM 91 SI S VXQ A5A6 QV
TPI B236 S S P VCQ A5A8 QV
TPROT E501 SSE S P VLQ A5A9 QV
TR DC SS/L VLMQ A5AA QV
TRACE 99 RS P VMXSE A600 VR
TRT DD SS/L S VMNSE A601 VR
TS 93 S S VMXAE A602 VR
TSCH B235 S S P VLELE A608 VR
UNPK F3 SSt1t2 VXELE A609 VR
UPT 0102 E S VMXSD A610 VR
VA A420 VST VMNSD A611 VR
VACD A417 VST VMXAD A612 VR
VACDR A517 VV VLELD A618 VR
VACE A407 VST VXELD A619 VR
VACER A507 VV VSPSD A61A VR
VACRS A6CB S P VZPSD A61B VR
VACSV A6CA S P VLEL A628 VR
VAD A410 VST VXEL A629 VR
VADQ A590 QV VTVM A640 RRE
VADR A510 VV VCVM A641 RRE
VADS A490 QST VCZVM A642 RRE S
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 151
151
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

VAE A400 VST VCOVM A643 RRE S


VAEQ A580 QV VXVC A644 RRE
VAER A500 VV VLVCU A645 RRE S
VAES A480 QST VXVMM A646 RRE
VAQ A5A0 QV VRRS A648 RRE
VAR A520 VV VRSVC A649 RRE
VAS A4A0 QST VRSV A64A RRE
VC A428 VST VLVM A680 VS
VCD A418 VST VLCVM A681 VS
VCDQ A596 QV VSTVM A682 VS
VCDR A518 VV VNVM A684 VS
VCDS A498 QST VOVM A685 VS
VCE A408 VST VXVM A686 VS
VCEQ A588 QV VSRSV A6C0 S
VCER A508 VV VMRSV A6C1 S
VCES A488 QST VSRRS A6C2 S
VCOVM A643 RRE S VMRRS A6C3 S
VCQ A5A8 QV VLVCA A6C4 S S
VCR A528 VV VRCL A6C5 S
VCS A4A8 QST VSVMM A6C6 S
VCVM A641 RRE VSTVP A6C8 S
VCZVM A642 RRE S VACSV A6CA S P
VDD A413 VST VACRS A6CB S P
VDDQ A593 QV ------ A7 ----- - ---
VDDR A513 VV ------ A8 ----- - ---
VDDS A493 QST ------ A9 ----- - ---
VDE A403 VST ------ AA ----- - ---
VDEQ A583 QV ------ AB ----- - ---
VDER A503 VV STNSM AC SI P
VDES A483 QST STOSM AD SI P
VL A409 VST SIGP AE RS S P
VLBIX E428 RSE S MC AF SI
VLCDR A552 VV ------ B0 ----- - ---
VLCER A542 VV LRA B1 RX S P
VLCR A562 VV STIDP B202 S P
VLCVM A681 VS SCK B204 S S P
VLD A419 VST STCK B205 S S
VLDQ A599 QV SCKC B206 S P
VLDR A519 VV STCKC B207 S P
VLE A409 VST SPT B208 S P
VLEL A628 VR STPT B209 S P
VLELD A618 VR SPKA B20A S Q
VLELE A608 VR PK B20B S Q
VLEQ A589 QV PTLB B20D S P
VLER A509 VV SPX B210 S P
VLH A429 VST STPX B211 S P
VLI E400 RSE STAP B212 S P
VLID E410 RSE SIE B214 S IP
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 152
152
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

VLIE E400 RSE PC B218 S Q


VLINT A42A VST SAC B219 S Q
VLM A40A VST CFC B21A S S I
VLMD A41A VST IPTE B221 RRE P
VLMDQ A59A QV IPM B222 RRE
VLMDR A51A VV IVSK B223 RRE Q
VLME A40A VST IAC B224 RRE S Q
VLMEQ A58A QV SSAR B225 RRE Q
VLMER A50A VV EPAR B226 RRE Q
VLMQ A5AA QV ESAR B227 RRE Q
VLMR A50A VV PT B228 RRE Q
VLNDR A551 VV ISKE B229 RRE P
VLNER A541 VV RRBE B22A RRE S P
VLNR A561 VV SSKE B22B RRE P
VLPDR A550 VV TB B22C RRE S P
VLPER A540 VV DXR B22D RRE PF
VLPR A560 VV CSCH B230 S S P
VLQ A5A9 QV HSCH B231 S S P
VLR A509 VV MSCH B232 S S P
VLVCA A6C4 S S SSCH B233 S S P
VLVCU A645 RRE S STSCH B234 S S P
VLVM A680 VS TSCH B235 S S P
VLY A40B VST TPI B236 S S P
VLYD A41B VST SAL B237 S P
VLYE A40B VST RSCH B238 S S P
VLZDR A51B VV STCRW B239 S S P
VLZER A50B VV STCPS B23A S P
VLZR A50B VV RCHP B23B S S P
VM A422 VST SCHM B23C S P
VMAD A414 VST BAKR B240 RRE Q
VMADQ A594 QV STURA B246 RRE P
VMADS A494 QST MSTA B247 RRE Q
VMAE A404 VST PALB B248 RRE P
VMAEQ A584 QV EREG B249 RRE Q
VMAES A484 QST ESTA B24A RRE S Q
VMCD A416 QST LURA B24B RRE P
VMCDR A516 VV TAR B24C RRE S Q
VMCE A406 VST CPYA B24D RRE
VMCER A506 VV SAR B24E RRE
VMD A412 VST EAR B24F RRE
VMDQ A592 QV ------ B3 ----- - ---
VMDR A512 VV ------ B4 ----- - ---
VMDS A492 QST ------ B5 ----- - ---
VME A402 VST STCTL B6 RS P
VMEQ A582 QV LCTL B7 RS P
VMER A502 VV ------ B8 ----- - ---
VMES A482 QST ------ B9 ----- - ---
VMNSD A611 VR CS BA RS S
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 153
153
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

VMNSE A601 VR CDS BB RS S


VMQ A5A2 QV ------ BC ----- - ---
VMR A522 VV CLM BD RS S
VMRRS A6C3 S STCM BE RS
VMRSV A6C1 S ICM BF RS S
VMS A4A2 QST ------ C0 ----- - ---
VMSD A415 VST ------ C1 ----- - ---
VMSDQ A595 QV ------ C2 ----- - ---
VMSDS A495 QST ------ C3 ----- - ---
VMSE A405 VST ------ C4 ----- - ---
VMSEQ A585 QV ------ C5 ----- - ---
VMSES A485 QST ------ C6 ----- - ---
VMXAD A612 VR ------ C7 ----- - ---
VMXAE A602 VR ------ C8 ----- - ---
VMXSD A610 VR ------ C9 ----- - ---
VMXSE A600 VR ------ CA ----- - ---
VN A424 VST ------ CB ----- - ---
VNQ A5A4 QV ------ CC ----- - ---
VNR A524 VV ------ CD ----- - ---
VNS A4A4 QST ------ CE ----- - ---
VNVM A684 VS ------ CF ----- - ---
VO A425 VST ------ D0 ----- - ---
VOQ A5A5 QV MVN D1 SS/L
VOR A525 VV MVC D2 SS/L
VOS A4A5 QST MVZ D3 SS/L
VOVM A685 VS NC D4 SS/L S
VRCL A6C5 S CLC D5 SS/L S
VRRS A648 RRE OC D6 SS/L S
VRSV A64A RRE XC D7 SS/L S
VRSVC A649 RRE ------ D8 ----- - ---
VS A421 VST MVCK D9 SSr1r2 S Q
VSD A411 VST MVCP DA SSr1r2 S Q
VSDQ A591 QV MVCS DB SSr1r2 S Q
VSDR A511 VV TR DC SS/L
VSDS A491 QST TRT DD SS/L S
VSE A401 VST ED DE SS/L S
VSEQ A581 QV EDMK DF SS/L S
VSER A501 VV ------ E0 ----- - ---
VSES A481 QST ------ E1 ----- - ---
VSLL E425 RSE ------ E2 ----- - ---
VSPSD A61A VR ------ E3 ----- - ---
VSQ A5A1 QV VLI E400 RSE
VSR A521 VV VLIE E400 RSE
VSRL E424 RSE VSTI E401 RSE
VSRRS A6C2 S VSTIE E401 RSE
VSRSV A6C0 S VLID E410 RSE
VSS A4A1 QST VSTID E411 RSE
VST A40D VST VSRL E424 RSE
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 154
154
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO ---------

Mnemônico Cod.Instr Tipo CC PF/IPQ Mnemônico Cod.Instr Tipo CC PF/IPQ

VSTD A41D VST VSLL E425 RSE


VSTE A40D VST VLBIX E428 RSE S
VSTH A42D VST LASP E500 SSE S P
VSTI E401 RSE TPROT E501 SSE S P
VSTID E411 RSE MVCSK E50E SSE Q
VSTIE E401 RSE MVCDK E50F SSE Q
VSTK A40F VST ------ E6 ----- - ---
VSTKD A41F VST ------ E7 ----- - ---
VSTKE A40F VST MVCIN E8 SS/L
VSTM A40E VST ------ E9 ----- - ---
VSTMD A41E VST ------ EA ----- - ---
VSTME A40E VST ------ EB ----- - ---
VSTVM A682 VS ------ EC ----- - ---
VSTVP A6C8 S ------ ED ----- - ---
VSVMM A6C6 S ------ EE ----- - ---
VTVM A640 RRE ------ EF ----- - ---
VX A426 VST SRP F0 SSt1I3 S
VXEL A629 VR MVO F1 SSt1t2
VXELD A619 VR PACK F2 SSt1t2
VXELE A609 VR UNPK F3 SSt1t2
VXQ A5A6 QV ------ F4 ----- - ---
VXR A526 VV ------ F5 ----- - ---
VXS A4A6 QST ------ F6 ----- - ---
VXVC A644 RRE ------ F7 ----- - ---
VXVM A686 VS ZAP F8 SSt1t2 S
VXVMM A646 RRE CP F9 SSt1t2 S
VZPSD A61B VR AP FA SSt1t2 S
X 57 RX S SP FB SSt1t2 S
XC D7 SS/L S MP FC SSt1t2
XI 97 SI S DP FD SSt1t2
XR 17 RR S ------ FE ----- - ---
ZAP F8 SSt1t2 S ------ FF ----- - ---
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 155
155

APÊNDICE B - TABELAS DE POTÊNCIAS DE 2 E 16

POTÊNCIAS DE 2 E DE 16

16**00 = 2**00 = 1 16**08 = 2**32 = 4.294.967.296


2**01 = 2 2**33 = 8.589.934.592
2**02 = 4 2**34 = 17.179.869.184
2**03 = 8 2**35 = 34.359.738.368
16**01 = 2**04 = 16 16**09 = 2**36 = 68.719.476.736
2**05 = 32 2**37 = 137.438.953.472
2**06 = 64 2**38 = 274.877.906.944
2**07 = 128 2**39 = 549.755.813.888
16**02 = 2**08 = 256 16**10 = 2**40 = 1.099.511.627.776
2**09 = 512 2**41 = 2.199.023.255.552
2**10 = 1.024 2**42 = 4.398.046.511.104
2**11 = 2.048 2**43 = 8.796.093.022.208
16**03 = 2**12 = 4.096 16**11 = 2**44 = 17.592.186.044.416
2**13 = 8.192 2**45 = 35.184.372.088.832
2**14 = 16.384 2**46 = 70.368.744.177.664
2**15 = 32.768 2**47 = 140.737.488.355.328
16**04 = 2**16 = 65.536 16**12 = 2**48 = 281.474.976.710.656
2**17 = 131.072 2**49 = 562.949.953.421.312
2**18 = 262.144 2**50 = 1.125.899.906.842.624
2**19 = 524.288 2**51 = 2.251.799.813.685.248
16**05 = 2**20 = 1.048.576 16**13 = 2**52 = 4.503.599.627.370.496
2**21 = 2.097.152 2**53 = 9.007.199.254.740.992
2**22 = 4.194.304 2**54 = 18.014.398.509.481.984
2**23 = 8.388.608 2**55 = 36.028.797.018.963.968
16**06 = 2**24 = 16.777.216 16**14 = 2**56 = 72.057.594.037.927.936
2**25 = 33.554.432 2**57 = 144.115.188.075.855.872
2**26 = 67.108.864 2**58 = 288.230.376.151.711.744
2**27 = 134.217.728 2**59 = 576.460.752.303.423.488
16**07 = 2**28 = 268.435.456 16**15 = 2**60 = 1.152.921.504.606.846.976
2**29 = 536.870.912 2**61 = 2.305.843.009.213.693.952
2**30 = 1.073.741.824 2**62 = 4.611.686.018.427.387.904
2**31 = 2.147.483.648 16**00 = 2**63 = 9.223.372.036.854.775.808

1K = 1024 1M = 1.048.576 1G = 1.073.741.824 1T = 1.099.511.627.776


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 156
156

POTÊNCIAS DE 16 MULTIPLICADAS POR 0...15

POTÊNCIA 0 POTÊNCIA 1 POTÊNCIA 2 POTÊNCIA 3

00 0 00 0 00 0 00 0
01 1 01 16 01 256 01 4.096
02 2 02 32 02 512 02 8.192
03 3 03 48 03 768 03 12.288
04 4 04 64 04 1.024 04 16.384
05 5 05 80 05 1.280 05 20.480
06 6 06 96 06 1.536 06 24.576
07 7 07 112 07 1.792 07 28.672
08 8 08 128 08 2.048 08 32.768
09 9 09 144 09 2.304 09 36.864
10 10 10 160 10 2.560 10 40.960
11 11 11 176 11 2.816 11 45.056
12 12 12 192 12 3.072 12 49.152
13 13 13 208 13 3.328 13 53.248
14 14 14 224 14 3.584 14 57.344
15 15 15 240 15 3.840 15 61.440

POTÊNCIA 4 POTÊNCIA 5 POTÊNCIA 6 POTÊNCIA 7

00 0 00 0 00 0 00 0
01 65.536 01 1.048.576 01 16.777.216 01 268.435.456
02 131.072 02 2.097.152 02 33.554.432 02 536.870.912
03 196.608 03 3.145.728 03 50.331.648 03 805.306.368
04 262.144 04 4.194.304 04 67.108.864 04 1.073.741.824
05 327.680 05 5.242.880 05 83.886.080 05 1.342.177.280
06 393.216 06 6.291.456 06 100.663.296 06 1.610.612.736
07 458.752 07 7.340.032 07 117.440.512 07 1.879.048.192
08 524.288 08 8.388.608 08 134.217.728 08 2.147.483.648
09 589.824 09 9.437.184 09 150.994.944 09 2.415.919.104
10 655.360 10 10.485.760 10 167.772.160 10 2.684.354.560
11 720.896 11 11.534.336 11 184.549.376 11 2.952.790.016
12 786.432 12 12.582.912 12 201.326.592 12 3.221.225.472
13 851.968 13 13.631.488 13 218.103.808 13 3.489.660.928
14 917.504 14 14.680.064 14 234.881.024 14 3.758.096.384
15 983.040 15 15.728.640 15 251.658.240 15 4.026.531.840
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 157
157

APÊNDICE C - CARACTERES EBCDIC

HEX CARAC- HEX CARATER HEX CARATER HEX CARATER HEX CARATER HEX CARAC-
TER TER
00 30 60 - hífen 90 C0 { abre chave F0 0
01 31 61 / barra 91 i C1 A F1 1
02 32 62 92 j C2 B F2 2
03 33 63 93 k C3 C F3 3
04 34 64 94 l C4 D F4 4
05 35 65 95 m C5 E F5 5
06 36 66 96 n C6 F F6 6
07 37 67 97 o C7 G F7 7
08 38 68 98 p C8 H F8 8
09 39 69 99 q C9 I F9 9
0A 3A 6A 9A r CA FA
0B 3B 6B , virgula 9B CB FB
0C 3C 6C % percentual 9C CC FC
0D 3D 6D _ underscore 9D CD FD
0E 3E 6E > maior 9E CE FE
0F 3F 6F ? interrogação 9F CF FF
10 40 70 A0 D0 } fecha chave
11 41 71 A1 D1 J
12 42 72 A2 s D2 K
13 43 73 A3 t D3 L
14 44 74 A4 u D4 M
15 45 75 A5 v D5 N
16 46 76 A6 w D6 O
17 47 77 A7 x D7 P
18 48 78 A8 y D8 Q
19 49 79 A9 z D9 R
1A 4A 7A : 2 pontos AA DA
1B 4B . ponto 7B # número AB DB
1C 4C < menor 7C @ arroba AC DC
1D 4D ( abre arênteses 7D ' apostrofe AD DD
1E 4E + mais 7E = igual AE DE
1F 4F | barra vertical 7F " aspas AF DF
20 50 & E comercial 80 B0 E0 \ barra invertida
21 51 81 a B1 E1
22 52 82 b B2 E2 S
23 53 83 c B3 E3 T
24 54 84 d B4 E4 U
25 55 85 e B5 E5 V
26 56 86 f B6 E6 W
27 57 87 g B7 E7 X
28 58 88 h B8 E8 Y
29 59 89 B9 E9 Z
2A 5A ! exclamação 8A BA EA
2B 5B $ cifrão 8B BB EB
2C 5C * asterisco 8C BC EC
2D 5D ) fecha parênteses 8D BD ED
2E 5E ; ponto e vírgula 8E BE EE

2F 5F not 8F BF EF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 158
158

APÊNDICE D - CONTROLE DE IMPRESSÃO

HEXA---SIGNIFICADO------------------------------CARACTERES DE MÁQUINA--------

01 Imprime na linha em que estiver posicionado, e fica posicionado nela


09 Imprime na linha em que estiver posicionado, depois salta 1 linha
11 Imprime na linha em que estiver posicionado, depois salta 2 linhas
19 Imprime na linha em que estiver posicionado, depois salta 3 linhas
89 Imprime na linha em que estiver posicionado, depois salta para o canal 1
91 Imprime na linha em que estiver posicionado, depois salta para o canal 2
99 Imprime na linha em que estiver posicionado, depois salta para o canal 3
A1 Imprime na linha em que estiver posicionado, depois salta para o canal 4
A9 Imprime na linha em que estiver posicionado, depois salta para o canal 5
B1 Imprime na linha em que estiver posicionado, depois salta para o canal 6
B9 Imprime na linha em que estiver posicionado, depois salta para o canal 7
C1 Imprime na linha em que estiver posicionado, depois salta para o canal 8
C9 Imprime na linha em que estiver posicionado, depois salta para o canal 9
D1 Imprime na linha em que estiver posicionado, depois salta para o canal 10
D9 Imprime na linha em que estiver posicionado, depois salta para o canal 11
E1 Imprime na linha em que estiver posicionado, depois salta para o canal 12
0B Salta 1 linha
13 Salta 2 linhas
1B Salta 3 linhas
8B Salta para o canal 1
93 Salta para o canal 2
9B Salta para o canal 3
A3 Salta para o canal 4
AB Salta para o canal 5
B3 Salta para o canal 6
BB Salta para o canal 7
C3 Salta para o canal 8
CB Salta para o canal 9
D3 Salta para o canal 10
DB Salta para o canal 11
E3 Salta para o canal 12

----HEXA----SIGNIFICADO-----------------------------CARACTERES ASA-----------

40 Salta 1 linha, imprime, e fica posicionado na linha impressa


0 F0 Salta 2 linhas, imprime, e fica posicionado na linha impressa
- 60 Salta 3 linhas, imprime, e fica posicionado na linha impressa
+ 4E Imprime na linha em que estiver posicionado e continua nela
1 F1 Salta para o canal 1, imprime, e fica posicionado na linha impressa
2 F2 Salta para o canal 2, imprime, e fica posicionado na linha impressa
3 F3 Salta para o canal 3, imprime, e fica posicionado na linha impressa
4 F4 Salta para o canal 4, imprime, e fica posicionado na linha impressa
5 F5 Salta para o canal 5, imprime, e fica posicionado na linha impressa
6 F6 Salta para o canal 6, imprime, e fica posicionado na linha impressa
7 F7 Salta para o canal 7, imprime, e fica posicionado na linha impressa
8 F8 Salta para o canal 8, imprime, e fica posicionado na linha impressa
9 F9 Salta para o canal 9, imprime, e fica posicionado na linha impressa
A C1 Salta para o canal 10, imprime, e fica posicionado na linha impressa
B C2 Salta para o canal 11, imprime, e fica posicionado na linha impressa
C C3 Salta para o canal 12, imprime, e fica posicionado na linha impressa
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 159
159

APÊNDICE E - INTERRUPÇÕES POR ERRO DE PROGRAMA

0001 - OPERAÇÃO = O código de operação da instrução é inválido, isto é, não


corresponde a nenhuma instrução executável.

0002 - OPERAÇÃO PRIVILEGIADA = O programa tentou executar uma instrução


privilegiada, isto é, que só pode ser
executada pelo supervisor.

0003 - EXECUTE = Foi dada uma instrução Execute para outra instrução Execute.

0004 - PROTEÇÃO = Uma instrução do programa tentou estragar uma área fora da
sua partição.

0005 - ENDEREÇAMENTO = Uma instrução do programa fez referência a endereço


não existente.

0006 - ESPECIFICAÇÃO = A instrução especificou algo de errado, como, por


exemplo, uma instrução que trabalhe com registradores
de ponto flutuante, e especifique registrador 3, que
não existe.

0007 - DADOS = Os campos que uma instrução utiliza não estão no formato que
deveriam estar.

0008 - OVERFLOW DE PONTO FIXO = A instrução faz alguma operação com um


registrador geral e nele não cabe o resultado.

0009 - DIVISÃO DE PONTO FIXO = Numa divisão em binário o divisor é 0.

000A - OVERFLOW DECIMAL = Numa operação entre campos em compactado, o campo


de resultado não é suficientemente grande para
conter o resultado.

000B - DIVISÃO DECIMAL = Numa divisão em compactado, o divisor é 0.

000C - OVERFLOW DE EXPOENTE = Para operações com números em ponto flutuante.

000D - UNDERFLOW DE EXPOENTE = Para operações com números em ponto flutuante.

000E - SIGNIFICÂNCIA = Para operações com números em ponto flutuante.

000F - DIVISÃO EM PONTO FLUTUANTE = Para operações em ponto flutuante.


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 160
160

APÊNDICE F - TRUQUES ÚTEIS A PROGRAMAS ASSEMBLER

a) Para zerar o primeiro byte à esquerda de um registrador:

LA 5,0(5) ou
LA 5,0(,5) ou
LA 5,0(0,5)

b) Para somar um número (compreendido entre 1 e 4095 em um registrador que não seja o registrador 0 :

LA 5,n(5)

sendo n o número desejado.

c) Para multiplicar o número contido num campo em compactado por 2 :

AP CPO,CPO

d) Para zerar um campo compactado :

SP CPO,CPO ou
ZAP CPO,=P'0'

e) Para multiplicar o número contido num registrador :

multiplicação por 2 : SLL 5,1


multiplicação por 4 : SLL 5,2
multiplicação por 8 : SLL 5,3
etc ...

f) Para dividir o número contido num registrador :

divisão por 2 : SRL 5,1


divisão por 4 : SRL 5,2
divisão por 8 : SRL 5,3
etc ...

g) Para reduzir uma área a zeros binários :

XC AREA,AREA

h) Para inverter a posição de 2 campos, sem necessidade de uso de área auxiliar:

XC A,B
XC B,A
XC A,B
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 161
161
i) Para movimentar um caracter qualquer para todas as posições de um campo:

MVI CAMPO,C' '


MVC CAMPO+1(L'CAMPO-1),CAMPO

j) Para transformar um NOP em branch:

ABC NOP DESV


OI ABC+1,X'F0'

k) Para transformar um branch em NOP :

ABC B DESV
.
.
.
NI ABC+1,X'0F'

l) Para subtrair 1 de um registrador :

BCTR 5,0
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 162
162

APÊNDICE G - MACRO INSTRUÇÕES MVS

{ } = ESCOLHER UM ITEM
[ ] = OPCIONAL
_
[simbolo] OPEN (arq1,[{INPUT/OUTPUT}][,arq2,[{INPUT/OUTPUT}]...])

[simbolo] CLOSE (arq1,[opcoes][,arq2[,[opcoes]...]])

[simbolo] GET arq,area

[simbolo] PUT arq,area

simbolo DCB DDNAME=xxxxxxx


DSORG=PS
EODAD=simbolo
MACRF={PM/GM}
RECFM=FB[A/M]

Exemplos:

GET DISCO,ARLEIT
PUT DISKSAI,ARGRAV
OPEN (DISCO,(INPUT))
OPEN (DISCO)
OPEN (DISCO,,DISKSAI,(OUTPUT)
CLOSE (DISCO)
CLOSE (DISCO,,DISKSAI)
OPEN (RELAT,(OUTPUT)
CLOSE (RELAT)

DISCO DCB DDNAME=DDENTRA,DSORG=PS,EODAD=FIMFILE,MACRF=(GM),RECFM=FB


DISKSAI DCB DDNAME=DDSAI,DSORG=PS,MACRF=(PM),RECFM=FB
RELAT DCB DDNAME=DDREL,DSORG=PS,MACRF=(PM),RECFM=FBA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 163
163

APÊNDICE H - EXEMPLO DE PROGRAMA MVS

*--------------------------------------------------------
PROGMVS START 0
USING *,3 INDICA REGISTRADOR BASE
STM 14,12,12(13) SALVA REGISTRADORES NA
* SAVE AREA DO CHAMADOR
LR 3,15 CARREGA ENTRY POINT NO 3
ST 13,SAVE+4 SALVA END DA SAVE AREA DO
* CHAMADOR NA MINHA SAVE
LA 15,SAVE END DA MINHA SAVE NO 15
ST 15,8(13) SALVA END DA MINHA SAVE
* NA SAVEAREA DO CHAMADOR
LR 13,15 DEIXA END DA MINHA NO 13
*--------------------------------------------------------
L 1,0(1) ENDERECO DO PARM NO REG.1
MVC PARMLEN+2(2),0(1) SALVA TAMANHO DO PARM
L 15,PARMLEN CARREGA TAMANHO DO PARM
LTR 15,15 VE SE VEIO PARM
BZ COMECAR SE TAMANHO ZERO, NAO VEIO
BCTR 15,0 SUBTRAI 1 DO 15
EX 15,MOVEPARM SALVA PARM
B COMECAR VAI PROCESSAR O PGM
MOVEPARM MVC PARMTXT(0),2(1) MOVE O PARM PARA AREA DO PGM
SAVE DC 18F'0' SAVE AREA DO PROGRAMA
PARMTXT DC CL100' ' AREA PARA O PARM
PARMLEN DC F'0' FULL PARA TAMANHO PARM
*--------------------------------------------------------
COMECAR EQU *
OPEN (ENTRA,(INPUT),SAI,(OUTPUT))
LER GET ENTRA,WENTRA
MVC WSAI,WENTRA
PUT SAI,WSAI
B LER
FIMINP CLOSE (ENTRA,,SAI)
*--------------------------------------------------------
TERMINAR EQU *
SR 2,2 ZERA REG 2
L 13,SAVE+4 RESTAURA ENDERECO DA
* SAVE AREA DO CHAMADOR
ST 2,16(13) RETURN CODE NO LUGAR
* DE ONDE SERA RESTAURADO O REG 15
LM 14,12,12(13) RESTAURA REGISTRADORES
BR 14 VOLTA
*--------------------------------------------------------
WENTRA DS CL50
WSAI DS CL50
ENTRA DCB DDNAME=DDENTRA,DSORG=PS,EODAD=FIMINP,MACRF=(GM),RECFM=FB
SAI DCB DDNAME=DDSAI,DSORG=PS,MACRF=(PM),RECFM=FB
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 164
164

APÊNDICE I - MACRO INSTRUÇÕES VSE

{ } = ESCOLHER UM ITEM
[ ] = OPCIONAL

[simbolo] OPEN arq1[,arq2,...]

[simbolo] CLOSE arq1[,arq2,...]

[simbolo] GET arq,area

[simbolo] PUT arq,area

simbolo DTFSD DEVADDR=SYSxxx


[EOFADDR=simbolo]
TYPEFLE={INPUT/OUTPUT}
RECFORM=FIXBLK
RECSIZE=nnnn
BLKSIZE=nnnn
IOAREA1=simbolo
WORKA=YES

simbolo DTFPR DEVADDR=


RECFORM=
RECSIZE=
BLKSIZE=
CTLCHR=
IOAREA1=
WORKA=YES

Exemplos:

GET DISCO,ARLEIT
PUT DISKSAI,ARGRAV
OPEN DISCO
OPEN DISCO,DISKSAI
CLOSE DISCO
CLOSE DISCO,DISKSAI
OPEN RELAT
CLOSE RELAT

DISCO DTFSD EOFADDR=FIMFILE,TYPEFLE=INPUT,RECFORM=FIXBLK,RECSIZE=50, X


BLKSIZE=5000,IOAREA1=BUFIN,WORKA=YES
DISKSAI DTFSD TYPEFLE=OUTPUT,RECFORM=FIXBLK,RECSIZE=50,BLKSIZE=5000, X
IOAREA1=BUFOUT,WORKA=YES
RELAT DTFPR DEVADDR=SYSLST,RECFORM=FIXUNB,RECSIZE=133,BLKSIZE=133, X
CTLCHR=ASA,IOAREA1=BUFPR,WORKA=YES
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 165
165

APÊNDICE J - EXEMPLO DE PROGRAMA VSE

*--------------------------------------------------------
PROGVSE START 0
USING *,3 INDICA REGISTRADOR BASE
STM 14,12,12(13) SALVA REGISTRADORES NA
* SAVE AREA DO CHAMADOR
LR 3,15 CARREGA ENTRY POINT NO 3
BCTR 3,0 SUBTRAI 1 DO R3
BCTR 3,0 SUBTRAI MAIS 1. R3=ENTRY POINT
*--------------------------------------------------------
COMECAR EQU *
OPEN ENTRA,SAI
LER GET ENTRA,WENTRA
MVC WSAI,WENTRA
PUT SAI,WSAI
B LER
FIMINP CLOSE ENTRA,SAI
*--------------------------------------------------------
TERMINAR EQU *
EOJ
*--------------------------------------------------------
WENTRA DS CL50
WSAI DS CL50
ENTRA DTFSD EOFADDR=FIMINP,TYPEFLE=INPUT,RECFORM=FIXBLK,RECSIZE=50, X
BLKSIZE=5000,IOAREA1=BUFIN,WORKA=YES
DISKSAI DTFSD TYPEFLE=OUTPUT,RECFORM=FIXBLK,RECSIZE=50,BLKSIZE=5000, X
IOAREA1=BUFOUT,WORKA=YES
LTORG
BUFIN DS CL5000
BUFOUT DS CL5008
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 166
166

APÊNDICE K - MACRO INSTRUÇÕES VM

{ } = ESCOLHER UM ITEM
[ ] = OPCIONAL

FSREAD 'fn ft fm',ERROR=simbolo,BUFFER=simbolo,BSIZE=tamanho,FORM=E


FSWRITE 'fn ft fm',BUFFER=simbolo,BSIZE=tamanho,RECFM={F/V}

Exemplos:

FSREAD 'ENTRADA DADOS A',ERROR=MAYBEEND,BUFFER=ARLEIT,BSIZE=50,X


FORM=E
FSWRITE 'SAIDA DADOS A',BUFFER=ARGRAV,BSIZE=50,RECFM=F
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 167
167

APÊNDICE L - EXEMPLO DE PROGRAMA VM

*--------------------------------------------------------
PROGVM START 0
USING *,3 INDICA REGISTRADOR BASE
STM 14,12,12(13) SALVA REGISTRADORES NA
* SAVE AREA DO CHAMADOR
LR 3,15 CARREGA ENTRY POINT NO 3
ST 13,SAVE+4 SALVA END DA SAVE AREA DO
* CHAMADOR NA MINHA SAVE
LA 15,SAVE END DA MINHA SAVE NO 15
ST 15,8(13) SALVA END DA MINHA SAVE
* NA SAVEAREA DO CHAMADOR
LR 13,15 DEIXA END DA MINHA NO 13
*--------------------------------------------------------
COMECAR EQU *
LE FSREAD 'ENTRADA DADOS A,'ERROR=MAYBEFIM,BUFFER=WENTRA, X
BSIZE=50,FORM=E
MVC WSAI,WENTRA
FSWRITE 'SAIDA DADOS A',BUFFER=WSAI,BSIZE=50,RECFM=F
B LE
MAYBEFIM EQU *
C 15,=F'12' VE SE TEVE ERRO OU SE FOI FIM ARQ
BE TERMINAR SE FOI FIM DE ARQUIVO, DESVIA
WRTERM 'ERRO DE LEITURA DO ARQUIVO ENTRADA'
LA 2,4 RETURN CODE NO REG 2
B FINAL
*--------------------------------------------------------
TERMINAR EQU *
SR 2,2 ZERA REG 2
FINAL L 13,SAVE+4 RESTAURA ENDERECO DA
* SAVE AREA DO CHAMADOR
ST 2,16(13) RETURN CODE NO LUGAR
* DE ONDE SERA RESTAURADO
* O REG 15
LM 14,12,12(13) RESTAURA REGISTRADORES
BR 14 VOLTA
*--------------------------------------------------------
WENTRA DS CL50
WSAI DS CL50
SAVE DC 18F'0'
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 168
168

APÊNDICE M - MACRO INSTRUÇÕES XEGUEI E TCHAU

*-----------------------------------------------------------
* MACRO XEGUEI
*-----------------------------------------------------------
MACRO
&LABEL XEGUEI &SISTOP=
.*-----------------------------------------------------------
.* DEFINICAO DAS VARIAVEIS DE MONTAGEM
.*-----------------------------------------------------------
GBLA &XEGAY
GBLC &QUALSO
.*-----------------------------------------------------------
.* CONSISTENCIA DOS DADOS
.*-----------------------------------------------------------
&XEGAY SETA &XEGAY+1
AIF (&XEGAY EQ 1).FIRST1
MNOTE 12,'MACRO SO PODE SER CHAMADA UMA VEZ'
MEXIT
.FIRST1 ANOP
AIF ('&LABEL' NE '').VEIOLAB
MNOTE 8,'LABEL (NOME DO PROGRAMA) OMITIDO'
MEXIT
.VEIOLAB ANOP
AIF ('&SISTOP' NE '').VEIOOP
MNOTE 4,'PARAMETRO SISTOP OMITIDO'
MEXIT
.VEIOOP ANOP
AIF ('&SISTOP' EQ 'VSE').VSEMVS1
AIF ('&SISTOP' EQ 'MVS').VSEMVS1
MNOTE 4,'PARAMETRO SISTOP INVALIDO'
MEXIT
.VSEMVS1 ANOP
.*-----------------------------------------------------------
.* GERA TANTO PARA VSE QUANTO PARA MVS
.*-----------------------------------------------------------
*-----------------------------------------------------------
&LABEL START 0
*-----------------------------------------------------------
* EQUATES DOS REGISTRADORES PARA A CROSS REFERENCE
*-----------------------------------------------------------
R0 EQU 0
R1 EQU 1
R2 EQU 2
R3 EQU 3
R4 EQU 4
R5 EQU 5
R6 EQU 6
R7 EQU 7
R8 EQU 8
R9 EQU 9
R10 EQU 10
R11 EQU 11
R12 EQU 12
R13 EQU 13
R14 EQU 14
R15 EQU 15
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 169
169
AIF ('&SISTOP' EQ 'MVS').MVS
.*-----------------------------------------------------------
.* GERA PARA O CASO DE VSE
.*-----------------------------------------------------------
.VSE ANOP
&QUALSO SETC 'SISTEMAVSE'
*-----------------------------------------------------------
* ESTABELECE OS REGISTRADORES BASE EM TEMPO DE MONTAGEM
* E OS CARREGA EM TEMPO DE EXECUCAO
*-----------------------------------------------------------
USING *,3,4,5,6,7 INDICA REGISTRADORES BASE E SEU
* CONTEUDO PRESUMIDO NA EXECUCAO
BALR 3,0 CARREGA PRIMEIRO REG BASE
BCTR 3,0 SUBTRAI 1
BCTR 3,0 SUBTRAI MAIS 1, E R3 = LOAD POINT
* = ENTRY POINT
LA 4,1 COLOCA NRO 1 NO REG 4
LA 4,4095(3,4) R4 = R3 + 4096
LA 5,1 COLOCA NRO 1 NO REG 5
LA 5,4095(4,5) R5 = R4 + 4096
LA 6,1 COLOCA NRO 1 NO REG 6
LA 6,4095(5,6) R6 = R5 + 4096
LA 7,1 COLOCA NRO 1 NO REG 7
LA 7,4095(6,7) R7 = R6 + 4096
*-----------------------------------------------------------
EJECT
MEXIT
.*-----------------------------------------------------------
.* GERA PARA O CASO DE MVS
.*-----------------------------------------------------------
.MVS ANOP
*-----------------------------------------------------------
* ESTABELECE OS REGISTRADORES BASE EM TEMPO DE MONTAGEM
* E OS CARREGA EM TEMPO DE EXECUCAO
*-----------------------------------------------------------
USING *,3,4,5,6,7 INDICA REGISTRADORES BASE E SEU
* CONTEUDO PRESUMIDO NA EXECUCAO
STM 14,12,12(13) SALVA REGISTRADORES NA SAVEAREA
* DO CHAMADOR
LR 3,15 CARREGA ENTRY POINT/LOAD POINT NO R3
LA 4,1 COLOCA NRO 1 NO REG 4
LA 4,4095(3,4) R4 = R3 + 4096
LA 5,1 COLOCA NRO 1 NO REG 5
LA 5,4095(4,5) R5 = R4 + 4096
LA 6,1 COLOCA NRO 1 NO REG 6
LA 6,4095(5,6) R6 = R5 + 4096
LA 7,1 COLOCA NRO 1 NO REG 7
LA 7,4095(6,7) R7 = R6 + 4096
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 170
170
*-----------------------------------------------------------
* ACERTA POINTERS PARA SAVEAREAS
*-----------------------------------------------------------
ST 13,SAVEZZZZ+4 SALVA ENDERECO DA SAVEAREA DO
* CHAMADOR NA MINHA SAVEAREA
LA 15,SAVEZZZZ ENDERECO DA MINHA SAVEAREA NO 15
ST 15,8(13) SALVA ENDERECO DA MINHA SAVEAREA
* NA SAVEAREA DO CHAMADOR
LR 13,15 DEIXA ENDER DA MINHA SAVE NO 13
*-----------------------------------------------------------
* PEGA O PARM E O DEIXA EM PARMTEXT
*-----------------------------------------------------------
L 1,0(1) ENDERECO DO PARM NO REG 1
MVC PARMLEN@+2(2),0(1) SALVA TAMANHO DO PARM
L 15,PARMLEN@ TAMANHO DO PARM NO 15
LTR 15,15 VE SE VEIO PARM
BZ PARMLEN@+4 SE TAMANHO ZERO, NAO VEIO PARM
BCTR 15,0 SUBTRAI 1 DO 15
EX 15,*+4+4 SALVA PARM NA MINHA AREA
B PARMLEN@+4 VAI EXECUTAR O PROGRAMA
MVC PARMTEXT(0),2(1) MOVE O PARM PARA MINHA AREA
*-----------------------------------------------------------
* DEFINE AS AREAS
*-----------------------------------------------------------
SAVEZZZZ DC 18F'0' MINHA SAVEAREA
PARMTEXT DC CL100' ' MINHA AREA PARA O PARM
PARMLEN@ DC F'0' TAMANHO DO PARM
*-----------------------------------------------------------
EJECT
&QUALSO SETC 'SISTEMAMVS'
MEND
***********************************************************************
* MACRO TCHAU
***********************************************************************
MACRO
&SIMBALO TCHAU &RETCODE=
.*-----------------------------------------------------------
.* DEFINICAO DAS VARIAVEIS DE MONTAGEM
.*-----------------------------------------------------------
GBLA &XEGAY
GBLC &QUALSO
.*-----------------------------------------------------------
.* CONSISTENCIA DOS DADOS
.*-----------------------------------------------------------
AIF (&XEGAY EQ 1).VEIOXEG
MNOTE 12,'MACRO TCHAU USADA SEM MACRO XEGUEI'
MEXIT
.VEIOXEG ANOP
AIF ('&QUALSO' EQ 'SISTEMAMVS').MVS
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 171
171
.*-----------------------------------------------------------
.* GERA PARA O CASO DE VSE
.*-----------------------------------------------------------
.VSE ANOP
EOJ
MEXIT
.*-----------------------------------------------------------
.* GERA PARA O CASO DE MVS
.*-----------------------------------------------------------
.MVS ANOP
AIF ('&RETCODE' NE '').YESRC
&SIMBALO SR 2,2 RETURN CODE NO 2
AGO .RCOK
.YESRC ANOP
&SIMBALO LA 2,&RETCODE CARREGA RETURN CODE NO 2
.RCOK ANOP
L 13,SAVEZZZZ+4 RESTAURA ENDERECO DA SAVEAREA
* DO CHAMADOR
ST 2,16(13) JOGA RETURN CODE NO LUGAR DE ONDE
* VAI SER RESTAURADO O 15
LM 14,12,12(13) RESTAURA REGISTRADORES
BR 14 BYE BYE ...
*-----------------------------------------------------------
MEND
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 172
172

APÊNDICE N - EXEMPLO DE SUBROTINA

*-----------------------------------------------------------
* ESTA SUBROTINA RECEBE UM CAMPO DE 6 BYTES COM UMA DATA EM
* ZONADO (PRIMEIRO PARAMETRO) E A TRANSFORMA EM UMA DATA EM
* COMPACTADO SEM SINAL, DEVOLVENDO ESSA INFORMACAO NO CAMPO
* SEGUNDO PARAMETRO. SE A DATA NAO FOR NUMERICA, ELA NAO FAZ
* A CONVERSAO E DEVOLVE RETURN CODE 4; SE FOR NUMERICA, FAZ A
* CONVERSAO E DEVOLVE RETURN CODE 0
*-----------------------------------------------------------
SUBROT START 0
USING *,3
STM 14,12,12(13)
LR 3,15
ST 13,SAVEROT+4
LA 15,SAVEROT
ST 15,8(13)
LR 13,15
*
L 11,0(1)
L 12,4(1)
*
TRT 0(6,11),TABNUM
BZ ISZONADO
B SAIROT4
ISZONADO EQU *
PACK 0(2,12),0(3,11)
PACK 1(2,12),2(3,11)
PACK W(2),4(3,11)
MVC 2(1,12),W
SAIROT EQU *
L 13,4(13)
LM 14,12,12(13)
SR 15,15
BR 14
SAIROT4 EQU *
L 13,4(13)
LM 14,12,12(13)
LA 15,4
BR 14
TABNUM DC 240X'FF',10X'00'6X'FF'
W DS CL2
SAVEROT DC 18F'0'
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 173
173

APÊNDICE O - EXEMPLO 2 DE SUBROTINA

*-----------------------------------------------------------
* ESTA SUBROTINA RECEBE N PARAMETROS, DOS QUAIS OS N-1 PRIMEIROS
* SAO CAMPOS ZONADOS COM 3 BYTES COM CONTEUDO FORNECIDO PELO
* PROGRAMA CHAMADOR. O N-ESIMO CAMPO E' DO CHAMADOR E E' UMA
* FULL WORD ONDE A ROTINA DEVE DEVOLVER A SOMATORIA DOS NUMEROS
* CONTIDOS NOS N-1 PRIMEIROS CAMPOS, NO FORMATO BINARIO
* SE ALGUM NUMERO NAO ESTIVER EM ZONADO, A ROTINA NAO FAZ A SOMA
* E DEVOLVE RETURN CODE 4.
* SE FOR PASSADO MENOS DO QUE 2 PARAMETROS OU MAIS DO QUE 5
* ELA DEVOLVE RETURN CODE 8 E NAO FAZ A SOMATORIA
*-----------------------------------------------------------
SOMATOR START 0
USING *,15
B PULAINIC
DC 18F'0'
DC CL8'SOMATOR'
DC CL8'&SYSDATE'
DC CL8'&SYSTIME'
PULAINIC DS 0H
STM 14,12,12(13)
ST 15,8(13)
ST 13,8(15)
LA 3,4(15)
DROP 15
USING SUBROT,3,4
LA 4,4095(3)
LA 4,1(4)
LR 9,1
*
L 11,0(9) R11 = ENDERECO PARM 1
TM 0(9),X'80'
BO VOLTA8 VEIO 1 PARAMETRO = ERRO
TRT 0(3,11),TABNUM
BNZ VOLTA4
PACK W,0(3,11)
AP TOTDW,W
*
L 11,4(9) R11 = ENDERECO PARM 2
TM 4(9),X'80'
BO VOLTA ESTE E' O ULTIMO PARAMETRO
TRT 0(3,11),TABNUM
BNZ VOLTA4
PACK W,0(3,11)
AP TOTDW,W
*
L 11,8(9) R11 = ENDERECO PARM 3
TM 8(9),X'80'
BO VOLTA ESTE E' O ULTIMO PARAMETRO
TRT 0(3,11),TABNUM
BNZ VOLTA4
PACK W,0(3,11)
AP TOTDW,W
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 174
174
*
L 11,12(9) R11 = ENDERECO PARM 4
TM 12(9),X'80'
BO VOLTA ESTE E' O ULTIMO PARAMETRO
TRT 0(3,11),TABNUM
BNZ VOLTA4
PACK W,0(3,11)
AP TOTDW,W
*
L 11,16(9) R11 = ENDERECO PARM 5
TM 16(9),X'80'
BZ VOLTA8 ESTE NAO E' O ULTIMO PARAMETRO
TRT 0(3,11),TABNUM
BNZ VOLTA4
PACK W,0(3,11)
AP TOTDW,W
*
VOLTA EQU *
CVB 8,TOTDW
ST 8,TOTDW
MVC 0(4,11),TOTDW
SAIROT EQU *
L 13,4(13)
LM 14,12,12(13)
SR 15,15
BR 14
VOLTA4 EQU *
L 13,4(13)
LM 14,12,12(13)
LA 15,4
BR 14
VOLTA8 EQU *
L 13,4(13)
LM 14,12,12(13)
LA 15,8
BR 14
TABNUM DC 240X'FF',10X'00'6X'FF'
TOTDW DS D
W DS CL3
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 175
175

APÊNDICE P - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 1

EXTERNAL SYMBOL DICTIONARY


SYMBOL TYPE ID ADDR LENGTH LD ID FLAGS
PROGDEMO SD 0001 000000 000AF3 00
FORA ER 0002
Z LD 000844 0001
SUBROT ER 0003
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 176
176
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
1* 1 2 3
2 *23456789012345678901234567890123456
3 *-----------------------------------
4 *-----------------------------------
5 * ESTE PROGRAMA E' PARA DEMONSTRAR
6 * COMANDOS AO MONTADOR ASSEMBLER
7 *-----------------------------------
8 MACRO
9 MYMAK
10 DC C'GERADO PELA MYMAK'
11 MEND
12 *-----------------------------------
000000 13 PROGDEMO START 0
00000 14 USING *,3,4,5,6,7
15 *
16 * AVISA QUE OS REGISTRADORES BASE
17 * SERAO O 3, 4, 5, 6 E 7
18 * E QUE SEUS CONTEUDOS PRESUMIDOS
19 * EM TEMPO DE EXECUCAO SERAO
20 * R3 = 000000
21 * R4 = 001000
22 * R5 = 002000
23 * R6 = 003000
24 * R7 = 004000
25 *-----------------------------------
26 * SIMBOLOS
27 *-----------------------------------
28 1ABCDEF EQU *
IEV147 *** ERROR *** SYMBOL TOO LONG, OR 1ST CHARACTER NOT A LETTER --
IEV167 *** ERROR *** REQUIRED NAME MISSING
00000 29 SIMBOLOPODESTER63CARACTERES EQU *
30 *-----------------------------------
31 * PRINT GEN/NOGEN
32 *-----------------------------------
33 * ESTA' COM O DEFAULT PRINT GEN
34 MYMAK
000000 C7C5D9C1C4D640D7 35+ DC C'GERADO PELA MYMAK'
36 * VOU MUDAR PARA PRINT NOGEN
37 PRINT NOGEN
38 * VOU RESTAURAR O DEFAULT
39 PRINT GEN
40 MYMAK
000011 C7C5D9C1C4D640D7 41+ DC C'GERADO PELA MYMAK'
42 *-----------------------------------
43 * PRINT DATA/NODATA
44 *-----------------------------------
45 * ESTA' COM O DEFAULT PRINT NODATA
000022 C1D3C2C5D9E3D6 46 DC CL7'ALBERTO'
000029 C1D3C2C5D9E3D65C 47 DC CL8'ALBERTO*'
000031 C1D3C2C5D9E3C9D5 48 DC CL10'ALBERTINHO'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 177
177
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
49 * VOU MUDAR PARA PRINT DATA
50 PRINT DATA
00003B C1D3C2C5D9E3D6 51 DC CL7'ALBERTO'
000042 C1D3C2C5D9E3D65C 52 DC CL8'ALBERTO*'
00004A C1D3C2C5D9E3C9D5 53 DC CL10'ALBERTINHO'
000052 C8D6
54 * VOU RESTAURAR O DEFAULT
55 PRINT NODATA
000054 C1D3C2C5D9E3D6 56 DC CL7'ALBERTO'
00005B C1D3C2C5D9E3D65C 57 DC CL8'ALBERTO*'
000063 C1D3C2C5D9E3C9D5 58 DC CL10'ALBERTINHO'
59 *-----------------------------------
60 * PRINT ON/OFF
61 *-----------------------------------
62 * ESTA' COM O DEFAULT PRINT ON
63 *-----------------------------------
64 * ESTE STMT VAI SER IMPRESSO
65 * DEPOIS DO STMT *++++++++++
66 * VAI TER
67 * UM PRINT OFF
68 * UM HIDE DS CL1
69 * UM DC A(HIDE)
70 * E UM PRINT ON
71 *++++++++++
72 PRINT OFF
75 PRINT ON
76 *-----------------------------------
77 * EQUATES
78 *-----------------------------------
00001 79 R1 EQU 1
00074 80 LABEL EQU *
000074 81 DIVDENDO DS CL16
00074 82 COCIENTE EQU DIVDENDO,12
00080 83 RESTO EQU DIVDENDO+12,4,C'P'
00004 84 TAMRESTO EQU L'RESTO
000FF 85 BYTEON EQU X'FF'
000084 D203 A00B F007 0000B 00007 86 MOVTRECO MVC 11(4,10),7(15)
00084 87 MOVCOISA EQU MOVTRECO
88 *-----------------------------------
89 * ORG
90 *-----------------------------------
00008A 5C5C5C5C5C5C5C5C 91 CAMPO DC 8C'*'
000092 0008C 92 ORG CAMPO+2
00008C 00 93 DC X'00'
00008D 00092 94 ORG
95 * . .
000092 5C5C5C5C5C5C5C5C 96 OUTRORG DC 8C'*'
00009A 00097 97 ORG *-3
000097 00 98 DC X'00'
000098 0009A 99 ORG
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 178
178
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
100 * . .
00009A 4040404040404040 101 TABELA DC CL256' '
00019A 0009A 102 ORG TABELA +X'10'
00009A FF 103 DC X'FF'
00009B 0015B 104 ORG TABELA+C'A'
00015B FF 105 DC X'FF'
00015C 00194 106 ORG TABELA+256-X'6'
000194 FF 107 DC X'FF'
000195 000A9 108 ORG TABELA+B'1111'
0000A9 FF 109 DC X'FF'
0000AA 0019A 110 ORG
111 *-----------------------------------
112 * OPSYN
113 *-----------------------------------
114 MOVER OPSYN MVC
00019A D200 2000 4003 00000 00003 115 MOVER 0(1,2),3(4)
0001A0 D200 2000 4003 00000 00003 116 MVC 0(1,2),3(4)
117 MVC OPSYN
0001A6 D200 2000 4003 00000 00003 118 MOVER 0(1,2),3(4)
119 MVC 0(1,2),3(4)
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
120 MOVER OPSYSN
IEV057 *** ERROR *** UNDEFINED OP-CODE -- OPSYSN
0001AC D200 2000 4003 00000 00003 121 MOVER 0(1,2),3(4)
122 MVC 0(1,2),3(4)
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
123 MVC OPSYN MVC
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
0001B2 D200 2000 4003 00000 00003 124 MOVER 0(1,2),3(4)
125 MVC 0(1,2),3(4)
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
126 *-----------------------------------
127 * CCW
128 *-----------------------------------
0001B8 090001C060000085 129 PGMCANAL CCW X'09',ARIMP,X'60',133
0001C0 4040404040404040 130 ARIMP DC CL133' '
131 *-----------------------------------
132 * DC TIPO C
133 *-----------------------------------
000245 134 DCCC DC CL257'*'
IEV068 *** ERROR *** LENGTH ERROR -- L257'*'
000245 5C40404040404040 135 DCCC1 DC CL256'*'
000345 5C4040 136 DCC2 DC CL3'*'
000348 5C5C5C 137 DCC4 DC 3C'*'
00034B 7D50 138 DCC5 DC C'''&&'
139 *-----------------------------------
140 * DC TIPO X
141 *-----------------------------------
00034D 142 DC XL257'FF'
IEV068 *** ERROR *** LENGTH ERROR -- L257'FF'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 179
179
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
00034D 0000000000000000 143 DC XL256'FF'
00044D 0000FF 144 DC XL3'FF'
000450 FFFFFF 145 DC 3X'FF'
146 *-----------------------------------
147 * DC TIPO B
148 *-----------------------------------
000453 149 DC BL257'1'
IEV068 *** ERROR *** LENGTH ERROR -- L257'1'
000453 0000000000000000 150 DC BL256'1'
000553 000001 151 DC BL3'1'
000556 010101 152 DC 3B'1'
153 *-----------------------------------
154 * DC TIPO F
155 *-----------------------------------
000559 156 DC FL9'1'
IEV068 *** ERROR *** LENGTH ERROR -- L9'1'
000559 0000000000000001 157 DC FL8'1'
158 PRINT DATA
000561 000000
000564 0000000000000001 159 DC F'0,1,2,3,4,5,6,7,8'
00056C 0000000200000003
000574 0000000400000005
00057C 0000000600000007
000584 00000008
000588 000000090000000A 160 DC F'9,10,11,12,13,14'
000590 0000000B0000000C
000598 0000000D0000000E
0005A0 161 DC F'-1,-2,-3,-4,-5,-6,'
IEV074 *** ERROR *** ILLEGAL SYNTAX IN EXPRESSION -- '
0005A0 FFFFFFF9FFFFFFF8 162 DC F'-7,-8,-9,-10,-11'
0005A8 FFFFFFF7FFFFFFF6
0005B0 FFFFFFF5
163 PRINT NODATA
164 *-----------------------------------
165 * DC TIPO H
166 *-----------------------------------
0005B4 167 DC HL9'15'
IEV068 *** ERROR *** LENGTH ERROR -- L9'15'
0005B4 000000000000000F 168 DC HL8'15'
169 PRINT DATA
0005BC 0000000100020003 170 DC H'0,1,2,3,4,5,6,7,8'
0005C4 0004000500060007
0005CC 0008
0005CE 0009000A000B000C 171 DC H'9,10,11,12,13,14'
0005D6 000D000E
0005DA 172 DC H'-1,-2,-3,-4,-5,-6,'
IEV074 *** ERROR *** ILLEGAL SYNTAX IN EXPRESSION -- '
0005DA FFF9FFF8FFF7FFF6 173 DC H'-7,-8,-9,-10,-11'
0005E2 FFF5
174 PRINT NODATA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 180
180
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
175 *-----------------------------------
176 * DC TIPO E
177 *-----------------------------------
178 PRINT DATA
0005E4 0000000041100000 179 DC E'0,1,2,3,4,5,6,7,8'
0005EC 4120000041300000
0005F4 4140000041500000
0005FC 4160000041700000
000604 41800000
000608 4190000041A00000 180 DC E'9,10,11,12,13,14'
000610 41B0000041C00000
000618 41D0000041E00000
000620 181 DC E'-1,-2,-3,-4,-5,-6,'
IEV074 *** ERROR *** ILLEGAL SYNTAX IN EXPRESSION -- '
000620 C1700000C1800000 182 DC E'-7,-8,-9,-10,-11'
000628 C1900000C1A00000
000630 C1B00000
183 PRINT NODATA
184 *-----------------------------------
185 * DC TIPO D
186 *-----------------------------------
187 PRINT DATA
000634 00000000
000638 0000000000000000 188 DC D'0,1,2,3,4,5,6,7,8'
000640 4110000000000000
000648 4120000000000000
000650 4130000000000000
000658 4140000000000000
000660 4150000000000000
000668 4160000000000000
000670 4170000000000000
000678 4180000000000000
000680 4190000000000000 189 DC D'9,10,11,12,13,14'
000688 41A0000000000000
000690 41B0000000000000
000698 41C0000000000000
0006A0 41D0000000000000
0006A8 41E0000000000000
0006B0 190 DC D'-1,-2,-3,-4,-5,-6,'
IEV074 *** ERROR *** ILLEGAL SYNTAX IN EXPRESSION -- '
0006B0 C170000000000000 191 DC D'-7,-8,-9,-10,-11'
0006B8 C180000000000000
0006C0 C190000000000000
0006C8 C1A0000000000000
0006D0 C1B0000000000000
192 PRINT NODATA
193 *-----------------------------------
194 * DC TIPO L
195 *-----------------------------------
196 PRINT DATA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 181
181
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
0006D8 0000000000000000 197 DC L'0,1,2,3,4,5,6,7,8'
0006E0 0000000000000000
0006E8 4110000000000000
0006F0 3300000000000000
0006F8 4120000000000000
000700 3300000000000000
000708 4130000000000000
000710 3300000000000000
000718 4140000000000000
000720 3300000000000000
000728 4150000000000000
000730 3300000000000000
000738 4160000000000000
000740 3300000000000000
000748 4170000000000000
000750 3300000000000000
000758 4180000000000000
000760 3300000000000000
000768 4190000000000000 198 DC L'9,10,11,12,13,14'
000770 3300000000000000
000778 41A0000000000000
000780 3300000000000000
000788 41B0000000000000
000790 3300000000000000
000798 41C0000000000000
0007A0 3300000000000000
0007A8 41D0000000000000
0007B0 3300000000000000
0007B8 41E0000000000000
0007C0 3300000000000000
0007C8 199 DC L'-1,-2,-3,-4,-5,-6,'
IEV074 *** ERROR *** ILLEGAL SYNTAX IN EXPRESSION -- '
0007C8 C170000000000000 200 DC L'-7,-8,-9,-10,-11'
0007D0 B300000000000000
0007D8 C180000000000000
0007E0 B300000000000000
0007E8 C190000000000000
0007F0 B300000000000000
0007F8 C1A0000000000000
000800 B300000000000000
000808 C1B0000000000000
000810 B300000000000000
201 PRINT NODATA
202 *-----------------------------------
203 * DC TIPO P
204 *-----------------------------------
000818 205 DC PL17'1'
IEV068 *** ERROR *** LENGTH ERROR -- L17'1'
000818 0000000000000000 206 DC PL16'1'
000828 00009C 207 DC PL3'9'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 182
182
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
00082B 9C9C9C 208 DC 3P'9'
209 *-----------------------------------
210 * DC TIPO Z
211 *-----------------------------------
00082E 212 DC ZL17'1'
IEV068 *** ERROR *** LENGTH ERROR -- L17'1'
00082E F0F0F0F0F0F0F0F0 213 DC ZL16'1'
00083E F0F0C9 214 DC ZL3'9'
000841 C9C9C9 215 DC 3Z'9'
216 *-----------------------------------
217 * DC TIPO A / DC TIPO V / ENTRY/EXTR
218 *-----------------------------------
000844 219 Z DS CL4
000848 00000000 220 A1 DC A(0)
00084C 00000FFF00007D00 221 A2 DC A(4095,32000)
000854 00001000 222 A3 DC A(X'1000')
000858 0000000F 223 A4 DC A(B'1111')
00085C 00005C5C 224 A5 DC A(C'**')
000860 0000085C 225 DC A(A5)
000864 0000086C 226 DC A(A5+16)
000868 0000084C 227 DC A(A5-16)
00086C 0000086C 228 DC A(*)
000870 00000004 229 DC A(L'A1)
000874 8000084C 230 DC A(A2+X'80000000')
000878 00 231 A11 DC AL1(*-A11)
000879 0001020304050607 232 A12 DC 8AL1(*-A12)
000881 FF00010203040506 233 A13 DC 8AL1(255+*-A13)
000889 000000
00088C 00000000 234 DC A(FORA)
235 EXTRN FORA
236 ENTRY Z
000890 00000000 237 DC V(SUBROT)
238 CALL SUBROT,(ENTRA,SAI)
000894 239+ CNOP 0,4
000894 47F0 389C 0089C 240+ B *+8
000898 00000000 241+IHB0003B DC V(SUBROT)
00089C 242+ CNOP 0,4
00089C 4110 38A4 008A4 243+ LA 1,IHB0004
0008A0 47F0 38AC 008AC 244+ B IHB0004A
008A4 245+IHB0004 EQU *
0008A4 000008B2 246+ DC A(ENTRA) P
0008A8 000008B5 247+ DC A(SAI)
008AC 248+IHB0004A EQU *
0008AC 58F0 3898 00898 249+ L 15,IHB0003B
0008B0 05EF 250+ BALR 14,15
0008B2 00012C 251 ENTRA DC PL3'12'
0008B5 252 SAI DS CL400
253 *-----------------------------------
254 * DC TIPO Y
255 *-----------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 183
183
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
000A45 00
000A46 00740074 256 DC Y(LABEL,COCIENTE)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A4A 0FFF7D00 257 Y2 DC Y(4095,32000)
000A4E 1000 258 Y3 DC Y(X'1000')
000A50 000F 259 Y4 DC Y(B'1111')
000A52 5C5C 260 Y5 DC Y(C'**')
000A54 085C 261 DC Y(A5)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A56 086C 262 DC Y(A5+16)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A58 084C 263 DC Y(A5-16)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A5A 4FFF 264 DC Y(PROGDEMO+X'4FFF')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A5C 5000 265 DC Y(PROGDEMO+X'5000')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A5E 7FFF 266 DC Y(PROGDEMO+X'7FFF')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A60 8000 267 DC Y(PROGDEMO+X'8000')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
IEV072 *** ERROR *** DATA ITEM TOO LARGE
268 *-----------------------------------
269 * ALINHAMENTOS
270 *-----------------------------------
000A68 271 DS 0D
000A68 272 AAALIN DS C
000A6C 273 DS 0F
000A6C 274 DS C
000A6D 000000
000A70 275 DC 0F'-1'
000A70 276 DS C
000A71 00
000A72 277 DC 0H'-1'
000A72 278 DS C
000A73 00
000A74 279 DC 0A(0)
000A74 280 DS C
000A75 000000
000A78 281 DC 0D'0'
000A78 282 DS C
000A79 00
000A7A 283 DC 0Y(0)
000A7A 284 DS C
000A7B 00
000A7C 285 DC 0S(BYTE)
IEV044 *** ERROR *** UNDEFINED SYMBOL
000A7C 286 DS C
000A7D 000000
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 184
184
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
000A80 FFFFFFFF 287 DC 1F'-1'
000A84 288 DS C
000A85 00
000A86 FFFF 289 DC 1H'-1'
000A88 290 DS C
000A89 000000
000A8C 00000000 291 DC 1A(0)
000A90 292 DS C
000A91 00000000000000
000A98 0000000000000000 293 DC 1D'0'
000AA0 294 DS C
000AA1 00
000AA2 0000 295 DC 1Y(0)
000AA4 296 DS C
000AA5 00
000AA6 3A68 297 DC 1S(AAALIN)
000AA8 298 DS C
299 * CNOPS
000AB0 300 DS 0D
000AB0 301 DS C
000AB1 00
000AB2 070007000700 302 CNOP 0,8
000AB8 303 DS CL9
000AC1 00
000AC2 0700 304 CNOP 4,8
000AC4 305 DS CL5
000AC9 00
000ACA 306 CNOP 2,8
000ACA 307 DS CL7
000AD1 00
000AD2 07000700 308 CNOP 6,8
000AD6 309 DS CL3
000AD9 00
000ADA 0700 310 CNOP 0,4
000ADC 311 DS CL5
000AE1 00
000AE2 312 CNOP 2,4
313 *-----------------------------------
314 * DS
315 *-----------------------------------
000AE2 316 DATA DS 0CL6
000AE2 317 DIA DS CL2
000AE4 318 MES DS CL2
000AE6 319 ANO DS CL2
000AE8 320 DS CL300000
IEV068 *** ERROR *** LENGTH ERROR -- L300000
000AE8 321 CAMPO DS 3CL2
IEV043 *** ERROR *** PREVIOUSLY DEFINED SYMBOL -- CAMPO
000AEE 322 DS C,P
000AF0 323 DS X'0A0B0C'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 185
185
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
000AF3 324 DS CL300000
IEV068 *** ERROR *** LENGTH ERROR -- L300000
325 *-----------------------------------
326 END

--------------------------------------

RELOCATION DICTIONARY
POS.ID REL.ID FLAGS ADDRESS
0001 0001 0C 000070
0001 0001 08 0001B9
0001 0001 0C 000860
0001 0001 0C 000864
0001 0001 0C 000868
0001 0001 0C 00086C
0001 0001 0C 000874
0001 0001 0C 0008A4
0001 0001 0C 0008A8
0001 0001 04 000A46
0001 0001 04 000A48
0001 0001 04 000A54
0001 0001 04 000A56
0001 0001 04 000A58
0001 0001 04 000A5A
0001 0001 04 000A5C
0001 0001 04 000A5E
0001 0001 04 000A60
0001 0002 0C 00088C
0001 0003 1C 000890
0001 0003 1C 000898
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 186
186
CROSS REFERENCE
SYMBOL LEN VALUE DEFN REFERENCES
AAALIN 00001 000A68 0272 0297
ANO 00002 000AE6 0319
ARIMP 00133 0001C0 0130 0129
A1 00004 000848 0220 0229
A11 00001 000878 0231 0231
A12 00001 000879 0232 0232
A13 00001 000881 0233 0233
A2 00004 00084C 0221 0230
A3 00004 000854 0222
A4 00004 000858 0223
A5 00004 00085C 0224 0225 0226 0227 0261 0262 0263
BYTE ****UNDEFINED**** 0285
BYTEON 00001 000000FF 0085
CAMPO 00001 00008A 0091 0092
CAMPO 00001 00000000 0321 ****DUPLICATE****
COCIENTE 00012 00000074 0082 0256
DATA 00006 000AE2 0316
DCCC 00001 000245 0134
DCCC1 00256 000245 0135
DCC2 00003 000345 0136
DCC4 00001 000348 0137
DCC5 00002 00034B 0138
DIA 00002 000AE2 0317
DIVDENDO 00016 000074 0081 0082 0083
ENTRA 00003 0008B2 0251 0246
FORA 00001 00000000 0235 0234
HIDE 00001 00006D 0073 0074
IHB0003B 00004 000898 0241 0249
IHB0004 00001 000008A4 0245 0243
IHB0004A 00001 000008AC 0248 0244
LABEL 00001 00000074 0080 0256
MES 00002 000AE4 0318
MOVCOISA 00006 00000084 0087
MOVTRECO 00006 000084 0086 0087
OUTRORG 00001 000092 0096
PGMCANAL 00008 0001B8 0129
PROGDEMO 00001 00000000 0013 0264 0265 0266 0267
RESTO 00004 00000080 0083 0084
R1 00001 00000001 0079
SAI 00400 0008B5 0252 0247
SIMBOLOPODESTER63CARACTERES
00001 00000000 0029
TABELA 00256 00009A 0101 0102 0104 0106 0108
TAMRESTO 00001 00000004 0084
Y2 00002 000A4A 0257
Y3 00002 000A4E 0258
Y4 00002 000A50 0259
Y5 00002 000A52 0260
Z 00004 000844 0219 0236
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 187
187
DIAGNOSTIC CROSS REFERENCE AND ASSEMBLER S

THE FOLLOWING STATEMENTS WERE FLAGGED


000028 000119 000120 000122 000123 000125 000134 000142 000149 000156 000
000205 000212 000256 000261 000262 000263 000264 000265 000266 000267 000
30 STATEMENTS FLAGGED IN THIS ASSEMBLY 12 WAS HIGHEST SEVERITY CO
OVERRIDING PARAMETERS- LINECOUNT(50),XREF(FULL)
OPTIONS FOR THIS ASSEMBLY
DECK, NOOBJECT, LIST, XREF(FULL), NORENT, NOTEST, NOBATCH, ALIGN, ESD, R
FLAG(0), SYSPARM()
NO OVERRIDING DD NAMES
312 CARDS FROM SYSIN 216 CARDS FROM SYSLIB
572 LINES OUTPUT 73 CARDS OUTPUT
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 188
188

APÊNDICE Q - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 2

EXTERNAL SYMBOL DICTIONARY


SYMBOL TYPE ID ADDR LENGTH LD ID FLAGS
REGSBASE SD 0001 000000 0050D5 00
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 189
189
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
1 *-----------------------------------
2* 1 2 3
3 *23456789012345678901234567890123456
4 *-----------------------------------
5 *-----------------------------------
6 * ESTE PROGRAMA NAO PODE SER
7 * EXECUTADO POIS NAO FUNCIONA.
8 * SEU OBJETIVO E' DEMONSTRAR O FUN-
9 * CIONAMENTO DE REGISTRADORES BASE
10 *-----------------------------------
000000 11 REGSBASE START 0
00000 12 USING *,3,4,5,6,7
13 *
14 * AVISA QUE OS REGISTRADORES BASE
15 * SERAO O 3, 4, 5, 6 E 7
16 * E QUE SEUS CONTEUDOS PRESUMIDOS
17 * EM TEMPO DE EXECUCAO SERAO
18 * R3 = 000000
19 * R4 = 001000
20 * R5 = 002000
21 * R6 = 003000
22 * R7 = 004000
23 *-----------------------------------
00000 24 USING DSEQUIT,11
25 *
26 * AVISA QUE OS CAMPOS DA DSECT TERAO
27 * O REGISTRADOR 11 COMO BASE
28 *-----------------------------------
29 *-----------------------------------
30 * ESTE PRIMEIRO BLOCO E SERVIDO PELO
31 * REGISTRADOR BASE 3. ESTE BLOCO VAI
32 * DO ENDERECO 000000 ATE O 000FFF
33 *-----------------------------------
00000 34 BLOCO1 EQU *
000000 35 DS CL4096
001000 00000 36 ORG BLOCO1
000000 37 DS CL1024
000400 38 A DS CL16
000410 39 B DS CL16
40 * . .
000420 3400 41 DC S(A)
000422 3410 42 DC S(B)
000424 400040165000502C 43 DC S(C,D,E,F)
00042C 6000604270007058 44 DC S(G,H,I,J)
45 * . .
000434 D20F 3400 3410 00400 00410 46 MVC A,B
00043A D215 4000 4016 01000 01016 47 MVC C,D
000440 D22B 5000 502C 02000 0202C 48 MVC E,F
000446 D241 6000 6042 03000 03042 49 MVC G,H
00044C D257 7000 7058 04000 04058 50 MVC I,J
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 190
190
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
51 * . .
000452 D20F 3400 7058 00400 04058 52 MVC A,J
000458 D257 7000 3410 04000 00410 53 MVC I,B
00045E D215 4000 6000 01000 03000 54 MVC C,G
000464 D24C 6042 4016 03042 01016 55 MVC H,D
56 * . .
00046A D20F 3400 B000 00400 00000 57 MVC A,DSEKCPO1
000470 D215 4000 B00B 01000 0000B 58 MVC C,DSEKCPO2
000476 0000 0000 0000 00000 00000 59 MVC E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
00047C D241 6000 B021 03000 00021 60 MVC G,DSEKCPO4
000482 D257 7000 B02C 04000 0002C 61 MVC I,DSEKCPO5
000488 D20A B037 B042 00037 00042 62 MVC DSEKCPO6,DSEKCPO7
63 * . .
00048E 41C0 7FFF 04FFF 64 LA 12,Z-1
000492 0000 0000 00000 65 LA 12,Z+1
IEV034 *** ERROR *** ADDRESSABILITY ERROR
000496 0000 0000 00000 66 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
00049A 58C0 34A8 004A8 67 L 12,=A(Z)
00049E D20F 3400 34AC 00400 004AC 68 MVC A,=C'*'
69 * . .
0004A8 70 LTORG ,
0004A8 00005000 71 =A(Z)
0004AC 5C 72 =C'*'
73 * . .
0004AD 00
0004AE D20F 3400 40E4 00400 010E4 74 MVC A,=C'*'
0004B4 0000 0000 00000 75 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0004B8 58C0 40E0 010E0 76 L 12,=A(Z)
77 * . .
0004BC 01000 78 ORG ,
79 *-----------------------------------
80 * ESTE SEGUNDO BLOCO E SERVIDO PELO
81 * REGISTRADOR BASE 4. ESTE BLOCO VAI
82 * DO ENDERECO 001000 ATE O 001FFF
83 *-----------------------------------
01000 84 BLOCO2 EQU *
001000 85 DS CL4096
002000 01000 86 ORG BLOCO2
001000 87 C DS CL22
001016 88 D DS CL33
89 * . .
001037 00
001038 D20F 3400 3410 00400 00410 90 MVC A,B
00103E D215 4000 4016 01000 01016 91 MVC C,D
001044 D22B 5000 502C 02000 0202C 92 MVC E,F
00104A D241 6000 6042 03000 03042 93 MVC G,H
001050 D257 7000 7058 04000 04058 94 MVC I,J
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 191
191
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
95 * . .
001056 D20F 3400 7058 00400 04058 96 MVC A,J
00105C D257 7000 3410 04000 00410 97 MVC I,B
001062 D215 4000 6000 01000 03000 98 MVC C,G
001068 D24C 6042 4016 03042 01016 99 MVC H,D
100 * . .
101 * VOU TIRAR O 5 DA TABELA DE BASES
102 * . .
103 DROP 5
00106E D20F 3400 3410 00400 00410 104 MVC A,B
001074 D215 4000 4016 01000 01016 105 MVC C,D
00107A 0000 0000 0000 00000 00000 106 MVC E,F
IEV034 *** ERROR *** ADDRESSABILITY ERROR
IEV034 *** ERROR *** ADDRESSABILITY ERROR
001080 D241 6000 6042 03000 03042 107 MVC G,H
001086 D257 7000 7058 04000 04058 108 MVC I,J
109 * . .
110 * VOU FAZER O 5 VOLTAR 'A TABELA DE
111 * BASES, COM O MESMO CONTEUDO
112 * . .
02000 113 USING REGSBASE+X'2000',5
00108C D20F 3400 3410 00400 00410 114 MVC A,B
001092 D215 4000 4016 01000 01016 115 MVC C,D
001098 D22B 5000 502C 02000 0202C 116 MVC E,F
00109E D241 6000 6042 03000 03042 117 MVC G,H
0010A4 D257 7000 7058 04000 04058 118 MVC I,J
119 * . .
0010AA D20F 3400 B000 00400 00000 120 MVC A,DSEKCPO1
0010B0 D215 4000 B00B 01000 0000B 121 MVC C,DSEKCPO2
0010B6 0000 0000 0000 00000 00000 122 MVC E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
0010BC D241 6000 B021 03000 00021 123 MVC G,DSEKCPO4
0010C2 D257 7000 B02C 04000 0002C 124 MVC I,DSEKCPO5
0010C8 D20A B037 B042 00037 00042 125 MVC DSEKCPO6,DSEKCPO7
126 * . .
0010CE 0000 0000 00000 127 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0010D2 58C0 40E0 010E0 128 L 12,=A(Z)
0010D6 D20F 3400 40E4 00400 010E4 129 MVC A,=C'*'
130 * . .
0010E0 131 LTORG ,
0010E0 00005000 132 =A(Z)
0010E4 5C 133 =C'*'
134 * . .
0010E5 00
0010E6 D20F 3400 50D4 00400 020D4 135 MVC A,=C'*'
0010EC 0000 0000 00000 136 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0010F0 58C0 50D0 020D0 137 L 12,=A(Z)
138 * . .
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 192
192
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
0010F4 02000 139 ORG ,
140 *-----------------------------------
141 * ESTE TERCEIRO BLOCO E SERVIDO PELO
142 * REGISTRADOR BASE 5. ESTE BLOCO VAI
143 * DO ENDERECO 002000 ATE O 002FFF
144 *-----------------------------------
02000 145 BLOCO3 EQU *
002000 146 DS CL4096
003000 02000 147 ORG BLOCO3
002000 148 E DS CL44
00202C 149 F DS CL55
150 * . .
002063 00
002064 D20F 3400 3410 00400 00410 151 MVC A,B
00206A D215 4000 4016 01000 01016 152 MVC C,D
002070 D22B 5000 502C 02000 0202C 153 MVC E,F
002076 D241 6000 6042 03000 03042 154 MVC G,H
00207C D257 7000 7058 04000 04058 155 MVC I,J
156 * . .
002082 D20F 3400 7058 00400 04058 157 MVC A,J
002088 D257 7000 3410 04000 00410 158 MVC I,B
00208E D215 4000 6000 01000 03000 159 MVC C,G
002094 D24C 6042 4016 03042 01016 160 MVC H,D
161 * . .
00209A D20F 3400 B000 00400 00000 162 MVC A,DSEKCPO1
0020A0 D215 4000 B00B 01000 0000B 163 MVC C,DSEKCPO2
0020A6 0000 0000 0000 00000 00000 164 MVC E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
0020AC D241 6000 B021 03000 00021 165 MVC G,DSEKCPO4
0020B2 D257 7000 B02C 04000 0002C 166 MVC I,DSEKCPO5
0020B8 D20A B037 B042 00037 00042 167 MVC DSEKCPO6,DSEKCPO7
168 * . .
0020BE 0000 0000 00000 169 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0020C2 58C0 50D0 020D0 170 L 12,=A(Z)
0020C6 D20F 3400 50D4 00400 020D4 171 MVC A,=C'*'
172 * . .
0020D0 173 LTORG ,
0020D0 00005000 174 =A(Z)
0020D4 5C 175 =C'*'
176 * . .
0020D5 00
0020D6 D20F 3400 60FC 00400 030FC 177 MVC A,=C'*'
0020DC 0000 0000 00000 178 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0020E0 58C0 60F8 030F8 179 L 12,=A(Z)
180 * . .
0020E4 03000 181 ORG ,
182 *-----------------------------------
183 * ESTE QUARTO BLOCO E SERVIDO PELO
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 193
193
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
184 * REGISTRADOR BASE 6. ESTE BLOCO VAI
185 * DO ENDERECO 003000 ATE O 003FFF
186 *-----------------------------------
03000 187 BLOCO4 EQU *
003000 188 DS CL4096
004000 03000 189 ORG BLOCO4
003000 190 G DS CL66
003042 191 H DS CL77
192 * . .
00308F 00
003090 D20F 3400 3410 00400 00410 193 MVC A,B
003096 D215 4000 4016 01000 01016 194 MVC C,D
00309C D22B 5000 502C 02000 0202C 195 MVC E,F
0030A2 D241 6000 6042 03000 03042 196 MVC G,H
0030A8 D257 7000 7058 04000 04058 197 MVC I,J
198 * . .
0030AE D20F 3400 7058 00400 04058 199 MVC A,J
0030B4 D257 7000 3410 04000 00410 200 MVC I,B
0030BA D215 4000 6000 01000 03000 201 MVC C,G
0030C0 D24C 6042 4016 03042 01016 202 MVC H,D
203 * . .
0030C6 D20F 3400 B000 00400 00000 204 MVC A,DSEKCPO1
0030CC D215 4000 B00B 01000 0000B 205 MVC C,DSEKCPO2
0030D2 0000 0000 0000 00000 00000 206 MVC E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
0030D8 D241 6000 B021 03000 00021 207 MVC G,DSEKCPO4
0030DE D257 7000 B02C 04000 0002C 208 MVC I,DSEKCPO5
0030E4 D20A B037 B042 00037 00042 209 MVC DSEKCPO6,DSEKCPO7
210 * . .
0030EA 0000 0000 00000 211 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0030EE 58C0 60F8 030F8 212 L 12,=A(Z)
0030F2 D20F 3400 60FC 00400 030FC 213 MVC A,=C'*'
214 * . .
0030F8 215 LTORG ,
0030F8 00005000 216 =A(Z)
0030FC 5C 217 =C'*'
218 * . .
0030FD 00
0030FE D20F 3400 712C 00400 0412C 219 MVC A,=C'*'
003104 0000 0000 00000 220 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
003108 58C0 7128 04128 221 L 12,=A(Z)
222 * . .
00310C 04000 223 ORG ,
224 *-----------------------------------
225 * ESTE QUINTO BLOCO E SERVIDO PELO
226 * REGISTRADOR BASE 7. ESTE BLOCO VAI
227 * DO ENDERECO 004000 ATE O 004FFF
228 *-----------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 194
194
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
04000 229 BLOCO5 EQU *
004000 230 DS CL4096
005000 04000 231 ORG BLOCO5
004000 232 I DS CL88
004058 233 J DS CL99
234 * . .
0040BB 00
0040BC D20F 3400 3410 00400 00410 235 MVC A,B
0040C2 D215 4000 4016 01000 01016 236 MVC C,D
0040C8 D22B 5000 502C 02000 0202C 237 MVC E,F
0040CE D241 6000 6042 03000 03042 238 MVC G,H
0040D4 D257 7000 7058 04000 04058 239 MVC I,J
240 * . .
0040DA D20F 3400 7058 00400 04058 241 MVC A,J
0040E0 D257 7000 3410 04000 00410 242 MVC I,B
0040E6 D215 4000 6000 01000 03000 243 MVC C,G
0040EC D24C 6042 4016 03042 01016 244 MVC H,D
245 * . .
0040F2 D20F 3400 B000 00400 00000 246 MVC A,DSEKCPO1
0040F8 D215 4000 B00B 01000 0000B 247 MVC C,DSEKCPO2
0040FE 0000 0000 0000 00000 00000 248 MVC E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
004104 D241 6000 B021 03000 00021 249 MVC G,DSEKCPO4
00410A D257 7000 B02C 04000 0002C 250 MVC I,DSEKCPO5
004110 D20A B037 B042 00037 00042 251 MVC DSEKCPO6,DSEKCPO7
252 * . .
004116 0000 0000 00000 253 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
00411A 58C0 7128 04128 254 L 12,=A(Z)
00411E D20F 3400 712C 00400 0412C 255 MVC A,=C'*'
256 * . .
004128 257 LTORG ,
004128 00005000 258 =A(Z)
00412C 5C 259 =C'*'
260 * . .
00412D 00
00412E 0000 0000 0000 00000 00000 261 MVC A,=C'*'
IEV034 *** ERROR *** ADDRESSABILITY ERROR
004134 0000 0000 00000 262 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
004138 0000 0000 00000 263 L 12,=A(Z)
IEV034 *** ERROR *** ADDRESSABILITY ERROR
264 * . .
00413C 05000 265 ORG ,
266 *-----------------------------------
267 * ESTE SEXTO BLOCO NAO TEM BASE QUE
268 * O ATENDA. TODOS OS SEUS ENDERECOS
269 * NAO PODEM SER CONVERTIDOS EM
270 * BASE+DESLOCAMENTO
271 *-----------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 195
195
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
005000 272 Z DS CL80
273 * . .
005050 D20F 3400 3410 00400 00410 274 MVC A,B
005056 D215 4000 4016 01000 01016 275 MVC C,D
00505C D22B 5000 502C 02000 0202C 276 MVC E,F
005062 D241 6000 6042 03000 03042 277 MVC G,H
005068 D257 7000 7058 04000 04058 278 MVC I,J
279 * . .
00506E D20F 3400 7058 00400 04058 280 MVC A,J
005074 D257 7000 3410 04000 00410 281 MVC I,B
00507A D215 4000 6000 01000 03000 282 MVC C,G
005080 D24C 6042 4016 03042 01016 283 MVC H,D
284 * . .
005086 D20F 3400 B000 00400 00000 285 MVC A,DSEKCPO1
00508C D215 4000 B00B 01000 0000B 286 MVC C,DSEKCPO2
005092 0000 0000 0000 00000 00000 287 MVC E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
005098 D241 6000 B021 03000 00021 288 MVC G,DSEKCPO4
00509E D257 7000 B02C 04000 0002C 289 MVC I,DSEKCPO5
0050A4 D20A B037 B042 00037 00042 290 MVC DSEKCPO6,DSEKCPO7
291 * . .
0050AA 0000 0000 00000 292 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050AE 0000 0000 00000 293 L 12,=A(Z)
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050B2 0000 0000 0000 00000 00000 294 MVC A,=C'*'
IEV034 *** ERROR *** ADDRESSABILITY ERROR
295 * . .
0050B8 296 LTORG ,
0050B8 00005000 297 =A(Z)
0050BC 5C 298 =C'*'
299 * . .
0050BD 00
0050BE 0000 0000 0000 00000 00000 300 MVC A,=C'*'
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050C4 0000 0000 00000 301 LA 12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050C8 0000 0000 00000 302 L 12,=A(Z)
IEV034 *** ERROR *** ADDRESSABILITY ERROR
303 *-----------------------------------
304 * ESTA E' A DSECT DSEQUIT.
305 * OS SEUS CAMPOS SERAO ENDERECADOS
306 * PELO REGISTRADOR 11
307 *-----------------------------------
000000 308 DSEQUIT DSECT
000000 309 DSEKCPO1 DS CL11
00000B 310 DSEKCPO2 DS CL11
000016 311 DSEKCPO3 DS CL11
000021 312 DSEKCPO4 DS CL11
00002C 313 DSEKCPO5 DS CL11
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 196
196
LOC OBJECT CODE ADDR1 ADDR2 STMT SOURCE STATEMENT
000037 314 DSEKCPO6 DS CL11
000042 315 DSEKCPO7 DS CL11
316 *-----------------------------------
317 * VOLTO PARA A CSECT DO PROGRAMA
318 *-----------------------------------
0050CC 319 REGSBASE CSECT ,
320 END ,
0050D0 00005000 321 =A(Z)
0050D4 5C 322 =C'*'

--------------------------------------

RELOCATION DICTIONARY
POS.ID REL.ID FLAGS ADDRESS
0001 0001 0C 0004A8
0001 0001 0C 0010E0
0001 0001 0C 0020D0
0001 0001 0C 0030F8
0001 0001 0C 004128
0001 0001 0C 0050B8
0001 0001 0C 0050D0
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 197
197
CROSS REFERENCE
SYMBOL LEN VALUE DEFN REFERENCES
A 00016 000400 0038 0041 0046 0052 0057 0068 0074 0090 0096 0104 0
0193 0199 0204 0213 0219 0235 0241 0246 0255 0
B 00016 000410 0039 0042 0046 0053 0090 0097 0104 0114 0151 0158 0
BLOCO1 00001 00000000 0034 0036
BLOCO2 00001 00001000 0084 0086
BLOCO3 00001 00002000 0145 0147
BLOCO4 00001 00003000 0187 0189
BLOCO5 00001 00004000 0229 0231
C 00022 001000 0087 0043 0047 0054 0058 0091 0098 0105 0115 0121 0
0275 0282 0286
D 00033 001016 0088 0043 0047 0055 0091 0099 0105 0115 0152 0160 0
DSEKCOP3 ****UNDEFINED**** 0059 0122 0164 0206 0248 0287
DSEKCPO1 00011 000000 0309 0057 0120 0162 0204 0246 0285
DSEKCPO2 00011 00000B 0310 0058 0121 0163 0205 0247 0286
DSEKCPO3 00011 000016 0311
DSEKCPO4 00011 000021 0312 0060 0123 0165 0207 0249 0288
DSEKCPO5 00011 00002C 0313 0061 0124 0166 0208 0250 0289
DSEKCPO6 00011 000037 0314 0062 0125 0167 0209 0251 0290
DSEKCPO7 00011 000042 0315 0062 0125 0167 0209 0251 0290
DSEQUIT 00001 00000000 0308 0024
E 00044 002000 0148 0043 0048 0059 0092 0106 0116 0122 0153 0164 0
F 00055 00202C 0149 0043 0048 0092 0106 0116 0153 0195 0237 0276
G 00066 003000 0190 0044 0049 0054 0060 0093 0098 0107 0117 0123 0
0277 0282 0288
H 00077 003042 0191 0044 0049 0055 0093 0099 0107 0117 0154 0160 0
I 00088 004000 0232 0044 0050 0053 0061 0094 0097 0108 0118 0124 0
0278 0281 0289
J 00099 004058 0233 0044 0050 0052 0094 0096 0108 0118 0155 0157 0
REGSBASE 00001 00000000 0011 0113 0319
Z 00080 005000 0272 0064 0065 0066 0071 0075 0127 0132 0136 0169 0
0297 0301 0321
=A(Z) 00004 0004A8 0071 0067
=A(Z) 00004 0010E0 0132 0076 0128
=A(Z) 00004 0020D0 0174 0137 0170
=A(Z) 00004 0030F8 0216 0179 0212
=A(Z) 00004 004128 0258 0221 0254
=A(Z) 00004 0050B8 0297 0263 0293
=A(Z) 00004 0050D0 0321 0302
=C'*' 00001 0004AC 0072 0068
=C'*' 00001 0010E4 0133 0074 0129
=C'*' 00001 0020D4 0175 0135 0171
=C'*' 00001 0030FC 0217 0177 0213
=C'*' 00001 00412C 0259 0219 0255
=C'*' 00001 0050BC 0298 0261 0294
=C'*' 00001 0050D4 0322 0300
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 198
198
DIAGNOSTIC CROSS REFERENCE AND ASSEMBLER S

THE FOLLOWING STATEMENTS WERE FLAGGED


000059 000065 000066 000075 000106 000122 000127 000136 000164 000169 000
000261 000262 000263 000287 000292 000293 000294 000300 000301 000302
26 STATEMENTS FLAGGED IN THIS ASSEMBLY 8 WAS HIGHEST SEVERITY CO
OVERRIDING PARAMETERS- LINECOUNT(50),XREF(FULL)
OPTIONS FOR THIS ASSEMBLY
DECK, NOOBJECT, LIST, XREF(FULL), NORENT, NOTEST, NOBATCH, ALIGN, ESD, R
FLAG(0), SYSPARM()
NO OVERRIDING DD NAMES
308 CARDS FROM SYSIN 0 CARDS FROM SYSLIB
452 LINES OUTPUT 24 CARDS OUTPUT
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 199
199

PROGRAMAS PROPOSTOS

EXERCÍCIO 01
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (ZIG). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 5 5 X Informação ALFA
6 15 10 X Informação BETA
16 30 15 X Informação GAMA
31 50 20 X Informação DELTA

Exemplo:

12345678901234567890123456789012345678901234567890 ("régua")

AAAAABBBBBBBBBBCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDD
11111222222222233333333333333344444444444444444444
-----**********&&&&&&&&&&&&&&&====================

---------------------------------------------------------------------------
SAIDA : Arquivo em disco sequencial (ZAG). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 15 15 X Informação GAMA
16 20 5 X Informação ALFA
21 40 20 X Informação DELTA
41 50 10 X Informação BETA

Exemplo:

12345678901234567890123456789012345678901234567890 ("régua")

CCCCCCCCCCCCCCCAAAAADDDDDDDDDDDDDDDDDDDDBBBBBBBBBB
33333333333333311111444444444444444444442222222222
&&&&&&&&&&&&&&&-----====================**********

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de ZIG lido, gravar um registro de ZAG.


ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 200
200

EXERCÍCIO 02
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (TIC).
Tem no máximo 10 registros. Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 X Informação a
5 8 4 X Informação b
9 12 4 X Informação c
13 16 4 X Informação d
17 20 4 X Informação e
21 24 4 X Informação f
25 28 4 X Informação g
29 32 4 X Informação h
33 36 4 X Informação i
37 40 4 X Informação j

Exemplo:

1234567890123456789012345678901234567890 ("régua")

AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ
1111222233334444555566667777888899990000
LLLLMMMMOOOOPPPPQQQQRRRRSSSSTTTTUUUUXXXX

---------------------------------------------------------------------------
SAIDA : Arquivo em disco sequencial (TAC). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número registro
5 8 4 X Informação n
9 20 12 X zeros binários

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

00000001C1C1C1C1000000000000000000000000
00000002F2F2F2F2000000000000000000000000
00000003D6D6D6D6000000000000000000000000

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de TIC lido, gravar um registro de TAC, onde a informação n corresponde ao n-ésimo campo do
registro de entrada, sendo n = número do registro. Por exemplo, o registro 1 vai ter a informação a gravada; o
registro 2 vai ter a informação b; e assim por diante.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 201
201

EXERCÍCIO 03
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (ENTRA). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 50 50 X Informação qualquer

Exemplo:

1234567890123456789012345678901234567890 ("régua")

TEXTO LIVRE PARA DAR ASAS A IMAGINACAO


MOVE SPACES TO LINHA-DE-IMPRESSAO

OKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOK

---------------------------------------------------------------------------
SAIDA : Arquivo em disco sequencial (SAI). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número registro
5 8 4 B quantos brancos
9 12 4 B quantos não brancos
13 20 8 X X'FF' em todos bytes

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

00000001000000080000002AFFFFFFFFFFFFFFFF
000000020000000A00000028FFFFFFFFFFFFFFFF
000000030000003200000000FFFFFFFFFFFFFFFF
000000040000000000000032FFFFFFFFFFFFFFFF

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de ENTRA lido, considerá-lo como uma tabela de 50 elementos de 1 byte cada; pesquisar cada
byte para saber se ele está em branco (X'40') ou não, e ir acumulando em dois acumuladores a quantidade de bytes
brancos e não-brancos detectada. Após "varrer" o registro inteiro em suas 50 posições, gravar um registro de SAI.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 202
202

EXERCÍCIO 04
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (TOP). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número a
5 8 4 B Número b
9 12 4 B Número c
13 20 8 X brancos

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

0000000100000002000000034040404040404040
0000000700000006000000054040404040404040
000000090000000A000000024040404040404040

---------------------------------------------------------------------------
SAIDA : Arquivo em disco sequencial (DOWN). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número registro
5 8 4 B menor número
9 12 4 B maior número
13 20 8 X X'FF' em todos bytes

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

000000010000000100000003FFFFFFFFFFFFFFFF
000000020000000500000007FFFFFFFFFFFFFFFF
00000003000000020000000AFFFFFFFFFFFFFFFF

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de TOP lido, determinar dos 3 números fornecidos (a, b, c) qual deles é o menor e qual deles é o
maior; gravar, então, um registro de DOWN.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 203
203

EXERCÍCIO 05
---------------------------------------------------------------------------
ENTRADA 1 : Arquivo em disco sequencial (EU)

Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número a
5 8 4 P Número b
9 12 4 Z Número c
13 20 8 C Filler

Exemplo:

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

000000010000123CF0F0F1F10000000000000000
000000020000124CF0F0F1F20000000000000000
000000030000125CF0F0F1F30000000000000000

---------------------------------------------------------------------------
SAIDA : Arquivo sequencial em disco (ELA). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número do registro
5 14 10 Z Média ponderada
15 20 6 C Filler

Exemplo:

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

00000001F0F0F0F0F0F0F0F0F4F5000000000000
00000002F0F0F0F0F0F0F0F0F4F6000000000000
00000003F0F0F0F0F0F0F0F0F4F7000000000000

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro lido em EU calcular a média ponderada (MP):


MP = ( (a.7) + (b.8) + (c.9) ) / 24
e gravar um registro de ELA.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 204
204

EXERCÍCIO 06
---------------------------------------------------------------------------
ENTRADA 1 : Arquivo em disco sequencial (VEMTAB)

Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 5 5 C Código cidade
6 30 25 C Nome cidade

Exemplo:

123456789012345678901234567890 ("régua")

00003BOM JESUS DE PIRAPORA


00001SAO PAULO
00002SAO JOAO DO CAIUA

---------------------------------------------------------------------------
ENTRADA 2 : Arquivo em disco sequencial (VEMMAIS)

Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 5 5 C Código cidade
6 30 25 C Nome prefeito

Exemplo:

123456789012345678901234567890 ("régua")

00001PREFEITO DA CIDADE 00001


00002ALBERTO ROMANO SCHIESARI
00003QUITERIA SILVEIRA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 205
205
---------------------------------------------------------------------------
SAIDA : Relatório (VAI). Lay-out:

123456789012345678901234567890123456789012345678901234567890 ("régua")

xxxxx xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx


cod nome cidade nome prefeito
cid

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

00001 SAO PAULO PREFEITO DA CIDADE 00001


00002 SAO JOAO DO CAIUA ALBERTO ROMANO SCHIESARI
00003 BOM JESUS DE PIRAPORA QUITERIA SILVEIRA

---------------------------------------------------------------------------
PROCESSAMENTO

Numa primeira fase, o programa deve ler o arquivo VEMTAB e montar uma tabela em memória com o código da
cidade e o nome da cidade, onde cada elemento é oriundo de um registro lido. O arquivo VEMTAB pode ter no
máximo 6000 registros; testar a quantidade, para, no caso de ela exceder os 6000, cancelar o programa.
Terminada essa fase, iniciar a segunda fase, na qual deve-se ler VEMMAIS e, para cada registro lido, imprimir
uma linha de VAI, onde o nome da cidade deve ser obtido através de pesquisa sequencial na tabela montada
durante a primeira fase do programa.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 206
206

EXERCÍCIO 07
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (PAZ). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Informação qualquer
5 20 16 C Brancos

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

C1F200AA40404040404040404040404040404040
5C614EFF40404040404040404040404040404040

---------------------------------------------------------------------------
SAIDA : Relatório (AMOR). Lay-out:

123456789012345678901234567890123456789012345678901234567890 ("régua")

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"dump" (em EBCDIC) do conteúdo dos
4 bytes iniciais do registro de PAZ

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

11000001111100100000000010101010
01011100011000010100111011111111

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de PAZ lido, determinar, para cada um dos bits dos 4 primeiros bytes do registros, se eles estão
ligados ou desligados. Cada um que estiver ligado, deve ser representado na posição respectiva da linha de
impressão com 1; e, se estiver desligado, deve ser representado com 0.
Observar que a representação na linha de impressão, para que possa ser visualizada, deve ser feita em EBCDIC: se
for 0, o conteúdo do byte na linha de impressão deve ser X'F0'; se for 1, o conteúdo deverá ser X'F1'.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 207
207

EXERCÍCIO 08
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (ROMEU). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 4 4 B Número a
5 9 5 Z Número b
10 12 3 P Número c
13 20 8 C Brancos

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

0000000AF1F2F3F4D501234C4040404040404040
00000011F0F0F1F9F900002D4040404040404040

---------------------------------------------------------------------------
SAIDA : Relatório (JULIETA). Lay-out:

123456789012345678901234567890123456789012345678901234567890 ("régua")

RELATORIO DE CALCULOS PAG xxx

xxxxxxxxxx NEGATIVO ou xxxxxxxxxx NEGATIVO ou


POSITIVO ou POSITIVO ou
ZERO ZERO
resultado result1 resto

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

RELATORIO DE CALCULOS PAG 001

0000062909 NEGATIVO 0000000001 NEGATIVO


0000001082 POSITIVO 0000000000 ZERO

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de ROMEU lido, efetuar o seguinte cálculo:


RESULT1 = ((a+b)*5)-c
Calcular, em seguida, o resto da divisão RESULT1/2.
Imprimir uma linha de JULIETA de acordo com o lay-out, controlando fim de folha através de contador de linhas
(máximo 10 linhas de detalhe por página).
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 208
208

EXERCÍCIO 09
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (TRISTAO). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 6 6 Z Data na forma DDMMAA


1 2 2 Z Dia
3 4 2 Z Mes
5 6 2 Z Ano
7 20 14 C Brancos

Exemplo:

12345678901234567890 ("régua")

280288
311290
121091
---------------------------------------------------------------------------
SAIDA : Relatório (ISOLDA). Lay-out:

123456789012345678901234567890123456789012345678901234567890 ("régua")

ddmmaa ddmmaa
data fornecida data calculada

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

280288 010388
311290 010191
121091 131091

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de TRISTAO lido, calcular, com base na data fornecida, a data correspondente ao dia seguinte;
respeitar os meses com 30 ou 31 dias, e no caso de fevereiro, considerar os anos bissextos ou não, para efeito do
número máximo de dias (29 ou 28).
Imprimir uma linha de ISOLDA de acordo com o lay-out.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 209
209

EXERCÍCIO 10
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (JOHN). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 20 20 C Informação qualquer

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

F1C34E000102030405060708090A0B0C0D0E0F1E
61506B1112131415161718191A1B1C1D1E1F2021
A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3
---------------------------------------------------------------------------
SAIDA : Relatório (LENNON). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxx
... dump em hexa do registro de john ... .... dump em carater

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

F1C34E000102030405060708090A0B0C0D0E0F1E 1C+.................
61506B1112131415161718191A1B1C1D1E1F2021 /&,.................
A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3 ....................

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de JOHN lido, exibir uma linha de LENNON onde apareça o dump em hexa dos dados lidos em
JOHN, e também o dump em caráter, observando-se que os caracteres não imprimíveis devem aparecer como um
ponto.
Considerar como caracteres imprimíveis os algarismos decimais, as letras maiúsculas, e os caracteres especiais . , +
-/?&$*()
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 210
210

EXERCÍCIO 11
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (MICRO). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 20 20 C Informação qualquer

Exemplo: (em hexadecimal)

1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")

8182838485868788894040404040404040404040
9192939495969798994040404040404040404040
A2A3A4A5A6A7A8A9404040404040404040404040
---------------------------------------------------------------------------
SAIDA : Relatório (MACRO). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

xxxxxxxxxxxxxxxxxxxx
dump em carater do registro de micro

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

ABCDEFGHI
JKLMNOPQR
STUVWXYZ
---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de MICRO lido, exibir uma linha de MACRO onde apareça o dump em carater dos dados lidos
em JOHN, e transformados. Considerar que MICRO tenha em seu conteúdo somente letras minúsculas e brancos, e
a transformação deve consistir na conversão das letras minúsculas em maiúsculas, deixando os brancos inalterados.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 211
211

EXERCÍCIO 12
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (HONEY). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 6 6 Z Data na forma DDMMAA


7 20 14 C Brancos

Exemplo:

12345678901234567890 ("régua")

130190
150291
300392
---------------------------------------------------------------------------
SAIDA : Relatório (MOON). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

ddmmaa yyddd
data gregoriana data juliana

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

130190 90013
150291 91046
300392 92090
---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de HONEY lido, exibir uma linha de MOON, onde a data juliana tenha sido obtida através de
uma sub-rotina externa que converterá a data gregoriana em juliana. Deve-se fornecer como parâmetros da sub-
rotina 2 campos: o que tem a data gregoriana e o que terá a data juliana. A data gregoriana deverá ser consistida:
- deve ser numérica
- mes não pode ser menor que 1 nem maior que 12
- dia deve ser compatível com o mes, considerando-se o caso dos anos bissextos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 212
212

EXERCÍCIO 13
---------------------------------------------------------------------------
ENTRADA : Arquivo em disco sequencial (FREE). Lay-out:

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 60 60 C Texto livre

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

ESTOU APRENDENDO ASSEMBLER E JA SEI QUASE TUDO 123 $ &&&


WORD LOTUS DOS MVS 123 ***** LASTLA
ABCDEFGHIJKLMNOPQRSTUVWXYZ0123
4567890ABCDEFGHIJKLMNOPQRSTUVW
---------------------------------------------------------------------------
SAIDA : Relatório (WAY). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

REGISTRO zzn qq
nro registro quantidade de strings

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

REGISTRO 1 11
REGISTRO 2 7
REGISTRO 3 30
REGISTRO 4 30

---------------------------------------------------------------------------
PROCESSAMENTO

Para cada registro de FREE lido, exibir uma linha de WAY, onde apareça a quantidade de strings existentes no
registro de entrada. Considerar como string um conjunto de caracteres não brancos que terminem com um branco
(ou no fim do registro).
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 213
213

EXERCÍCIOS RESOLVIDOS

ER01 - Exibir o conteúdo do registrador 12 nas posições 11 a 18 de uma linha de tela, de tal forma a visualizar
seu conteúdo, exibido, portanto, em EBCDIC.

SOLUÇÃO:

ST 12,FULL
UNPK AREA+10(9),FULL(5)
TR AREA+10(8),TAB
MVI AREA+18,C' '

FULL DS F
AREA DC CL80' '
TAB DC 256X'00'
ORG TAB+C'0'
DC C'0123456789ABCDEF'
ORG
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 214
214

ER02 - Dada uma tabela com 1000 elementos com 8 bytes cada, elaborar uma rotina que faça nela uma pesquisa
binária, baseando-se num argumento existente num campo de memória de 5 bytes denominado ARG.

OBS. cada elemento da tabela é composto de um campo chave de 5 bytes e outro de 3 bytes, o qual deve ser
colocado num campo de memória de 3 bytes chamado RESULT.

SOLUÇÃO:

PRG3 XEGUEI
.
. ...montagem da TABELA e de ARG...
.
LA 6,=A(TABELA)+1000*8
LA 5,=A(TABELA)
VOLTA CLC 0(5,5),ARG
BE ACHOU
LA 5,8(5)
CR 5,6
BH FIM
B VOLTA
ACHOU LA 5,5(5)
MVC RESULT,0(3,5)
FIM TCHAU
ARG DC CL5'0'
RESULT DC CL3'0'
LTORG
LTORG
TABELA DS 1000CL8
END PRG3
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 215
215

ER03 - Considerar em um programa os seguintes campos:


VINIC (VALOR INICIAL)
VINCR (INCREMENTO)
VMAX (VALOR MAXIMO)

Eles já estão inicializados com números compactados positivos.


Montar uma tabela de 5000 elementos, cada qual com 5 bytes, que deverão conter números compactados, a saber:
ELEMENTO1 = VINIC
ELEMENTO2 = VINIC + VINCR
ELEMENTO3 = VINIC + ELEMENTO2
.
.
.
ELEMENTOn = VINIC + ELEMENTO n-1
sendo n=5000, ou aquele que tiver valor igual ou menor mais próximo de VMAX.
Depois de montada a tabela, varre-la (somente os elementos preenchidos), acumulando os valores dos campos, do
último para o primeiro.

SOLUÇÃO:

PRG6 XEGUEI
.
. ...inicializacao dos campos...
.
L 6,=A(TABELA)
MVC VATUAL,VINIC
VOLTO C 6,=A(TABELA+5000*5)
BNL FASE2
CP VATUAL,VMAX
BH FASE2
MVC 0(5,6),VATUAL+3
A 6,=F'5'
AP VATUAL,VINCR
B VOLTO
FASE2 S 6,=F'5'
C 6,=A(TABELA)
BL FIM
AP VTOT,0(5,6)
B FASE2
FIM TCHAU
*------------------------------ DEFINICAO DAS AREAS AUXILIARES
VTOT DC PL8'0'
VATUAL DC PL8'0'
VINIC DC PL8'0'
VINCR DC PL8'0'
VMAX DC PL8'0'
LTORG
LTORG
TABELA DS 5000PL5
END PRG6
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 216
216

ER04 - Utilizando a instrução TR, movimentar uma área de memória (AL) para outra (AG), conforme lay-outs a
seguir.

Lay-out de AL
-------------

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 50 50 C Informação ALFA
51 70 20 C Informação BETA
71 120 50 C Informação GAMA
121 200 80 C Informação DELTA
201 220 20 C Informação PI
221 256 36 C Informação OMEGA

Lay-out de AG
-------------

Posição Posição Tamanho For- Dado


Inicial Final (bytes) mato

1 20 20 C Informação PI
21 70 50 C Informação GAMA
71 106 36 C Informação OMEGA
107 156 50 C Informação ALFA
157 176 20 C Informação BETA
177 256 80 C Informação DELTA

SOLUÇÃO:

TR AG,AL
*-----------------------------------------------------------
* DEFINICAO DAS AREAS AL E AG *
*-----------------------------------------------------------

AL DS CL256
AG DS 0CL256
AG1 DC 20AL1(*-AG1+200)
AG2 DC 50AL1(*-AG2+70)
AG3 DC 36AL1(*-AG3+220)
AG4 DC 50AL1(*-AG4+0)
AG5 DC 20AL1(*-AG5+50)
AG6 DC 80AL1(*-AG6+120)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 217
217

ER05 - Exemplo pgm assembler que le um arquivo e imprime um relatorio


Se o arquivo de entrada (80 posições, formato livre) tiver o seguinte conteúdo :

REGISTRO 1 ....................................................................*
REGISTRO 2 ...+....2....+....3....+....4....+....5....+....6....+....7....+....0
REGISTRO 3 !
I'M COMIN' HOME, I'VE DONE MY TIME
NOW I'VE GOT TO KNOW WHAT IS AND ISN'T MINE
IF YOU RECEIVED MY LETTER TELLING YOU I'D SOON BE FREE
THEN YOU'LL KNOW JUST WHAT TO DO
IF YOU STILL WANT ME
IF YOU STILL WANT ME
WHOA, TIE A YELLOW RIBBON 'ROUND THE OLD OAK TREE
IT'S BEEN THREE LONG YEARS
DO YA STILL WANT ME?
IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
I'LL STAY ON THE BUS
FORGET ABOUT US
PUT THE BLAME ON ME
IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
BUS DRIVER, PLEASE LOOK FOR ME
'CAUSE I COULDN'T BEAR TO SEE WHAT I MIGHT SEE
I'M REALLY STILL IN PRISON
AND MY LOVE, SHE HOLDS THE KEY
A SIMPLE YELLOW RIBBON'S WHAT I NEED TO SET ME FREE
I WROTE AND TOLD HER PLEASE
HOA, TIE A YELLOW RIBBON ROUND THE OLD OAK TREE
IT'S BEEN THREE LONG YEARS
DO YA STILL WANT ME?
IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
I'LL STAY ON THE BUS
FORGET ABOUT US
PUT THE BLAME ON ME
IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
NOW THE WHOLE DAMNED BUS IS CHEERIN'
AND I CAN'T BELIEVE I SEE
A HUNDRED YELLOW RIBBONS ROUND THE OLD OAK TREE
*** ULTIMO REGISTRO !!! ***

E o programa for o seguinte :

PGMASM CSECT
PRINT DATA
USING *,3,4 ESTABELECE REGISTRADORES 3 E 4
* COMO BASE
STM 14,12,12(13) SALVA REGISTRADORES NA SAVEAREA
* DO CHAMADOR (SIST OPERACIONAL)
LR 3,15 SALVA ENDERECO PONTO DE CARGA
LA 3,0(3) ZERA PRIM BYTE A ESQUERDA
LA 4,1 CARREGA NRO 1
LA 4,4095(3,4) DEIXA O 4 COM 4096 A + QUE O 3
ST 13,MYSAVE+4 SALVA O 13 (ENDER SAVEAREA DO
* CHAMADOR) NA SAVEAREA+4
LA 15,MYSAVE CARREGA ENDER SAVEAREA DO PROG
ST 15,8(13) SALVA END SAVEAREA DO PROG
* NA SAVEAREA+8 DO CHAMADOR
LR 13,15 ENDER SAVEAREA DO PROG NO 13
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 218
218
ABRIR EQU *
OPEN (ENTRA,INPUT) ABRE ARQUIVO ENTRADA
OPEN (RELAT,OUTPUT) ABRE ARQUIVO RELATORIO
LEDENOVO BAL 14,LERENTRA EXECUTA ROTINA LEITURA
CLI FIMENTRA,C'S' VERIFICA SE EOF
BE FECHAR SE EOF DESVIA PARA FECHAR
NAOCABOU EQU * SE NAO EOF
BAL 14,IMPRIME EXECUTA ROTINA DE IMPRESSAO
B LEDENOVO DESVIA PARA LER OUTRO REGISTRO
FECHAR CLOSE (ENTRA,,RELAT) FECHA ARQUIVOS
LA 2,0 ZERA REGISTRADOR 2
L 13,MYSAVE+4 RESTAURA END.SAVEAREA CHAMADOR
ST 2,16(13) RETURN CODE ZERO ONDE VAI
* RESTAURAR REGISTRADOR 15
LM 14,12,12(13) RESTAURA REGISTRADORES
BR 14 TERMINA PROGRAMA
*---------------------------------------------------------------------
* ROTINA DE LEITURA -------------------------------------------
*---------------------------------------------------------------------
DC A(0) PARA GUARDAR ENDERECO RETORNO
LERENTRA EQU * PROCEDIMENTO DE LEITURA
ST 14,LERENTRA-4 SALVA ENDERECO RETORNO
* (INSTRUCAO SEGUINTE AO BAL)
GET ENTRA,AE LE REGISTRO LOGICO
AP WLIDOS,=P'1' SOMA 1 EM CONTADOR LIDOS
B SAILER DESVIA PARA SAIDA ROTINA
EOFENTRA EQU * SE EOF NO GET VEM PRA CA
MVI FIMENTRA,C'S' CONSTANTE 'S' PARA FLAG EOF
SAILER EQU * SAIDA
L 14,LERENTRA-4 PEGA ENDERECO DE RETORNO
BR 14 VOLTA PARA APOS O BAL
*---------------------------------------------------------------------
* IMPRIME -------------------------------------------
*---------------------------------------------------------------------
DC A(0) PARA GUARDAR ENDERECO RETORNO
IMPRIME EQU * PROCEDIMENTO DE IMPRESSAO
ST 14,IMPRIME-4 SALVA ENDERECO DE RETORNO
CP WLINS,=P'24' COMPARA SE FIM DE FOLHA
BNH IMPMESMO SE MENOR OU IGUAL DESVIA
BAL 14,CABEC SE MAIOR EXECUTA ROTINA CABEC
IMPMESMO EQU *
MVI AS,C' ' ESPACEJAMENTO SIMPLES
UNPK LDETNRO,WLIDOS DESCOMPACTA NRO REG LIDO
OI LDETNRO+4,X'F0' FORCA ZONA 'F'
MVC LDETTXT,AE REG LIDO PARA LINHA DETALHE
MVC AS,LDET LINHA DETALHE PARA LINHA GERAL
PUT RELAT,AS IMPRIME
AP WLINS,=P'1' SOMA 1 NO CONTADOR DE LINHAS
SAIIMPRI EQU * SAIDA DA ROTINA
L 14,IMPRIME-4 RESTAURA ENDERECO PARA VOLTAR
BR 14 VOLTA PARA INSTRUCAO APOS BAL
*---------------------------------------------------------------------
* CABECALHO -------------------------------------------
*---------------------------------------------------------------------
DC A(0) PARA GUARDAR ENDERECO RETORNO
CABEC EQU * PROCEDIMENTO DE CABECALHO
ST 14,CABEC-4 SALVA ENDERECO PARA RETORNO
ZAP WLINS,=P'0' ZERA CONTADOR DE LINHAS
AP WPAGS,=P'1' SOMA 1 NO CONTADOR DE PAGINAS
MVI AS,C'1' ESPACEJAMENTO : SALTAR FOLHA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 219
219
MVC LCABZPAG,=X'4020204B202120' MASCARA DE EDICAO
ED LCABZPAG,WPAGS EDITA NRO DA PAGINA
MVC AS,LCABZ LINHA LCABZ PARA LINHA GERAL
PUT RELAT,AS IMPRIME LINHA LCABZ
MVC AS,LCAB1 LINHA CABEC1 PARA LINHA GERAL
PUT RELAT,AS IMPRIME LINHA CABEC1
MVI AS,C' ' ESPACEJAMENTO SIMPLES
MVC AS,LCAB2 LINHA CABEC2 PARA LINHA GERAL
PUT RELAT,AS IMPRIME LINHA CABEC2
MVC AS,LCAB3 LINHA CABEC3 PARA LINHA GERAL
PUT RELAT,AS IMPRIME LINHA EM BRANCO
AP WLINS,=P'3' SOMA 3 NO CONTADOR DE LINHAS
SAICABEC EQU * SAIDA DA ROTINA
L 14,CABEC-4 RESTAURA ENDER VOLTA NO REG14
BR 14 VOLTA PARA APOS O BAL
*---------------------------------------------------------------------
* DECLARACAO DAS VARIAVEIS -------------------------------------------
*---------------------------------------------------------------------
MYSAVE DC 18F'0' SAVE AREA
FIMENTRA DC C'N' FLAG INDICATIVO DE FIM DE ARQ
WLIDOS DC PL3'0' CONTADOR REGS LIDOS
WPAGS DC PL3'0' CONTADOR PAGINAS
WLINS DC PL3'99' CONTADOR LINHAS
AE DS CL80 AREA PARA LEITURA ARQ ENTRADA
AS DS CL133 AREA PARA SAIDA ARQ IMPRESSAO
*
* LINHAS DO RELATORIO -------------------------------------------
*
LCABZ DS 0CL133 PROXIMOS 133 BYTES = LCABZ
DC CL1'1'
DC C'PAG. '
LCABZPAG DC CL7' '
DC CL120' '
*
LCAB1 DS 0CL133 PROXIMOS 133 BYTES = LCAB1
DC CL1' '
DC CL5'REG.#'
DC CL1' '
DC 20C'-'
DC CL40'* CONTEUDO DO REG LIDO *'
DC 20C'-'
DC CL47' '
*
LCAB2 DS 0CL133 PROXIMOS 133 BYTES = LCAB2
DC CL1' '
DC CL5'-----'
DC CL1' '
DC 20C'-'
DC CL40'----------------------------------------'
DC 20C'-'
DC CL46' '
*
LCAB3 DC CL133' ' LINHA EM BRANCO
*
LDET DS 0CL133 LINHA DE DETALHE
DC CL1' '
LDETNRO DC CL5' '
DC CL1' '
LDETTXT DC CL80' '
DC CL46' '
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 220
220
*
*---------------------------------------------------------------------
* DECLARACAO DOS ARQUIVOS -------------------------------------------
*---------------------------------------------------------------------
ENTRA DCB DDNAME=ENTRA,LRECL=80,EODAD=EOFENTRA,DSORG=PS,MACRF=GM
RELAT DCB DDNAME=RELAT,LRECL=133,DSORG=PS,MACRF=PM,RECFM=FBA
*---------------------------------------------------------------------
* LITERAIS -------------------------------------------
*---------------------------------------------------------------------
LTORG
*---------------------------------------------------------------------
END

Então o relatório terá o seguinte formato :

PAG. 1
REG.# --------------------* CONTEUDO DO REG LIDO *--------------------
----- --------------------------------------------------------------------------------

00001 REGISTRO 1 ....................................................................*


00002 REGISTRO 2 ...+....2....+....3....+....4....+....5....+....6....+....7....+....0
00003 REGISTRO 3 !
00004 I'M COMIN' HOME, I'VE DONE MY TIME
00005 NOW I'VE GOT TO KNOW WHAT IS AND ISN'T MINE
00006 IF YOU RECEIVED MY LETTER TELLING YOU I'D SOON BE FREE
00007 THEN YOU'LL KNOW JUST WHAT TO DO
00008 IF YOU STILL WANT ME
00009 IF YOU STILL WANT ME
00010 WHOA, TIE A YELLOW RIBBON 'ROUND THE OLD OAK TREE
00011 IT'S BEEN THREE LONG YEARS
00012 DO YA STILL WANT ME?
00013 IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
00014 I'LL STAY ON THE BUS
00015 FORGET ABOUT US
00016 PUT THE BLAME ON ME
00017 IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
00018 BUS DRIVER, PLEASE LOOK FOR ME
00019 'CAUSE I COULDN'T BEAR TO SEE WHAT I MIGHT SEE
00020 I'M REALLY STILL IN PRISON
00021 AND MY LOVE, SHE HOLDS THE KEY

PAG. 2
REG.# --------------------* CONTEUDO DO REG LIDO *--------------------
----- --------------------------------------------------------------------------------

00022 A SIMPLE YELLOW RIBBON'S WHAT I NEED TO SET ME FREE


00023 I WROTE AND TOLD HER PLEASE
00024 HOA, TIE A YELLOW RIBBON ROUND THE OLD OAK TREE
00025 IT'S BEEN THREE LONG YEARS
00026 DO YA STILL WANT ME?
00027 IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
00028 I'LL STAY ON THE BUS
00029 FORGET ABOUT US
00030 PUT THE BLAME ON ME
00031 IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
00032 NOW THE WHOLE DAMNED BUS IS CHEERIN'
00033 AND I CAN'T BELIEVE I SEE
00034 A HUNDRED YELLOW RIBBONS ROUND THE OLD OAK TREE
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 221
221
00035 *** ULTIMO REGISTRO !!! ***

Vous aimerez peut-être aussi