245
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1 1 ASSEMBLER para Mainframes IBM Prof. Alberto Romano Schiesari (1 a edição: 1974; última revisão:Julho/2009)

ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

Embed Size (px)

Citation preview

Page 1: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 11

ASSEMBLER paraMainframes IBM

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

Page 2: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 22

SUMÁRIO

1. Introdução.................................................................................................................................................................................................. 71-1 A Linguagem Assembler ..................................................................................................................................................................... 71-2 Revisão dos Sistemas de Numeração Binário e Hexadecimal ............................................................................................................. 7

1-2-1 Conversões ................................................................................................................................................................................... 81-2-1-1 Conversão de decimal para binário ....................................................................................................................................... 81-2-1-2 Conversão de decimal para hexadecimal ............................................................................................................................ 101-2-1-3 Conversão de binário para hexadecimal.............................................................................................................................. 111-2-1-4 Conversão de hexadecimal para binário.............................................................................................................................. 121-2-1-5 Conversão de binário para decimal ..................................................................................................................................... 131-2-1-6 Conversão de hexadecimal para decimal ............................................................................................................................ 14

1-2-2 Operações aritméticas ................................................................................................................................................................ 151-2-2-1 Soma em binário ................................................................................................................................................................. 151-2-2-2 Subtração em binário .......................................................................................................................................................... 161-2-2-3 Soma em hexadecimal......................................................................................................................................................... 171-2-2-4 Subtração em hexadecimal.................................................................................................................................................. 18

1-3. Arquitetura de Mainframes IBM ...................................................................................................................................................... 191-3-1 Visão Geral ................................................................................................................................................................................ 191-3-2 Endereçamento ........................................................................................................................................................................... 22

BASE + DESLOCAMENTO........................................................................................................................................................... 22INDEXADOR + BASE + DESLOCAMENTO............................................................................................................................... 23Deslocamento máximo; uso de bases............................................................................................................................................... 24

Carga de registradores base ................................................................................................................................................................. 261-3-3 Representação de Dados............................................................................................................................................................. 29

1-3-3-1 Formato binário de ponto fixo............................................................................................................................................. 291-3-3-2 Formato decimal zonado..................................................................................................................................................... 301-3-3-3 Formato decimal compactado ............................................................................................................................................. 301-3-3-4 Formato caracter (padrão EBCDIC) ................................................................................................................................... 30

1-3-4 Representação de Instruções ...................................................................................................................................................... 31RR - 2 bytes .................................................................................................................................................................................... 31E - 2 bytes ...................................................................................................................................................................................... 31QST - 4 bytes ................................................................................................................................................................................... 31QV - 4 bytes.................................................................................................................................................................................... 31RRE - 4 bytes................................................................................................................................................................................... 31RS - 4 bytes..................................................................................................................................................................................... 31RX - 4 bytes .................................................................................................................................................................................... 31S - 4 bytes ...................................................................................................................................................................................... 31SI - 4 bytes ...................................................................................................................................................................................... 31VR - 4 bytes .................................................................................................................................................................................... 32VS - 4 bytes..................................................................................................................................................................................... 32VST - 4 bytes ................................................................................................................................................................................... 32VV - 4 bytes.................................................................................................................................................................................... 32RSE - 6 bytes ................................................................................................................................................................................... 32SS - 6 bytes ..................................................................................................................................................................................... 32SSE - 6 bytes.................................................................................................................................................................................... 32

2. Montador Assembler e Especificação de Elementos ............................................................................................................................... 372-1. Introdução......................................................................................................................................................................................... 37

2-1-1 O Montador Assembler .............................................................................................................................................................. 372-1-2 O Statement Assembler .............................................................................................................................................................. 39

2-2. Símbolo ............................................................................................................................................................................................ 392-3. Código de Instrução.......................................................................................................................................................................... 40

2-3-1 Instruções ao Montador.............................................................................................................................................................. 402-3-2 Instruções de Máquina ............................................................................................................................................................... 402-3-3 Macro-Instruções........................................................................................................................................................................ 40

2-4. Operandos e Comentários................................................................................................................................................................. 402-4-1 Operandos em Registrador ......................................................................................................................................................... 402-4-2 Operandos em Memória ............................................................................................................................................................. 41

Page 3: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33

2-4-2-1 Termos de Expressões......................................................................................................................................................... 412-4-2-2 Expressões para referência de Operandos........................................................................................................................... 42

2-5. Continuação de Statements............................................................................................................................................................... 442-6. Identificação e Sequência de Statements .......................................................................................................................................... 44

3. Instruções ao Montador Assembler.......................................................................................................................................................... 453-1. Instruções para definição de áreas .................................................................................................................................................... 45

DC (Define Constant - Definir Constante)........................................................................................................................................... 45TABELA DE CONSTANTES......................................................................................................................................................... 46DC tipo C......................................................................................................................................................................................... 47DC tipo X......................................................................................................................................................................................... 47DC tipo B......................................................................................................................................................................................... 47DC tipo F ......................................................................................................................................................................................... 48DC tipo H......................................................................................................................................................................................... 48DC tipo P ......................................................................................................................................................................................... 48DC tipo Z ......................................................................................................................................................................................... 48DC tipo A......................................................................................................................................................................................... 49DC tipo Y......................................................................................................................................................................................... 50DC tipo S ......................................................................................................................................................................................... 50DC tipo V......................................................................................................................................................................................... 50DC tipo Q......................................................................................................................................................................................... 50

DS (Define Storage - Definir Memória) .............................................................................................................................................. 513-2. Literais.............................................................................................................................................................................................. 523-3. Outras instruções ao montador ......................................................................................................................................................... 53

CCW ou CCW0 (Channel Command Word - Palavra de Comando de Canal).................................................................................... 53CCW1 (Channel Command Word - Palavra de Comando de Canal)................................................................................................... 54START (Começo)................................................................................................................................................................................ 55CSECT (Control Section - Seção de Controle).................................................................................................................................... 55DSECT (Dummy Section - Seção Simulada)....................................................................................................................................... 56DXD (Define External Dummy Section - Definir Dummy Section Externa)....................................................................................... 56CXD..................................................................................................................................................................................................... 57COM (Blank Common Control Section - Seção de Controle Branca Comum) ................................................................................... 57LOCTR (Multiple Location Counters - Múltiplos Contadores de localização) ................................................................................... 58AMODE (Adressing Mode - Modo de endereçamento) ...................................................................................................................... 59RMODE (Residence Mode - Modo de residência) .............................................................................................................................. 59ENTRY (Entrada)................................................................................................................................................................................ 60EXTRN (External - Externo) ............................................................................................................................................................... 60WXTRN............................................................................................................................................................................................... 60USING (Usando) ................................................................................................................................................................................. 61DROP (Por de lado, Deixar) ................................................................................................................................................................ 61TITLE (Título)..................................................................................................................................................................................... 62EJECT (Ejetar) .................................................................................................................................................................................... 62SPACE (Espaço).................................................................................................................................................................................. 62PRINT (Impressão).............................................................................................................................................................................. 63ICTL (Input Control - Controle de Entrada) ........................................................................................................................................ 63ISEQ (Input Sequence - Sequência de Entrada)................................................................................................................................... 64PUNCH (Perfure) ................................................................................................................................................................................ 64REPRO (Reproduza) ........................................................................................................................................................................... 64ORG..................................................................................................................................................................................................... 65EQU (Equate - Igualar)........................................................................................................................................................................ 65OPSYN (Operation Code Synonim - Sinônimo para código de operação).......................................................................................... 66PUSH (Empurrar) ................................................................................................................................................................................ 66POP...................................................................................................................................................................................................... 66LTORG................................................................................................................................................................................................ 66CNOP (Conditional Nop - Nop Condicional)...................................................................................................................................... 67COPY (Copiar) .................................................................................................................................................................................... 67END (Fim) ........................................................................................................................................................................................... 67

4. Instruções de Máquina ............................................................................................................................................................................. 714-1. Instruções de movimento de memória para memória ....................................................................................................................... 73

Page 4: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 44

MVC (Move Character - Movimentar Caracteres) .............................................................................................................................. 73MVZ (Move Zones – Movimentar Zonas)........................................................................................................................................... 74MVN (Move Numerics - Movimentar Numéricos).............................................................................................................................. 74MVI (Move Immediate - Movimentar Imediato)................................................................................................................................. 75MVO (Move with Offset – Movimetar com deslocamento) ................................................................................................................ 76ZAP (Zero and Add Packed – Zerar e Somar em Compactado) .......................................................................................................... 77MVCL (Move Long – Mover [campo] Longo) ................................................................................................................................... 78PACK (Compactar).............................................................................................................................................................................. 79UNPK (Unpack – descompactar)......................................................................................................................................................... 80MVCIN (Move Inverse – Mover invertido)......................................................................................................................................... 81

4-2. Instruções aritméticas com campos compactados............................................................................................................................. 82AP (Add Packed – Somar em compactado) ......................................................................................................................................... 82SP (Subtract Packed – Subtrair em compactado)................................................................................................................................. 83MP (Multiply Packed – Multiplicar em compactado).......................................................................................................................... 84DP (Divide Packed – Dividir em compactado).................................................................................................................................... 84SRP (Shift and Round Packed – Deslocar e arredondar compactado)................................................................................................. 85

4-3. Instruções de comparação................................................................................................................................................................. 86CP (Compare Packed – Comparar em compactado) ............................................................................................................................ 86CLC (Compare Logical Character – Comparar Caracteres Logicamente)........................................................................................... 86CLI (Compare Logical Immediate - Comparar Logicamente com Operando Imediato)...................................................................... 86CLCL (Compare Logocal Character Long – Comparar Logicamente campos longos) ....................................................................... 87C (Compare) ........................................................................................................................................................................................ 88CH (Compare Halfword) ..................................................................................................................................................................... 88CL (Compare Logical – Compare Logicamente)................................................................................................................................. 89CLM (Compare Logical Characters Under Mask - Comparar campos lógicamente, sob máscara) ..................................................... 89CR (Compare Register – Comparar Registradores) ............................................................................................................................. 90CLR (Compare Logical Register – Comparar Registradores Logicamente) ........................................................................................ 90

4-4. Instruções de desvio ......................................................................................................................................................................... 914-4-1 Introdução e mnemônicos........................................................................................................................................................... 914-4-2 Instruções de desvio condicional e incondicional ...................................................................................................................... 93BC (Branch on Condition – Desviar na Condição).............................................................................................................................. 93BCR (Branch on Condition Register – Desviar [para endereço de registrador] na Condição) ............................................................ 93

4-5. Instruções de controle de loop .......................................................................................................................................................... 94BCT (Branch on Count – Desvie na condição [de contagem] testada) ................................................................................................ 94BCTR (Branch on Count Register – Desvie na condição [de contagem] testada para [endereço contido em] registrador) ................ 94BXH (Branch on Index High – Desvie se o Índice for Maior) ............................................................................................................ 95BXLE (Branch on Index Low or Equal – Desvie se o Índice for Menor ou Igual).............................................................................. 96

4-6. Instruções de edição ......................................................................................................................................................................... 97ED (Edit – Editar)................................................................................................................................................................................ 97EDMK (Edit and Mark – Editar e Marcar) .......................................................................................................................................... 98

4-7. Instruções de tradução e teste de bytes ............................................................................................................................................. 99TR (Translate – Traduzir) .................................................................................................................................................................... 99TRT (Translate and Test – Traduzir e Testar) ................................................................................................................................... 100

4-8. Shift (deslocamento de bits) em registradores ................................................................................................................................ 101SLL (Shift Left Logical – Deslocamento Simples Lógico à esquerda) .............................................................................................. 101SRL (Shift Right Logical – Deslocamento Simples Lógico à direita)................................................................................................ 101SLDL (Shift Left Double Logical – Deslocamento Duplo Lógico à esquerda) ................................................................................. 102SRDL (Shift Right Double Logical – Deslocamento Duplo Lógico à direita)................................................................................... 102SLA (Shift Left Algebraic – Deslocamento Simples Algébrico à esquerda) ..................................................................................... 103SRA (Shift Right Algebraic – Deslocamento Simples Algébrico à direita) ....................................................................................... 103SLDA (Shift Left Double Algebraic – Deslocamento Duplo Algébrico à esquerda)......................................................................... 104SRDA (Shift Right Double Algebraic – Deslocamento Duplo Algébrico à direita) .......................................................................... 104

4-9. Instruções de álgebra booleana....................................................................................................................................................... 105N (And – E) ....................................................................................................................................................................................... 105O (Or – Ou)........................................................................................................................................................................................ 106X (Exclusive Or – Ou exclusivo) ....................................................................................................................................................... 106NR (And Register – E entre registradores) ........................................................................................................................................ 107OR (Or Register – Ou entre registradores) ........................................................................................................................................ 107

Page 5: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 55

XR (Exclusive or Register – Ou exclusivo entre registradores)......................................................................................................... 107NI (And Immediate – E [com operando] imediato) ........................................................................................................................... 108OI (Or Immediate – Ou [com operando] imediato) ........................................................................................................................... 108XI (Exclusive Or Immediate – Ou exclusivo [com operando] imediato)........................................................................................... 108NC (And Character – E entre campos com caracteres)...................................................................................................................... 109OC (Or Character – Ou entre campos com caracteres) ...................................................................................................................... 109XC (Exclusive Or Character – Ou exclusivo entre campos com caracteres) ..................................................................................... 109

4-10. Instruções de carga e desvio ......................................................................................................................................................... 110BALR (Branch and Link Register – Desviar e ligar via registrador) ................................................................................................. 110BAL (Branch and Link – Desviar e ligar).......................................................................................................................................... 111BAS (Branch and Save – Desviar e salvar) ....................................................................................................................................... 112BASR (Branch and Save Register – Desviar para endereço em registrador e salvar)........................................................................ 113BASSM (Branch and Save and Set Mode – Desviar, salvar e posicionar modo) .............................................................................. 114BSM (Branch and Set Mode – Desviar e posicionar modo) .............................................................................................................. 115

4-11. Instruções de movimento de dados de registrador para memória ................................................................................................. 116ST (Store – Armazenar)..................................................................................................................................................................... 116STH (Store Halfword – Armazenar halfword)................................................................................................................................... 116STM (Store Multiple – Armazenar Múltiplos) .................................................................................................................................. 117STC (Store Character – Armazenar um byte) .................................................................................................................................... 117STCM (Store Characters under Mask – Armazenar caracteres por máscara) .................................................................................... 118CVD (Convert to decimal – Converter [de binário] para [decimal] compactado) ............................................................................. 118

4-12. Instruções de movimento de dados de campo de memória para registrador................................................................................. 119L (Load – Carregar) ........................................................................................................................................................................... 119LH (Load Halfword – Carregar halfword)......................................................................................................................................... 119LM (Load Multiple – Carregar Múltiplos)......................................................................................................................................... 120IC (Insert Character – Inserir Byte) ................................................................................................................................................... 120ICM (Insert Character under Mask – Inserir bytes sob máscara)....................................................................................................... 121CVB (Convert to binary – Converter [de compactado] para binário) ................................................................................................ 121

4-13. Instruções de movimento de dados de registrador para registrador .............................................................................................. 122LR (Load Register – Carregar registrador) ........................................................................................................................................ 122LPR (Load Positive Register – Carregar registrador positivo) .......................................................................................................... 122LNR (Load Negative Register – Carregar registrador negativo) ....................................................................................................... 123LCR (Load Complement Register – Carregar o complemento do registrador).................................................................................. 123LTR (Load and test Register – Carregar e testar registrador) ............................................................................................................ 124

4-14. Operações aritméticas entre registradores .................................................................................................................................... 125AR (Add Register – Somar registradores) ......................................................................................................................................... 125SR (Subtract Register – Subtrair registradores) ................................................................................................................................. 125MR (Multiply Register – Multiplicar registradores) .......................................................................................................................... 126DR (Divide Register – Dividir registradores) .................................................................................................................................... 126ALR (Add Logical Register – Somar registradores logicamente)...................................................................................................... 127SLR (Subtract Logical Register – Subtrair registradores logicamente) ............................................................................................. 127

4-15. Operações aritméticas entre registradores e campos de memória................................................................................................. 128A (Add – Somar)................................................................................................................................................................................ 128S (Subtract – Subtrair) ....................................................................................................................................................................... 128M (Multiply – Multiplicar) ................................................................................................................................................................ 129D (Divide – Dividir) .......................................................................................................................................................................... 129AH (Add Halfword – Somar hafword) .............................................................................................................................................. 130SH (Subtract Halfword – Subtrair hafword) ...................................................................................................................................... 130MH (Multiply Halfword – Multiplicar hafword) ............................................................................................................................... 131AL (Add Logical – Somar logicamente)............................................................................................................................................ 131SL (Subtract Logical – Subtrair logicamente).................................................................................................................................... 132

4-16. Outras instruções .......................................................................................................................................................................... 133LA (Load Address – Carregar Endereço) .......................................................................................................................................... 133TM (Test Under Mask – Testar com máscara) .................................................................................................................................. 133EX (Execute) ..................................................................................................................................................................................... 134SVC (Supervisor Call – Chamada ao Supervisor) ............................................................................................................................. 134MC (Monitor Call – Chamada do monitor) ....................................................................................................................................... 135SPM (Set Program Mask – estabelecer máscara de programa).......................................................................................................... 135

Page 6: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 66

IPM (Insert Program Mask – inserir máscara de programa) .............................................................................................................. 135STCK (Store clock – armazenar clock) ............................................................................................................................................. 136TS (Test and Set – Testar e posicionar) ............................................................................................................................................. 136CS (Compare and Swap – Comparar e Trocar) ................................................................................................................................. 136CDS (Compare Double and Swap – Comparar double e Trocar) ...................................................................................................... 137

5. Macro-Instruções ................................................................................................................................................................................... 1385-1. Introdução....................................................................................................................................................................................... 1385-2. Símbolos variáveis e de sequência.................................................................................................................................................. 1395-3. Expressões ...................................................................................................................................................................................... 1425-4. Variáveis de montagem : declaração e atribuição de conteúdo ...................................................................................................... 1435-5. ANOP, MNOTE e AREAD............................................................................................................................................................ 145

ANOP.............................................................................................................................................................................................. 145MNOTE ........................................................................................................................................................................................... 145

5-6. MHELP .......................................................................................................................................................................................... 1475-7. Desvios - AGO, ACTR E AIF........................................................................................................................................................1485-8. Parâmetros posicionais e keyword.................................................................................................................................................. 1495-9. Funcionamento das macros - exemplos .......................................................................................................................................... 151

5-9-1 Macro sem símbolo e sem parâmetros...................................................................................................................................... 1515-9-2 Macro com símbolo fixo e sem parâmetros.............................................................................................................................. 1515-9-3 Macro com símbolo variável e sem parâmetros ....................................................................................................................... 1525-9-4 Macro com símbolo variável e com 1 parâmetro posicional .................................................................................................... 1525-9-5 Macro com símbolo variável e com 2 parâmetros posicionais ................................................................................................. 1535-9-6 Macro com símbolo variável e com 1 parâmetro keyword (sem default)................................................................................. 1535-9-7 Macro com símbolo variável e com 1 parâmetro keyword (com default) ................................................................................ 1545-9-8 Macro com símbolo variável e com 2 parâmetros keyword (sem default) ............................................................................... 1545-9-9 Macro com símbolo variável e com 2 parâmetros keyword (com default)............................................................................... 155

A P E N D I C E S ............................................................................................................................................................................. 156APÊNDICE A - Instruções (ordem alfabética de mnemônico e ordem código de instrução)................................................................ 157APÊNDICE B - Tabelas de potências de 2 e 16 .................................................................................................................................... 168APÊNDICE C - Caracteres EBCDIC .................................................................................................................................................... 170APÊNDICE D - Caracteres ASCII ........................................................................................................................................................ 171APÊNDICE E – Caracteres de controle de impressão........................................................................................................................... 172APÊNDICE F - Interrupções por erro de programa............................................................................................................................... 173APÊNDICE G - Truques úteis a programas Assembler......................................................................................................................... 174APÊNDICE H – Exemplos de macro instruções MVS.......................................................................................................................... 176APÊNDICE I - Exemplo de programa MVS ......................................................................................................................................... 177APÊNDICE J – Exemplos de macro Instruções VSE............................................................................................................................ 178APÊNDICE K - Exemplo de programa VSE......................................................................................................................................... 179APÊNDICE L – Exemplo de macro instruções VM.............................................................................................................................. 180APÊNDICE M - Exemplo de programa VM ......................................................................................................................................... 181APÊNDICE N - Macro instruções XEGUEI e TCHAU........................................................................................................................ 182APÊNDICE O - Exemplo de Subrotina ................................................................................................................................................. 186APÊNDICE P - Exemplo 2 de subrotina ............................................................................................................................................... 187APÊNDICE Q - Montagem de programa de demonstração 1................................................................................................................ 189APÊNDICE R - Montagem de programa de demonstração 2 ................................................................................................................ 202

EXERCíCIOS PROPOSTOS .................................................................................................................................................................... 213EXERCÍCIOS RESOLVIDOS .................................................................................................................................................................. 228

Page 7: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 77

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

Page 8: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 88

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 077 / 2 = cociente 38 resto 138 / 2 = cociente 19 resto 019 / 2 = cociente 9 resto 19 / 2 = cociente 4 resto 14 / 2 = cociente 2 resto 02 / 2 = cociente 1 resto 01 / 2 = cociente 0 resto 1

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

Se o número for negativo: Converter o mesmo número decimal positivo para binário, conforme exposto acima Inverter os bits (bit 0 transformar em 1; bit 1 transformar em 0) Somar 1 (ver item 1.2.2.1 – Somar em binário) Preencher com 1’s à esquerda até completar a quantidade de bits do campo desejado (16 se half-word, 32 se

full-word ou 32 se double-word)Exemplos:

(154)10 = (10011010)2

10011010 invertido : 01100101somando 1 : + 1 -------- 01100110

completando à esquerda com 1’s para completar 16 bites (half-word): 1111111101100110Portanto:(-154)10 = (1111111101100110)2 = (FF66)16

(7)10 = (111)2

111 invertido : 000somando 1 : + 1 -------- 001

completando à esquerda com 1’s para completar 16 bites (half-word): 1111111111111001Portanto:(-7)10 = (1111111111111001)2 = (FFF9)16

Page 9: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 99

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

Page 10: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1010

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 777160 / 16 = cociente 4822 resto 84822 / 16 = cociente 301 resto 6301 / 16 = cociente 18 resto 1313 / 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

Page 11: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1111

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

Page 12: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1212

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

Page 13: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1313

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 = 2561 . (2**7) = 1 . 128 = 1281 . (2**6) = 1 . 64 = 640 . (2**5) = 0 . 32 = 00 . (2**4) = 0 . 16 = 01 . (2**3) = 1 . 8 = 81 . (2**2) = 1 . 4 = 40 . (2**1) = 0 . 2 = 01 . (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

Page 14: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1414

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 = 65536A . (16**3) = 10 . (16**3) = 10 . 4096 = 40960C . (16**2) = 12 . (16**2) = 12 . 256 = 30725 . (16**1) = 5 . (16**1) = 5 . 16 = 80F . (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

Page 15: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1515

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 = 00 + 1 = 11 + 0 = 11 + 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

Page 16: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1616

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 = 01 - 0 = 11 + 1 = 00 - 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

Page 17: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1717

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

Page 18: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1818

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

Page 19: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 1919

1-3. Arquitetura de Mainframes 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. O principal criador da arquitetura /360 foi Gene Amdahl (1922-).

Gene Amdahl

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... Alguns desses elementos são: 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

Page 20: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2020

Um sistema mainframe 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.

LAYOUT 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 externaBYTE 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 problemaBYTES 2-3 (BITS 16-31) = Interruption codeBYTE 4 BITS 32-33 = ILC = Instruction length code BITS 34-35 = CC = Condition code BITS 36-39 = máscara de programaBYTES 5-7 (BITS 40-63) = Instruction address

LAYOUT 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 externaBYTE 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 problemaBYTE 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ânciaBYTE 3 (BITS 24-31) = 00000000BYTE 4 (BITS 32-39) = 00000000BYTES 5-7 (BITS 40-63) = Instruction address

Page 21: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2121

LAYOUT 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 externaBYTE 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 problemaBYTE 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ânciaBYTE 3 (BITS 24-31) = 00000000BYTE 4 BIT 32 = 0 = 24 bit addressing = 1 = 31 bit addressingBYTE 4/5/6/7 (BITS 33-63) = Instruction address

LAYOUT 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 externaBYTE 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 problemaBYTE 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ânciaBYTE 3 (BITS 24-31) = 00000000BYTE 4 BIT 32 = 0 = 24 bit addressing = 1 = 31 bit addressingBYTE 4/5/6/7 (BITS 33-63) = Instruction address

Page 22: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2222

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 seriam feitas de forma indireta (Base + Deslocamento ou Base + Deslocamento + Indexador).

BASE + DESLOCAMENTO

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):

Conteúdo do registrador Base = 0AB428 ou 610AB428Deslocamento = C5A C5AEndereço do campo de memória = 0AC082 610AC082

dependendo da arquitetura utilizada.

Page 23: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2323

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 30C0A800Conteúdo do registrador Base = 002800 ou 10002800Deslocamento = F84 F84Endereço do campo de memória = C0DF84 ou 40C0DF84

dependendo da arquitetura utilizada.

Exemplo de uso: endereçar itens de tabela.

Endereço inicial da tabela :Símbolo = TABUFS (transformado pelo montador em base + deslocamento)

Endereço do item desejado (8o) = Endereço inicial da tabela + [ tamanho de 1 item * ( quantidade itens – 1) ] =TABUFS + [ 2 * (8 – 1) ] = TABUFS + 2 * 7 = TABUFS + 14

Endereço do item desejado (8o) = Base+deslocamento de TBUFS + Registrador Indexador (ex.: 17C0A = Indexador=1, Base = 7, deslocamento = C0A)

Endereço de TABUFS = na instrução, na forma Base + deslocamento (montador coloca); supor Base=7 e deslocamento = X’C0A’Conteúdo reg. Indexador = registrador 1 (responsabilidade de nosso programa colocar) com conteúdo X’0000000E’

GODFPARNCERSPBMSMTTOSPSCBAAMAC

Page 24: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2424

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

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

Deslocamento máximo; uso de bases

Por poder ser representado em 1 byte e meio, o deslocamento máximo é X’FFF’ (4095 bytes).Ou seja: se o registrador base tiver x’00000000’ como conteúdo, ele só consegue ser usado como base para fazer referência aos endereços desde x’00000000’ até x’00000FFF’ (endereçamento base+deslocamento).Se uma instrução precisar endereçar 2 campos na forma base+deslocamento:- um deles com endereço x’00000048’ e outro com endereço x’00001CB0’, na hora em que ela for executada, ela precisa mais do que um registrador base preparado convenientemente.Pode-se, por exemplo, ter o registrador C com o conteúdo x’00000000’, e outro registrador (o D, por exemplo) com o conteúdo x’00001000’. O registrador base C (12) endereça o primeiro campo:Base+deslocamento = C048 = Base C (com conteúdo x’00000000’) + Deslocamento x’048’O registrador base D (13) endereça o segundo campoBase+deslocamento = DCB0 = Base D (com conteúdo x’00001000’) + Deslocamento x’CB0’

Não há como, em uma única instrução, neste caso, usar só um registrador base.

Como o registrador zero não é considerado no cálculo de endereços, pode-se usar no máximo 15 registradores base.Como cada base consegue endereçar 4096 bytes (desde o byte cujo endereço é o valor do registrador base +0 até o byte cujo endereço é o valor do registrador base + X’FFF’).Isso significa que 1 registrador base consegue endereçar um conjunto de 4K bytes de memória.

Page 25: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2525

Com no máximo 15 registradores base: 15 registradores X 4K cada = Máximo de 60K endereçáveis.

Caso o programa seja maior que isso, deve-se dividir o programa em blocos separados, e cada bloco ser “servido” por um conjunto de registradores base, que serão reutilizados (com outros conteúdos), nos demais blocos.

Uma sugestão:Pensar em quais serão os registradores bases do programa inteiro, e quais serão os registradores de trabalho.

Segue tabela com sugestão para uso dos 16 registradores:

0 = Evitar; usado pelas rotinas dos métodos de acesso e Sist. Op.1 = Evitar; usado pelas rotinas dos métodos de acesso e Sist. Op. Usado pelas instruções TRT e EDMK2 = Evitar se necessário ou usar para work; usado pela instrução TRT de edição3 = Usar como base4 = Usar como base5 = Usar como base6 = Usar como base7 = Usar como base8 = Usar como work9 = Usar como work10 = Usar como work11 = Usar como work12 = Usar como work13 = Evitar; usado como base de área de salvação de saveareas nos processos de interface entre softwares14 = Evitar; usado em geral como “guardador” do endereço de volta do programa chamador15 = Evitar; usado em geral como pointer para efetuar algum desvio para programa chamado

Neste caso, há 5 registradores usados como base: R3, R4, R5, R6 e R7Isso permite endereçar (5 x 4K) = 20K no máximo.Supondo um programa de 60K dividido em 3 trechos (blocos) de 20K cada um, em cada bloco podemos carregar os bases e usar só coisas (instruções e áreas) desse trecho.

Memória de 60K bytes

Programa com 60K

R3 com x’00000000’R4 com x’00001000’R5 com x’00002000’R6 com x’00003000’R7 com x’00004000’

R3 com x’00005000’R4 com x’00006000’R5 com x’00007000’R6 com x’00008000’R7 com x’00009000’

R3 com x’0000A000’R4 com x’0000B000’R5 com x’0000C000’R6 com x’0000D000’R7 com x’0000E000’

20K16K12K8K4K0K 20K16K12K8K4K0K 20K16K12K8K4K0K

Page 26: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2626

Resumo

São endereçados : registradores e bytes de memória (Lembrar que o endereço de um campo de memória é o endereço de seu byte mais à esquerda)

Só existe endereçamento DIRETO para registradores: Registradores Gerais = 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F Registradores de Ponto Flutuante = 0,2,4,6

Não existe endereçamento DIRETO para memória. O endereçamento INDIRETO de memória pode ser: - Base + Deslocamento - Indexador + Base + Deslocamento

Base + Deslocamento Endereço = Número hexadecimal resultante da soma entre o Número binário contido num Registrador Geral (registrador que nesta hora é chamado de registrador base)

+ Número hexa contido na instrução, de x’000’ até x’FFF’ “apelidado” de deslocamento

Indexador + Base + Deslocamento Endereço = Número hexadecimal resultante da soma entre o Número binário contido num Registrador Geral (registrador que nesta hora é chamado de registrador indexador)

+ Número binário contido num Registrador Geral (registrador que nesta hora é chamado de registrador base)

+ Número hexa contido na instrução, de x’000’ até x’FFF’ “apelidado” de deslocamento

Carga de registradores base

Apesar de não termos visto ainda as instruções, fica aqui neste ponto o registro de como é geralmente feita a preparação do conteúdo dos registradores base. Após ver as instruções BALR, BCTR, LA e L, volte a este ponto para entender como na prática, na maior parte das vezes, é feita a carga do(s) registrador(es) base.

Carga de 1 único registrador base

PROG START 0 USING *,3 LR 3,15 CARREGA PRIMEIRO E UNICO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT* CARREGAMENTO COM LR MUITO USADO EM MVS

ouPROG START 0 USING *,3 BALR 3,0 CARREGA ENDERECO SEGUINTE AO BALR BCTR 3,0 SUBTRAI 1 BCTR 3,0 SUBTRAI MAIS 1* NESTE PONTO, O REG 3 ESTAH OK; * ELE TEM O ENDERECO DO ENTRY POINT

Page 27: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2727

Carga de 2 registradores base

Pode fazer assim?

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,4096(4) CARREGA NO 4 O QUE TEM NO 3 + 4096

Não! Por que? Porque o deslocamento máximo é de 4095 (X’FFF’) !!! Dá erro de montagem !

Então tem que fazer assim:

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,1 CARREGA NRO 1 NO REG 4 LA 4,4095(4) SOMA 4095 * FICOU COM 4096 AR 4,3 SOMA O ENTRY POINT. * FICOU ENTRY POINT + 4096 * OU ENTRY POINT + X’001000’ * PRONTO ! R4 CARREGADO OK TAMBEM !

Ou assim:

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,4095 CARREGA NRO 4095 NO REG 4 LA 4,1(4) SOMA 1* FICOU COM 4096 AR 4,3 SOMA O ENTRY POINT. * FICOU ENTRY POINT + 4096 * OU ENTRY POINT + X’001000’ * PRONTO ! R4 CARREGADO OK TAMBEM !

Até assim:

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,1 CARREGA NRO 1 NO REG 4 LA 4,4095(3,4) SOMA 4095 + ENTRY POINT* FICOU COM ENTRY POINT + 4096 * OU ENTRY POINT + X’001000’ * PRONTO ! R4 CARREGADO OK TAMBEM !

Desse jeito:

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,2048 CARREGA NRO 2048 NO REG 4 LA 4,2048(3,4) SOMA 2048 + ENTRY POINT* FICOU COM ENTRY POINT + 4096 * OU ENTRY POINT + X’001000’

Page 28: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2828* PRONTO ! R4 CARREGADO OK TAMBEM !

Deste jeitinho...

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,1000 CARREGA NRO 1000 NO REG 4 LA 4,3096(3,4) SOMA 3096 + ENTRY POINT* FICOU COM ENTRY POINT + 4096 * OU ENTRY POINT + X’001000’ * PRONTO ! R4 CARREGADO OK TAMBEM !

Será que pode fazer assim?

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT LA 4,PROG+4096 CARREGA “DIRETO” ENTRY POINT + 4096

NÃO! Por que não?Porque o endereço PROG+40096 não está no alcance do primeiro base (R3), até então o único carregado corretamente. Dá erro de montagem.

Nem assim?

PROG START 0 USING *,3,4 LR 3,15 CARREGA PRIMEIRO REG BASE* REG 3 FICA COM O ENDERECO DO ENTRY POINT L 4,=A(PROG+4096) CARREGA “DIRETO” ENTRY POINT + 4096

DEPENDE ! O que está sendo carregado no R4 é o conteúdo da literal.Se a literal estiver dentro do alcance do PRIMEIRO REG BASE (R3), QUE É O ÚNICO PREPARADO ATÉ ENTÃO, então PODE.Senão, NÃO PODE! Dá erro de montagem.

Page 29: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 2929

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

Page 30: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3030

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-3-4 Formato caracter (padrão EBCDIC)

Cada caracter ocupa 1 byte. Se o campo for maior, geralmente o preenchimento é à direita com espaços. Um conjunto de caracteres recebe o nome de “string”.Exemplos:String Representação em EBCDICALBERTO C1.C3.D2.C5.D9.E4.D6Alberto C1.93.82.85.99.A4.96AMO ELA C1.C4.D6.40.C5.D3.C1+12 4E.F1.F2-12 60.F1.F2

A título de curiosidade, a representação desses mesmos strings no padrão ASCII é a seguinte:String Representação em ASCIIALBERTO 41.4C.42.45.52.54.4FAlberto 41.6C.62.65.72.74.6FAMO ELA 41.4D.4F.20.45.4C.41+12 2B.31.32-12 2D.31.32

Page 31: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3131

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) 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)

Page 32: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3232

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)

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)

Page 33: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3333

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

Page 34: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3434

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

Page 35: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3535

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

Page 36: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3636

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

Page 37: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3737

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:

Page 38: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3838

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)

Page 39: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 3939

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ímbolob) Posições 10 a 14: Código da Instruçãoc) Posições 16 a 71: Operandos e Comentáriosd) Posição 72: Posição de Continuaçãoe) Posições 73 a 80: Identificação e Sequência

COMPLETA MVC ARIMP,=CL133'b' LIMPAR ARIMP

Os operandos são separados um do outro por vírgula.Símbolo (se houver) e instrução devem ser separados por pelo menos 1 espaço em branco.Instrução e operandos (se houver) devem ser separados por pelo menos 1 espaço em branco.Comentários (se houver) devem ser separados dos operandos por pelo menos 1 espaço em branco.

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 de símbolos válidos: ARIMP ARLEIT TOTAL3 VALOR$ $VALOR SOMAR7 A

Exemplos de símbolos não-válidos (o segundo é válido no Assembler H): 3TOTAL TRANZAMAZONICA EU E ELA EU-E-ELA CABEC.

Símbolo Instrução ou

Comando

1o operando 2o operandoComentários

Operandos

Page 40: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4040

2-3. Código de Instrução

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

2-3-1 Instruções ao MontadorSã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, WXTRNc) Controle de Registradores Base: USING, DROPd) Controle da listagem: TITLE, EJECT, SPACE, PRINTe) Controle de programa : ICTL, ISEQ, PUNCH, REPRO, ORG, EQU, OPSYN, PUSH POP, LTORG, CNOP, COPY, END, LOCTR, AMODE, RMODEf) Definição de macro-instrução: AREAD, MACRO, MEXIT, MENDg) Montagem condicional: ACTR, AGO, AIF, ANOP, GBLA, GBLB, GBLC LCLA, LCLB, LCLC, MHELP, MNOTE, SETA, SETB, SETC

2-3-2 Instruções de MáquinaPara 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çõesSã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áriosOs 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:

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.

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.

Page 41: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4141

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 Termos de Expressões

I - SÍMBOLOS, que podem ser de 3 tipos: Ordinários (vistos no item 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. Exemplo: L’WCALC indica o tamanho da variável WCALC.

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:

Instruções e áreas, conforme definidas no programaTamanho de cada instrução ou área

(em bytes)

Conteúdo do Location Counter ANTES

Conteúdo do Location Counter DEPOIS

BALR 3,0 USING *,3 BAL 14,ROTLE CLC CODIGO,=C'1' BNE ERRADO AP CERTO,=P'1' BAL 14,IMPRIME . . . . CODIGO DS CL1 CERTO DC PL3'0' .

2046464..

Por ex. 382 bytes.13.

00000000000200000200000600000C00001000001600001A...

...00019800019900019C

00000200000200000600000C00001000001600001A......

00019800019900019C...

Veja que o conteúdo do location counter é atualizado a cada instrução, a cada campo utilizado, a cada byte gasto.Note que o comando ao montador USING (segunda linha do programa) tem 2 operandos, sendo que o primeiro é uma referência ao Location Counter.

Page 42: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4242

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. Podem ser de 4 tipos:- 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: 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: Se o caracter desejado for um apóstrofe (') ou um E Comercial (&), ele deve ser colocado duas vezes. Ex: MVI BYTE,C'&&' MVI BYTE,C''''

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

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 operandoR2 = Registrador segundo operandoR3 = Registrador terceiro operandoB1 = Registrador Base do primeiro operandoB2 = Registrador Base do segundo operandoD1 = Deslocamento do primeiro operandoD2 = Deslocamento do segundo operandoX2 = Registrador Indexador do segundo operandoI2 = Operando Imediato (segundo operando)L = Tamanho do primeiro e do segundo operandosL1 = Tamanho do primeiro operandoL2 = Tamanho do segundo operandoCO = Código de Operação

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

Page 43: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4343

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:a1. Instruções RX: CO R1,D2(X2,B2) CO R1,D2(X2) assume base 0 CO R1,D2(,B2) assume indexador 0

a2. Instruções RS: CO R1,R3,D2(B2)

a3. Instruções SI: CO D1(B1),I2

a4. Instruções SS: (1 tamanho) CO D1(L,B1),D2(B2)

a4. Instruções SS: (2 tamanhos) CO D1(L1,B1),D2(L2,B2)

Exemplos dos diversos tipos:

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.

Page 44: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4444

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

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, usam-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.

Page 45: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4545

3. Instruções ao Montador Assembler

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

DC (Define Constant - Definir Constante)

[Símbolo] DC [A1]B1[C1]D1[,[A2]B2[C2]D2,...]

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. Obrigatório. 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. Opcional. 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. Obrigatório.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'

Page 46: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4646

Exemplos:

[nome] DC [ad]tipo[at]ciSEPARAT1 DC 132CL1’*’ ad=132;tipo=C;at=L1;ci=‘*’* Declara 132 áreas de 1 byte

SEPARAT2 DC CL132’*’ ad=omitido;tipo=C;at=L132;ci=‘*’* Declara 1 área de 132 bytes

CONTLIN DC PL2’99’ ad=omitido;tipo=P;at=L2;ci=‘99’* Declara 1 área de 2 bytes

ADRSTAB DC A(TABAGE) ad=omitido;tipo=A;at=omitido;ci=(TABAGE)* Declara 1 área de 4 bytes

SEPARAT1 DS 132CL1 ad=132;tipo=C;at=L1;ci=omitido* Declara 132 áreas de 1 byte

SEPARAT2 DS CL132 ad=omitido;tipo=C;at=L132;ci=omitido* Declara 1 área de 132 bytes

CONTLIN DS PL2 ad=omitido;tipo=P;at=L2 ;ci=omitido* Declara 1 área de 2 bytes

ADRSTAB DS A ad=omitido;tipo=A;at=omitido ;ci=omitido* Declara 1 área de 4 bytes

TABELA DE CONSTANTES

TIPO Tamanhoassumido

Alinha-mento

Tamanhos Válidos

Constantes por

operando

Sentido preenchi-

mento

Completa com

Truncaà

Caracteres Válidos

Cada carater ocupa

C suficiente byte 1 a 256 uma E->D brancos D qualquer 1 byteX suficiente byte 1 a 256 várias D->E X’0’ E 0 a F ½ byteB suficiente byte 1 a 256 várias D->E B’0’ E 0 e 1 1 bitF 4 bytes FullWord 1 a 8 várias D->E (1) E + - 0 a 9 (2) (4)H 2 bytes HalfWord 1 a 8 várias D->E (1) E + - 0 a 9 (3) (4)P suficiente Byte 1 a 16 várias D->E X’0’ E + - 0 a 9 ½ byte (5)Z suficiente Byte 1 a 16 várias D->E C’0’ E + - 0 a 9 1 byteD 8 bytes DoubWord 1 a 8 várias -x- -x- -x- + - 0 a 9 -x-A 4 bytes FullWord 1 a 4 várias E->D B’0’ E expressão -x-Y 2 bytes HalfWord 1 a 2 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 número máximo que pode ser especificado é 2**31 - 1 (3) O número máximo que pode ser especificado é 2**15 - 1 (4) O ponto decimal não ocupa nada (5) O sinal ocupa 1/2 BYTE

Page 47: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4747

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 colocá-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

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

Page 48: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4848

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. Ex.: DC H'138' 008A DC H'+138' 008A DC H'-138' FF76 DC H'4,392' 00040188

DC tipo P

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

Page 49: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 4949

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) 00000103CAMPO DC 3A(*-CAMPO) 00000000.00000004.00000008 DC A(TCABC+28*52) DC A(FIM-COMECO)

Os endereços relocáveis são ajustados (relocados) pelo Linkeditor e pelo Loader; veja um exemplo:

...VVV DC A(VALIDS).........VALIDS DC C’AEIOUaeiou’...

Programa fonte (rotina VALIDAR; supor que endereço de VALIDS seja X’00001BC0’)

...00001BC0.........C1C5C9D6E481858996A4...

Programa objeto a ser chamado (supor tamanho = 4K = X’1000’)

...

...

...CALL VALIDAR...............

Programa objeto chamador (supor tamanho = 40K = X’A000’)

Programa chamador: vai de X’0000’ a X’9FFF’

Programa chamado ficou em X’A000’ (o seu zero é o endereço X’A000’): vai de X’A000’ a X’AFFF’

Lked:Agrega a rotina chamada ao programa chamador e AJUSTA as constantes de endereço relocáveis.O conteúdo de VVV é ajustado para X’0000BBC0’

Programa chamador: vai de X’0000’ a X’9FFF’

...0000BBC0...

Page 50: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5050

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) 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)

Page 51: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5151

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 0CL80CODIGO DS CL10DTEM DS CL8NOME DS CL50CIDADE 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.

Outro uso do comando DS é para fazer redefinição de áreas (atribuir nomes diferentes a mesmas áreas físicas).Veja os exemplos a seguir:

AREA1 DS 0CL80A1PART1 DS CL10A1PART2 DS CL10A1PART3 DS CL10A1PART4 DS CL10A1PART5 DS CL10A1PART6 DS CL10A1PART7 DS CL10A1PART8 DS CL10* ORG , VOLTA PARA MESMO ENDEREÇO DE AREA1AREA2 DS 0CL80A2PART1 DS CL20A2PART2 DS CL20A2PART3 DS CL20A2PART4 DS CL20* ORG , VOLTA PARA MESMO ENDEREÇO DE AREA1AREA3 DS 0CL80A3PART1 DS CL5A3PART2 DS CL5A3PART3 DS CL20A3PART4 DS CL30A3PART5 DS CL3A3PART6 DS CL4A3PART7 DS CL13

Page 52: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5252

3-2. Literais

Agora que já vimos o comando DC, vejamos o conceito de LITERAL. Literais são áreas de memória referenciadas por meio de seu conteúdo (e não de seu símbolo).

Elas são alocadas sem identificação (sem nome). A especificação de conteúdo em geral serve como “identificação” pelo montador, de forma que ele consiga determinar o endereço.

No caso do Assembler, ela é especificada num operando, colocando-se um sinal de igual seguido das características com sintaxe análoga à sintaxe das características em comandos DC.

Supondo a instrução MVC WAREA,BRANKS Ela faz referência a dois operandos na memória: WAREA e BRANKS

Supondo, ainda, que as definições dadas a esses campos sejam as seguintes:WAREA DC CL10' 'BRANKS DC CL10' '

Para mover o conteúdo de BRANKS para WAREA, podemos usar a instrução

MVC WAREA,BRANKS : :CONTLIN DC P’66'Neste caso, o campo emissor é um campo declarado com símbolo (label).

O mesmo efeito poderia ser obtido por meio do uso da instrução MVC WAREA,=CL120‘ ‘Aqui o campo emissor é uma literal. 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.

Page 53: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5353

3-3. 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 IDAWByte 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 indicado1 - 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 usadoBytes 6 e 7 = Tamanho (quantidade de bytes a transferir)

Page 54: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5454

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 Addressc - FLAGSd - 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 indicado1 - 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 0Bytes 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)

Page 55: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5555

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 comando 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 + 5B CSECT . 2 .C CSECT . 3 .A CSECT . 4 . C CSECT . 5

END

Page 56: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5656

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 layout de uma área, sem que para isso seja preciso defini-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 DSECTA DS CL2B DS CL20C DSD DS CL10CSN1 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)

Page 57: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5757

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 . . COMA DS CL3B DS CL4 . . END

Page 58: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5858

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:

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.

Page 59: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 5959

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:

Especificado Assumidonenhum AMODE 24 e RMODE 24AMODE 24 RMODE 24AMODE 31 RMODE 24AMODE ANY RMODE 24RMODE 24 AMODE 24RMODE 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 Assumidonenhum AMODE 24 e RMODE 24AMODE 24 RMODE 24AMODE 31 RMODE 24AMODE ANY RMODE 24RMODE 24 AMODE 24RMODE ANY AMODE 31

Page 60: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6060

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 . . ROTINA EQU * . . ENTRY ROTINA END

PROG2 START 0 . . CONST DC A(ROTINA) . . EXTRN ROTINA 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

Page 61: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6161

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.

Page 62: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6262

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

Page 63: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6363

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 é fornecidaOFF - A listagem não é fornecidaGEN - As instruções geradas por macro-instruções devem ser listadasNOGEN - As instruções geradas por macro-instruções não devem ser listadasDATA - As áreas definidas terão todo o seu conteúdo listadoNODATA - As áreas definidas terão somente os 8 primeiros Bytes seus listadosEx: PRINT OFF,DATAEnquanto não for colocado um comando PRINT no programa, será assumido o seguinte: 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 16O 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,CSendo: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

Page 64: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6464

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

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

Page 65: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6565

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. OBS:- os símbolos usados como operandos do ORG devem ter sido definidos antes 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:

Location Counter ANTES do comando

Location Counter APÓS o comando

.

. . . . . . . . . 0AB84C 0AB94C TABNUM DC 256X'FF' 0AB94C 0AB93C ORG TABNUM+240 0AB93C 0AB946 DC 10X'00' 0AB946 0AB94C 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

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 5INST EQU *OFF EQU X'00'ON EQU X'FF'PAGOU EQU X'80'

Page 66: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6666

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 MVCMVC OPSYN

PUSH (Empurrar)

O comando PUSH salva o estado atual de PRINT e USING. Pode-se colocá-lo num dos 4 formatos: 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

Page 67: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6767

CNOP (Conditional Nop - Nop Condicional)

O comando CNOP alinha o Location Counter para uma Half-Word ou Full-word ou double-word. Os bytes "desprezados" são preenchidos com X'0700' (instrução NOPR). O seu formato é: CNOP a,bSendo: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.

No esquema abaixo, vemos os efeitos dos CNOPs possíveis, mostrados a partir de uma double-word, ou seja: para onde é feito o alinhamento.

0,8 2,8 4,8 6,80,4 2,4 0,4 2,4

Ex: CNOP 2,4

COPY (Copiar)

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

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

Page 68: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6868

EXERCÍCIOS PROPOSTOS

Os exercícios 195 a 300 devem ser considerados como um programa, cujo endereço inicial é zero (X’00000000’), ou seja, a primeira área (exercíco 195) começa no endereço zero. As áreas definas por DS devem ser computadas para determinar os endereços. Assumir que o 1o statement seja USING *,9.

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 C'ME&&YOU' EP207: DC C'''S MUSIC' EP208: DC C'@@OI' 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' EP219: DC 2X'1,22,333' EP220: DC 2XL2'1,22' 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' EP233: DC FL3'258' EP234: DC 2FL1'255' EP235: DC F'128000' EP236: DC H'10' EP237: DC H'+10'

Page 69: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 6969

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' 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' EP267: SIMBZZ 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) 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')

Page 70: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7070

EP291: YY1 DC Y(SIMBWW) EP292: YY2 DC Y(10) EP293: YY3 DC Y(L'YY2) EP294: SS1 DC S(SIMBAA) 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: LAST DC 256AL1(255+LAST-*)

Page 71: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7171

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 estendidos : B, BR, NOP, NOPR, BE, BER, BL, BLR, BH, BHR, BO, BOR 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

Page 72: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7272

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 é exceçã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'.

Page 73: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7373

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 é alteradoInterrupçõ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 DepoisCPOB C1.C2.C3 C1.C2.C3CPOA C4.C5.C6 C1.C2.C3

O campo emissor é o segundo operando. O campo receptor é o primeiro operando. Ambos são tratados com o mesmo tamanho.

Supor os operandos com tamanho e conteúdo conforme exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois MVC WA+5(3),WR+2 40.40.40 E5.C1.D3 E5.C1.D3 E5.C1.D3 MVC WOUT,WIN 00.00.00.00.00 00.00.00.00.1C 00.00.00.00.1C 00.00.00.00.1C MVC NICKNAM,=C’SMAIL’ C3.D9.E8.40.40 E2.D4.C1.C9.D3 E2.D4.C1.C9.D3 E2.D4.C1.C9.D3

Movendo espaços usando área auxiliar de 5 bytes (literal de 5 bytes) MVC WA(5),=CL5’ ‘ 5C.5C.5C.5C.5C 40.40.40.40.40 40.40.40.40.40 40.40.40.40.40

Propagando espaços com área auxiliar de somente 1 byte (a literal) !Inicialmente move-se espaço para o primeiro byte à esquerda: MVC WA(1),=C’ ‘ 5C.??.??.??.?? 40 40.??.??.??.?? 40

Em seguida, move-se do primeiro para o segundo byte, do segundo para o terceiro e assim por diante (lembre-se que o MVC é executado byte a byte). Veja a seguir a instrução e acompanhe byte a byte o efeito:Instrução com 4 bytes a mover: MVC WA+1(4),WA Primeiro byte movido: 40.??.??.??.?? 40.??.??.??.?? 40.40.??.??.?? 40.40.??.??.??Segundo byte movido: 40.40.??.??.?? 40.40.??.??.?? 40.40.40.??.?? 40.40.40.??.??Terceiro byte movido: 40.40.40.??.?? 40.40.40.??.?? 40.40.40.40.?? 40.40.40.40.??Quarto byte movido: 40.40.40.40.?? 40.40.40.40.?? 40.40.40.40.40 40.40.40.40.40

Page 74: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7474

MVZ (Move Zones – Movimentar Zonas)Código de máquina D3 (Instrução SS – L)Condition code Não é alteradoInterrupçõ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.56CPOA 78.9A.BC 18.3A.5C

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois MVZ FLDA,FLB 12.34.56 78.9A.BC 72.94.B6 78.9A.BC MVZ TOT,=4C'0' 01.02.03.04.C5 F0.F0.F0.F0.F0 F1.F2.F3.F4.F5 F0.F0.F0.F0.F0

MVN (Move Numerics - Movimentar Numéricos)Código de máquina D1 (Instrução SS - L)Condition code Não é alteradoInterrupçõ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 DepoisCPOB 12.34.56 12.34.56CPOA 78.9A.BC 72.94.B6

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois MVN FLDA,FLB 12.34.56 78.9A.BC 18.3A.5C 78.9A.BC MVN TOT+4(1),=X'0C' 00.12.30.00.2F 0C 00.12.30.00.2C 0C

Page 75: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7575

MVI (Move Immediate - Movimentar Imediato)Código de máquina 92 (Instrução SI)Condition code não é alteradoInterrupçõ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 Depoisoperando Imediato 5C 5CCPOA 12 5C

MVI ARIMP+72,C'/' MVI 0(4),X'80'

Page 76: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7676

MVO (Move with Offset – Movimetar com deslocamento)Código de máquina F1 (Instrução SS – L1 e L2)Condition code Não é alteradoInterrupçõ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 (campoemissor) 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 Antes Depois Depois 1º Caso CPOA 78.9A CPOB 12.34.56 CPOA 45.6A CPOB 12.34.562º Caso CPOA 4A.5C.B9.FC CPOB AB.72 CPOA 00.0A.B7.2C CPOB AB.723º Caso CPOA 00.00.00.0C CPOB 00.00.12.00 CPOA 00.01.20.0C CPOB 00.00.12.00

Outros exemplos:

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

Page 77: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7777

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 < 010 Se o campo movido > 011 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.

Se o emissor for menor (em tamanho) que o receptor, o ZAP preencherá à esquerda com zeros. Ex:

ZAP CPOA,CPOB

Antes Depois1º Caso CPOA B4.F8 CPOB 12.34.5C CPOA 34.5C CPOB 12.34.5C

2º Caso CPOA 07.B8.92 CPOA 12.3C CPOB 00.12.3C CPOB 12.3C

Outros exemplos:

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

Page 78: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7878

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 é menor10 Tamanho do 1º operando é maior11 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.O MVCL 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.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: L 2,=A(RECEPTOR) L 3,=A(L’RECEPTOR) L 8,=A(EMISSOR) L 9,=A(L’EMISSOR) ICM 9,B'1000',=C'*' MVCL 2,8

Page 79: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 7979

PACK (Compactar) Código de máquina F2 (Instrução SS – L1 e L2)Condition code não é alteradoInterrupçõ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 CPOA 00.B7.2A CPOB F1.F2.F3.F4 CPOA 01.23.4F CPOB F1.F2.F3.F4

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

3ºcaso CPOA 19.B7.CA CPOB F9.DB CPOA 00.09.BD CPOB F9.DB

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

Page 80: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8080

UNPK (Unpack – descompactar) Código de máquina F3 (Instrução SS – L1 e L2)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 CPOA 00.00.00.00.B7.2A CPOB 12.34.5C CPOA F0.F1.F2.F3.F4.C5 CPOB 12.34.5C

2ºcaso CPOA 00.00.B7.2A CPOB 12.34.5F CPOA F2.F3.F4.5F CPOB 12.34.5F

3ºcaso CPOA 19.B7.CA CPOB A3.DB CPOA FA.F3.BD CPOB A3.DB

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)

Page 81: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8181

MVCIN (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

A C4.C5.C6 B C1.C2.C3

A C3.C2.C1 B C1.C2.C3

Page 82: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8282

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 < 010 Resultado > 011 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 DepoisCPOB 12.3C 12.3CCPOA 12.34.5C 12.46.8C

Outros exemplos:Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois AP HOWMANY,=P'1' 00.00.5F 1C 00.00.6C 1C AP ARL+2(5),ARL+7(2) 01.23.40.00.0C 98.7C 01.23.40.98.7C 98.7C AP TOTAL,2(3,7) 55.66.77.78.8C 11.11.1D 55.66.66.67.7C 11.11.1D AP 4(3,8),WALFA 01.99.9F 02.0C 02.01.9C 02.0C AP 7(07,8),14(2,3) 00.00.00.00.01.23.4C 00.5C 00.00.00.00.01.23.9C 00.5C AP GRANDTOT,SMALLTOT 00.00.00.0C 00.10.1C 00.00.10.1C

Page 83: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8383

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 < 010 Resultado > 011 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 DepoisCPOB 98.7C 98.7CCPOA 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)

Page 84: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8484

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 DepoisCPOB 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)

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 DepoisCPOB 00.2C 00.2CCPOA 00.00.45.67.8C 22.83.9C.00.0COutros exemplos: DP VALOR,=P'5' DP 2(4,7),0(1,1) DP PERCT,0(2,7) DP 4(12,5),1(3,7)

Page 85: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8585

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 < 010 Resultado > 011 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

Page 86: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8686

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ºoperando10 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ºoperando10 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ºoperando10 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

Page 87: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8787

CLCL (Compare Logocal Character Long – Comparar Logicamente campos longos)Código de máquina 0F (Instrução RR)Condition code 00 1ºoperando = 2ºoperando ou ambos os operandos

tem tamanho 0.01 1ºoperando < 2ºoperando10 1ºoperando > 2ºoperando11 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

Page 88: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8888

C (Compare) Código de máquina 59 (Instrução RX)Condition code 00 1ºoperando = 2ºoperando

01 1ºoperando < 2ºoperando10 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:

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ºoperando10 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)

Page 89: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 8989

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ºoperando10 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 é menor10 Campo selecionado do 1ºoperando é maior11 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.

Page 90: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9090

CR (Compare Register – Comparar Registradores) Código de máquina 19 (Instrução RR)Condition code 00 1ºoperando = 2ºoperando

01 1ºoperando < 2ºoperando10 1ºoperando > 2ºoperando11 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ºoperando10 1ºoperando > 2ºoperando11 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

Page 91: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9191

4-4. Instruções de desvio

4-4-1 Introdução e mnemônicos

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ÓDIGO00 801 410 211 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.

Page 92: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9292

-------------------------------------------------------------------------- USO MNEMÔNICO SIGNIFICADO BC/BCR EQUIVALENTE -------------------------------------------------------------------------- Geral B ou BR Desvia sempre BC 15 ou BCR 15 NOP ou NOPR Não 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 Aritméticas 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 Não Maior)BNL = Branch Not Low (Desvie se Não Menor)BNE = Branch Not Equal (Desvie se Não 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 Não Mais)BNM = Branch If Not Minus (Desvie se Não Menos)BNZ = Branch If Not Zero (Desvie se Não 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 Não UM's)

Page 93: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9393

4-4-2 Instruções de desvio condicional e incondicional

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 VOLTANeste 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

Page 94: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9494

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

Page 95: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9595

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,AGAIN R7 = R8 + R7; Se R7 > R9 Desvia para AGAIN; * Se R7 <= R9 próxima instrução BXH 7,9,AGAIN R7 = R9 + R7; Se R7 > R9 Desvia para AGAIN;* Se R7 <= R9 próxima instrução BXH 7,9,8(4) R7 = R9 + R7; Se R7 > R9 Desvia para instrução* Com endereço = [ (conteúdo R4) + x’008’ ]* Se R7 <= R9 próxima instrução

Exemplo: Usar no fim de uma laço para pesquisa. R7 = começa com o endereço da tabela; somado com o tamanho dos itens da tabelaR8 = tamanho dos itens da tabelaR9 = endereço do último elementoNOTFOUND : toda tabela varrida; item desejado não achado

L R7,=A(TABADRS) L R8,20 L R9,=A(TABADRS+(HOWMANY-1)*LENGTH)NEXTITEM compara item apontado vs desejado se achado, processa e desvia para TABLSEEN se não achado, aponta p/ próximo BXH 7,8,NOTFOUND R7 = R8 + R7; * If R7 > R9 toda tabela varrida; fim da pessquisa * If R7 <= R9 tabela não vista toda; continuar pesquisa B NEXTITEMTABLSEEN ...

Page 96: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9696

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,AGAIN R7 = R8 + R7; Se R7 <= R9 Desvia para AGAIN; * Se R7 > R9 próxima instrução BXLE 7,9,AGAIN R7 = R9 + R7; Se R7 <= R9 Desvia para AGAIN;* Se R7 > R9 próxima instrução BXLE 7,9,8(4) R7 = R9 + R7; Se R7 <= R9 Desvia para a instrução * Cujo endereço é [ (conteúdo R4) + x’008’ ]* Se R7 > R9 próxima instrução

Exemplo: Usar no fim de uma laço para pesquisa. R7 = começa com o endereço da tabela; somado com o tamanho dos itens da tabelaR8 = tamanho dos itens da tabelaR9 = endereço do último elementoNOTFOUND : toda tabela varrida; item desejado não achado

L R7,=A(TABADRS) L R8,20 L R9,=A(TABADRS+(HOWMANY-1)*LENGTH)NEXTITEM compara item apontado vs desejado se achado, processa e desvia para TABLSEEN se não achado, aponta p/ próximo BXLE 7,8,NOTFOUND R7 = R8 + R7; * If R7 <= R9 toda tabela varrida; fim da pesquisa * If R7 > R9 tabela não vista toda; continuar pesquisaNOTFOUND ...TABLSEEN ...

Page 97: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9797

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 < 010 Último Campo > 011 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).

Page 98: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9898

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 < 010 Último Campo > 011 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

Page 99: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 9999

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

Mais exemplos :

Traduzir letras maiúsculas EBCDIC em letras minúsculas EBCDIC; “letras” inválidas são convertidas em espaços EBCDICCONVTB1 DC 256C´ ’ 256 espacos EBCDIC ORG CONVTB1+C’A’ Volta para A maiusculo DC C’abcdefghi’ Substitui espacos originais pelas minusculas ORG CONVTB1+C’J’ Volta para J maiusculo DC C’jklmnopqr’ Substitui espacos originais pelas minusculas ORG CONVTB1+C’S’ Volta para S maiusculo DC C’stuvwxyz’ Substitui espacos originais pelas minusculas ORG , Volta para CONVTB1 +256

Traduzir letras maiúsculas EBCDIC para letras maiúsculas ASCII; “letras” inválidas são convertidas para espaços ASCIICONVTB2 DC 256X’20’ 256 ASCII spaces ORG CONVTB2+C’A’ Volta para A maiusculo DC X’414243444546474849’ Substitui letras EBCDIC pelas ASCII ORG CONVTB1+C’J’ Volta para J maiusculo DC X’4A4B4C4D4E4F505152’ Substitui letras EBCDIC pelas ASCII ORG CONVTB1+C’S’ Volta para S maiusculo DC X’535455565758595A’ Substitui letras EBCDIC pelas ASCII ORG , Volta para CONVTB2+256

Traduzir letras ASCII maiúsculas para letras EBCDIC maiúsculas; “letras” inválidas são convertidas em espaços EBCDICCONVTB3 DC 256X’40’ 256 espacos EBCDIC ORG CONVTB2+X’41’ “Return” to Uppercase ASCII A DC C’ABCDEFGHIJKLMNOPQRSTUVWXYZ’ Subst letras ASCII pelas EBCDIC ORG , Volta para CONVTB3+256

Page 100: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 100100

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:

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

Page 101: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 101101

4-8. Shift (deslocamento de bits) 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 Shiftb) Duplos - dois registradores seguidos (conjunto par-ímpar; deve-se especificar o registrador par) participarão do Shiftc) 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

Page 102: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 102102

SLDL (Shift Left Double Logical – Deslocamento Duplo Lógico à esquerda)Código de máquina 8D (Instrução RS)Condition code Não é alterado 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

Page 103: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 103103

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 < 010 Resultado > 011 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 < 010 Resultado > 011 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

Page 104: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 104104

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 < 010 Resultado > 011 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 < 010 Resultado > 011 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

Page 105: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 105105

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 <> 010 O condition code nunca fica em 10 após um N11 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.A8CAMPOF 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)

Page 106: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 106106

O (Or – Ou)Código de máquina 56 (Instrução RX)Condition code 00 Resultado = 0

01 Resultado <> 010 O condition code nunca fica em 10 após um O11 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.FFCAMPOF 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 <> 010 O condition code nunca fica em 10 após um X11 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.57CAMPOF 00.00.00.FF 00.00.00.FF

Page 107: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 107107

NR (And Register – E entre registradores)Código de máquina 14 (Instrução RR)Condition code 00 Resultado = 0

01 Resultado <> 010 O condition code nunca fica em 10 após um NR11 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.A8Reg. 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 <> 010 O condition code nunca fica em 10 após um OR11 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.FFReg. 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 <> 010 O condition code nunca fica em 10 após um XR11 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.57Reg. 8 00.00.00.FF 00.00.00.FF

Page 108: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 108108

NI (And Immediate – E [com operando] imediato)Código de máquina 94 (Instrução SI)Condition code 00 Resultado = 0

01 Resultado <> 010 O condition code nunca fica em 10 após um NI11 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 04Op.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 <> 010 O condition code nunca fica em 10 após um OI11 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 <> 010 O condition code nunca fica em 10 após um OI11 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 BBOp.Imed. 0F 0F

Page 109: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 109109

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 <> 010 O condition code nunca fica em 10 após um NC11 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.A8CPOB 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 <> 010 O condition code nunca fica em 10 após um OC11 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.FFCPOB 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 <> 010 O condition code nunca fica em 10 após um XC11 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

Page 110: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 110110

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

... LA 15,ROUTINE BALR 14,15RETINS EQU * continuação......ROUTINE ST 14,SAVEREG........ L 14,SAVEREG BR 14

BALR carrega o endereço da instrução RETINS no registrador 14

Salva o registrador 14 (endereço de retorno) em SAVEREG

Restaura o endereço de retorno

Retorna para RETINS

LA carrega o endereço da instrução ROUTINE no registrador 15

Page 111: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 111111

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)

...

... BAL 9,ROUTINERETINS EQU * continuation......ROUTINE ST 9,SAVEREG9........ L 9,SAVEREG9 BR 9

BAL carrega o endereço da instrução RETINS no registrador 9

Salva o registrador 9 (endereço de retorno) em SAVEREG9

Restaura o endereço de retorno

Retorna para RETINS

Page 112: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 112112

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

...

... BAS 9,ROUTINERETINS EQU * continuation......ROUTINE ST 9,SAVEREG9........ L 9,SAVEREG9 BR 9

BAS carrega o endereço da instrução RETINS no registrador 9

(bytes 1, 2 e 3) e zera o byte 0

Salva o registrador 9 (endereço de retorno) em SAVEREG9

Restaura o endereço de retorno

Retorna para RETINS

Page 113: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 113113

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

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

... LA 15,ROUTINE BASR 14,15RETINS EQU * continuação......ROUTINE ST 14,SAVEREG........ L 14,SAVEREG BR 14

BASR carrega o endereço da instrução RETINS nos bytes 1, 2 e 3

do registrador 14, e zera o byte 0

Salva o registrador 14 (endereço de retorno) em SAVEREG

Restaura o endereço de retorno

Retorna para RETINS

LA carrega o endereço da instrução ROUTINE no registrador 15

Page 114: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 114114

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

LA 15,ROUTINE ICM 15,8,AMODE BASSM 14,15RETINS EQU * continuação......ROUTINE ST 14,SAVEREG........ L 14,SAVEREG BR 14

BASSM - Carrega no reg 14 o endereço da instrução RETINS (pega da PSW)- Carrega conteúdo do reg 15 nos bytes 4-7 da PSW- Posiciona addressing mode (pega do reg 15)- Desvia para ROUTINE

Salva o registrador 14 (endereço de retorno) em SAVEREG

Restaura o endereço de retornoRetorna para RETINS

LA carrega o endereço da instrução ROUTINE no registrador 15

Page 115: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 115115

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

Page 116: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 116116

4-11. Instruções de movimento de dados de registrador para memória

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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois ST 7,FULL FE.DC.BA.98 00.01.00.00 FE.DC.BA.98 FE.DC.BA.98 ST 14,SAVE 00.00.00.11 FF.FF.FF.FD 00.00.00.11 00.00.00.11

Outros exemplos: 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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois STH 5,FLD 00.00.00.0A 8A.B4 00.00.00.0A 00.0A STH 8,HWORD FF.FF.FF.FF FF.FF FF.FF.FF.FF FF.FF

Outros exemplos: STH 14,SALVA+18 STH 14,HALF STH 14,0(2) STH 14,0(,8) STH 14,0(2,8) STH 0,CPO

Page 117: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 117117

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:

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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois STC 7,BYTE FE.DC.BA.98 00 FE.DC.BA.98 98 STC 14,0(5) 00.00.00.11 FF 00.00.00.11 11

Outros exemplos: STC 4,BYTE STC 8,0(5) STC 8,0(,9) STC 8,0(5,9)

Page 118: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 118118

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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois STCM 5,B’1010’,TWOBYTES 00.00.45.67 9A.BC

00.00.45.67 00.45 1o byte do registrador 5 é colocado no byte TWOBYTES e

3o byte do registrador 5 é colocado no byte TWOBYTES+1

CVD (Convert to decimal – Converter [de binário] para [decimal] compactado)Código de máquina 4E (Instrução RX)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:Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois CVD 8,DOUBLE 00.00.10.00 00.00.00.00.00.00.00.70 00.00.10.00 00.00.00.00.00.04.09.6C* 2o operando = DOUBLE CVD 8,0(5,9) FF.FF.FF.FF 00.00.FB.EC.44.CC.F0.F1 FF.FF.FF.FF 00.00.00.00.00.00.00.1D* Endereço 2o operando = indexador 5 + base 9 + X’0’ CVD 8,0(,9) 00.00.99.99 98.BA.76.FE.54.DC.32.B9 00.00.99.99 00.00.00.00.00.39.32.1C Endereço 2o operando = indexador 0 + base 9 + X’0’ CVD 8,0(5) 00.00.AA.AA 00.00.00.00.00.00.00.0C 00.00.AA.AA 00.00.00.00.00.43.69.0C* Endereço 2o operando = indexador 5 + base 0 + X’0’Outros exemplos: CVD 8,DOUBLE CVD 8,0(5,9) CVD 8,0(,9) CVD 8,0(5)

Page 119: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 119119

4-12. Instruções de movimento de dados de 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois L 7,FULL FE.DC.BA.98 00.01.00.00 00.01.00.00 00.01.00.00 L 14,SALVA 00.00.00.11 FF.FF.FF.FD FF.FF.FF.FD FF.FF.FF.FD L 11,=F’125’ 00.00.00.00 00.00.00.7D 00.00.00.7D 00.00.00.7D Outros exemplos: 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois LH 5,FLD 00.00.00.00 8A.B4 FF.FF.8A.B4 8A.B4 LH 8,HWORD FF.FF.FF.FF 7A.B4 00.00.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'

Page 120: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 120120

LM (Load Multiple – Carregar Múltiplos)Código de máquina 98 (Instrução RX)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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois IC 4,BYTE 00.00.45.67.8C 6B 00.00.45.67.6B 6B IC 8,=C’K’ 00.00.00.11.1C D2

00.00.00.11.D2 D2 IC 11,=HL1’125’ 00.00.00.00.00.12.7C 7D 00.00.00.00.02.5C.2C 7D

Outros exemplos: IC 4,BYTE IC 8,0(5) IC 8,0(,9) IC 8,0(5,9) IC 9,=C'A'

Page 121: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 121121

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 é alteradoInterrupçõ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:Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois CVB 8,DOUBLE 12.BC.4F.CA 00.00.00.00.00.01.02.4D FF.FF.FC.00 00.00.00.00.00.01.02.4D* 2o operando = DOUBLE CVB 8,0(5,9) FF.FF.FF.FF 00.00.00.00.00.01.02.5C 00.00.04.01 00.00.00.00.00.01.02.5C* Endereço 2o operando = indexador 5 + base 9 + X’0’ CVB 8,0(,9) FF.FF.FF.FF 00.00.00.00.00.01.02.3F 00.00.03.FF 00.00.00.00.00.01.02.3F Endereço 2o operando = indexador 0 + base 9 + X’0’ CVB 8,0(5) FF.FF.FF.FF 00.00.00.00.00.01.02.3C 00.00.03.FF 00.00.00.00.00.01.02.3C* Endereço 2o operando = indexador 5 + base 0 + X’0’

Outros exemplos: CVB 8,DOUBLE CVB 8,0(5,9) CVB 8,0(,9) CVB 8,0(5)

Page 122: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 122122

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 é alteradoInterrupções Possíveis Nenhuma

O conteúdo do registrador especificado no 2º operando é colocado no registrador especificado no 1º operando. Ex:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois LR 4,5 00.00.00.00 FF.FF.FF.FC FF.FF.FF.FC FF.FF.FF.FC LR 4,5 00.00.12.34 00.00.00.02

00.00.00.02 00.00.00.02 LR 4,8 00.00.00.02 00.00.00.00 00.00.00.00 00.00.00.00

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 > 011 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois LPR 4,5 00.00.00.00 FF.FF.FF.FC 00.00.00.04 FF.FF.FF.FC LPR 4,5 00.00.00.02 00.00.00.02 00.00.00.02 00.00.00.02 LPR 4,8 00.00.00.FF 00.00.00.00 00.00.00.00 00.00.00.00

Page 123: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 123123

LNR (Load Negative Register – Carregar registrador negativo)Código de máquina 11 (Instrução RR)Condition code 00 Resultado = 0

01 Resultado < 010 Nunca o condition code fica em 10 após um LNR11 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois LNR 4,5 00.00.00.00 FF.FF.FF.FC FF.FF.FF.FE FF.FF.FF.FC LNR 4,5 00.00.00.02 00.00.00.02 FF.FF.FF.FE 00.00.00.02 LNR 4,8 00.00.00.02 00.00.00.00 00.00.00.00 00.00.00.00

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 < 010 Resultado > 011 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois

LCR 4,5 00.00.00.00 FF.FF.FF.FC 00.00.00.04 FF.FF.FF.FC LCR 4,4 00.00.00.02 00.00.00.02 FF.FF.FF.FE 00.00.00.02

Page 124: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 124124

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 < 010 Resultado > 011 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois LTR 4,5 00.00.00.00 FF.FF.FF.FC FF.FF.FF.FC FF.FF.FF.FC LTR 4,5 00.00.12.34 00.00.00.02 00.00.00.02 00.00.00.02 LTR 4,8 00.00.00.02 00.00.00.00 00.00.00.00 00.00.00.00

Page 125: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 125125

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 < 010 Resultado > 011 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois AR 7,8 00.00.FF.FF 00.00.00.01 00.01.00.00 00.00.00.01 AR 2,2 00.00.FF.FF FF.FF.FF.FF 00.00.FF.FE FF.FF.FF.FE

SR (Subtract Register – Subtrair registradores)Código de máquina 1B (Instrução RR)Condition code 00 Resultado = 0

01 Resultado < 010 Resultado > 011 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ºoperandoEx:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois SR 7,8 00.00.FF.FF 00.00.00.01 00.00.FF.FE 00.00.00.01 SR 2,2 00.00.FF.FF 00.00.FF.FF 00.00.00.00 00.00.00.00

Page 126: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 126126

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: Registrador 6 antes Registrador 7 antes Registrador 9 antes Registrador 6 depois Registrador 7 depois Registrador 9 depois MR 6,9 [ Multiplicando: Registrador 7; Multiplicador: reg 9; Resultado: Regs 6 e 7 juntos ] 00.00.00.00 00.00.00.0A 00.00.00.02 00.00.00.00 00.00.00.14 00.00.00.02 MR 6,9 [ Multiplicando: Registrador 7; Multiplicador: reg 9; Resultado: Regs 6 e 7 juntos ] 00.00.00.00 99.AA.BB.CC 00.FF.FF.FF 00.99.AA.BB 32.55.44.34 00.FF.FF.FF

DR (Divide Register – Dividir registradores)Código de máquina 1D (Instrução RR)Condition code Não é alteradoInterrupçõ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. Resto ou quociente = 0 : sinal sempre positivoSinal do resto = Sinal do dividendoEx: DR 4,9Dividendo : Número binário de 64 bits (sinal + 63 bits), contido nos registradores 4 e 5, em conjunto.Divisor : Reg. 9Resto : Reg. 4Quociente : Reg. 5

L 12,=F’2’ Divisor: Registrador 12 com número 2 L 4,=F’0’ Dividendo: Registradores 4-5 juntos; L 5,=F’257’ Eles tem o número 257 DR 4,12 Quociente: Registrador 5 = 128; Resto: Registrador 4 = 1* L 9,=F’12’ Divisor: Registrador 9 com número 12 L 6,=F’0’ Dividendo: Registradores 6-7 juntos; L 7,=F’148’ Eles tem o número 145 DR 6,9 Quociente: Registrador 7 = 12; Resto: Registrador 6 = 4

Page 127: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 127127

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 sinal10 Resultado = 0, perde sinal11 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes” registrador 1o operando antes 2o operando antes registrador 1o operando depois 2o operando depois ALR 7,12 00.B0.C4.E2 00.00.00.01 00.B0.C4.E3 00.00.00.01 ALR 8,8 7F.FF.FF.FF 00.00.00.01 80.00.00.00 00.00.00.01 ALR 10,10 FF.FF.FF.FF 00.00.00.01 00.00.00.00 00.00.00.01 ALR 10,10 80.00.00.00 80.00.00.00 00.00.00.00 80.00.00.00

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 sinal10 Resultado = 0, perde sinal11 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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois SLR 7,12 00.B0.C4.E2 00.00.00.01 00.B0.C4.E1 00.00.00.01 SLR 10,11 80.00.00.00 00.00.00.01 7F.FF.FF.FF 00.00.00.01

Page 128: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 128128

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 < 010 Resultado > 011 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:Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes” registrador 1o operando antes 2o operando antes registrador 1o operando depois 2o operando depois

A 5,=F'259' 00.00.BF.D2 00.00.01.03 00.00.C0.D5 00.00.01.03

A 7,FULL 00.00.00.0D 00.00.01.03 00.00.01.10 00.00.01.03

A 7,4(2,8) 07.FF.FF.FE 00.00.00.01 07.FF.FF.FF 00.00.00.01

A 7,4(2) 07.FF.FF.FF FF.FF.FF.FF 07.FF.FF.FE FF.FF.FF.FF

A 7,4(,8) 00.00.00.00 FF.FF.FF.FF FF.FF.FF.FF FF.FF.FF.FF

S (Subtract – Subtrair)Código de máquina 5B (Instrução RX)Condition code 00 Resultado = 0

01 Resultado < 010 Resultado > 011 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:Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois

S 5,=F'259' 00.00.BF.D2 00.00.01.03 00.00.BE.CF 00.00.01.03

S 7,FULL 00.00.00.0D 00.00.01.03 FF.FF.FF.0A 00.00.01.03

S 7,4(2,8) 07.FF.FF.FE 00.00.00.01 07.FF.FF.FD 00.00.00.01

S 7,4(2) 07.FF.FF.FF 00.00.00.02 07.FF.FF.FD 00.00.00.02

S 7,4(,8) 00.00.00.00 FF.FF.FF.FF 00.00.00.01 FF.FF.FF.FF

Page 129: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 129129

M (Multiply – Multiplicar)Código de máquina 5C (Instrução RX)Condition code Não é alteradoInterrupçõ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: Registrador 6 antes Registrador 7 antes 2o operando antes Registrador 6 depois Registrador 7 depois 2o operando depois M 6,FLDA [ Multiplicando: Reg 7; Multiplicador: FLDA; Resultado: Regs 6 e 7 juntos ] 00.00.00.00 00.00.00.0A 00.00.00.02 00.00.00.00 00.00.00.14 00.00.00.02 M 6,=F'256' Multiplicando: Reg 7; Multiplicador: 256; Resultado: Regs 6 e 7 juntos 00.00.00.00 00.00.04.00 00.00.00.FF 00.00.00.00 00.03.FC.00 00.00.00.FF M 6,4(2,8) Multiplicando: Reg 7; Endereço multiplicador: Indexador 2 + Base 8 + X’4’;

Resultado: Registradores 6 e 7 juntos 00.00.00.00 00.00.04.00 00.00.01.0A 00.00.00.00 00.04.28.00 00.00.01.0A M 6,4(2) Multiplicando: Reg 7; Endereço multiplicador: Indexador 2 [ + Base 0 ] + X’4’;

Resultado: Registradores 6 e 7 juntos 00.00.00.00 00.00.00.0C 00.00.00.02 00.00.00.00 00.00.00.18 00.00.00.02 M 6,FLD+4(1) Multiplicando: Reg 7; Endereço multiplicador: Indexador 1 + Base de FLD+4

+ Deslocamento de FLD+4 + X’4’; Resultado: Registradores 6 e 7 juntos 00.00.00.00 00.00.AA.AA 00.11.22.33 00.00.00.0B 6C.16.93.DE 00.11.22.33

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 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,CPOANeste caso, temos: Dividendo : Regs. 6 e 7 juntos; Divisor : CPOA; Quociente : Reg. 7; Resto : Reg. 6 L 6,=F’0’ Dividendo: Registradores 6-7 juntos; L 7,=F’257’ They have the number 257 D 6,=F’4’ Divisor: (literal) com número 4; Quociente: Registrador 7 = conteúdo 64; Resto: Registrador 6 = conteúdo 1* L 10,=F’0’ Dividendo: Registradores 10-11 juntos; L 11,=F’17’ They have the number 17 D 10,=F’3’ Divisor: (literal) com número 3; Quociente: Registrador 11 = conteúdo 5; Resto: Registrador 10 = conteúdo 2

Page 130: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 130130

AH (Add Halfword – Somar hafword)Código de máquina 4A (Instrução RX)Condition code 00 Resultado = 0

01 Resultado < 010 Resultado > 011 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes” registrador 1o operando antes 2o operando antes registrador 1o operando depois 2o operando depois AH 5,=H'259' 00.00.2B.C4 01.03 00.00.2C.C7 01.03 AH 5,HALF 00.00.00.0D 01.0D 00.00.01.1A 01.0D AH 5,4(2,8) 11.11.11.11 (decimal 286331153) 88.88 (decimal –30584) 11.10.99.99 (decimal 286300569) 88.88 AH 5,4(2) 11.11.11.11 (decimal 286331153) 78.88 (decimal +30856) 11.11.89.99 (decimal 286362009) 78.88

SH (Subtract Halfword – Subtrair hafword)Código de máquina 4B (Instrução RX)Condition code 00 Resultado = 0

01 Resultado < 010 Resultado > 011 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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois SH 5,=H'259' 00.00.2B.C4 01.03 00.00.2A.C1 01.03 SH 5,HALF 00.00.00.0D 01.0D FF.FF.FF.00 01.0D SH 5,4(2,8) 11.11.11.11 (decimal 286331153) 88.88 (decimal –30584) 11.11.88.89 (decimal 286361737) 88.88 SH 5,4(2) 11.11.11.11 (decimal 286331153) 78.88 (decimal +30856) 11.10.98.89 (decimal 286300297) 78.88

Page 131: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 131131

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:

Registrador 1o operandoantes 2o operando antes Registrador 1o operando depois 2o operando depois M 5,=H’4’ Multiplicando: Registrador 5; Multiplicador: literal 4; Resultado: Registrador 5 00.00.00.0A 00.04 00.00.00.28 00.04 M 5,=F'2' Multiplicando: Registrador 5; Multiplicador: 0 [ primeiros 2 bytes à esquerda da fullword são pegos como a halfword 2o operando; como a fullword tem X’00000002’, pega X’0000’ ]; Resultado: Registrador 5 00.00.04.00 00.00 [ metade da direita com 00.02 não é pega! ] 00.00.00.00 00.00

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 sinal10 Resultado = 0, perde sinal11 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:

Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes” registrador 1o operando antes 2o operando antes registrador 1o operando depois 2o operando depois AL 5,=F'259' 00.00.00.00 00.00.01.03 00.00.01.03 00.00.01.03

AL 5,FULL 00.B0.C4.E2 00.00.00.01 00.B0.C4.E3 00.00.00.01

AL 5,4(2,8) 7F.FF.FF.FF 00.00.00.0180.00.00.0 00.00.00.01

AL 5,4(2) FF.FF.FF.FF 00.00.00.0100.00.00.0 00.00.00.01

AL 5,4(,8) 80.00.00.00 00.00.00.01 00.00.00.00 00.00.00.01

Page 132: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 132132

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 sinal10 Resultado = 0, perde sinal11 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:

Supor os operandos com tamanho e conteúdo como exibidos na linha “antes” 1o operando antes 2o operando antes 1o operando depois 2o operando depois

SL 5,=F'259' 00.00.BF.D2 00.00.01.03 00.00.BE.CF 00.00.01.03

SL 7,FULL 00.00.00.0D 00.00.00.03 00.00.00.0A 00.00.00.03

SL 7,4(2,8) 07.FF.FF.FE 00.00.00.01 07.FF.FF.FD 00.00.00.01

SL 7,4(2) 07.FF.FF.FF 00.00.00.02 07.FF.FF.FD 00.00.00.02

Page 133: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 133133

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:

registrador 1o operando antes instrução máquina registrador 3 antes registrador 9 antes registrador 1o operando depois registrador 3 depois registrador 9 depois

LA 5,TABLE 01.12.34.56 41.50.3A.C2 00.0B.88.40 nao usado 00.0B.93.02 00.0B.88.40 nao usado

LA 5,FLD+17 01.12.34.56 41.50.3F.03 00.A0.00.00 nao usado 00.A0.0F.03 00.A0.00.00 nao usado

LA 5,FLD+17(9) 01.12.34.56 41.59.3F.03 00.A0.00.00 00.00.00.14 00.A0.0F.6A 00.A0.00.00 00.00.00.14

LA 5,2(9,3) 01.12.34.56 41.59.30.02 00.A0.00.00 00.00.00.14 00.A0.00.16 00.A0.00.00 00.00.00.14

LA 5,200 01.23.45.67 41.50.00.C8 nao usado nao usado 00.00.00.C8 nao usado nao usado

LA 5,4095 01.23.45.67 41.50.0F.FF not used not used 00.00.0F.FF not used not used

LA 5,4095(3) 01.23.45.67 41.53.0F.FF 00.0A.80.00 not used 00.0A.8F.FF 00.0A.80.00 not used

LA 5,4095(3,9) 01.23.45.67 41.53.9F.FF 00.0A.00.00 00.00.00.01 00.0A.90.00 00.0A.80.00 00.00.00.01

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 é 001 Dos bits testados, alguns estão ligados e outros desligados10 Nunca o condition code fica em 10 após um TM11 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' Bits 0, 3, 4 e 5 of BYTE são testados

Neste caso, os bits 0, 3, 4 e 5 de BYTE serão testados. Outros exemplos:

TM CHAVE,B'10000001' Bits 0 e 7 of BYTE são testados TM 0(4),240 Bits 4,5,6 e 7 de [reg base 4 + deslocamento X’0’] são testados TM 2(8),X'80' Bit 0 [reg base 8 + deslocamento X’2’] é testado

Page 134: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 134134

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 executadaInterrupçõ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:

L 5,=F’22’ EX 5,MVC . . . MVC MVC 0,(0,12),=CL256'b'

O move será executado com tamanho 23

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) = OPENX'01' (001) = WAIT/WAITR/PRTOV X'14' (020) = CLOSEX'02' (002) = POST X'23' (035) = WTO/WTORX'04' (004) = GETMAIN X'24' (036) = WTLX'05' (005) = FREEMAIN X'5D' (093) = TGET/TPUTX'0B' (011) = TIME X'63' (099) = DYNALLOCX'0D' (013) = ABEND X'6B' (107) = MODESET

Page 135: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 135135

MC (Monitor Call – Chamada do monitor)Código de máquina AF (Instrução SI)Condition code Permanece inalteradoInterrupçõ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º

operandoInterrupçõ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 é alteradoInterrupçõ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

Page 136: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 136136

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 set10 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 ligado10 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º operando01 1º e 2º operandos são diferentes, o 2º operando foi colocado no 1º operando10 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,FWAntes: R5 00.BF.C4.20 R8 7D.48.C0.00 FW 00.BF.C4.20Depois: R5 00.BF.C4.20 R8 7D.48.C0.00 FW 7D.48.C0.00

Outro exemplo: CS 5,8,FWAntes: R5 00.BF.C4.20 R8 7D.48.C0.00 FW 00.FF.EE.DDDepois: R5 00.FF.EE.DD R8 7D.48.C0.00 FW 00.FF.EE.DD

Page 137: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 137137

CDS (Compare Double and Swap – Comparar double e Trocar) Código de máquina BB (Instrução RS)Condition code 00 1º e 2º operandos são iguais, o 3º operando foi

colocado no 2º operando01 1º e 2º operandos são diferentes, o 2º operando foi colocado no 1º operando10 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

Page 138: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 138138

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 MHELPAGO LCLB GBLB SETB AREAD MNOTEAIF 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 . MENDPROGRAMA CSECT . . programa . . . END

Page 139: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 139139

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 .

Page 140: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 140140

&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.

Page 141: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 141141

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 campoT'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 PS'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 campoK'simbolovariável = ATRIBUTO DE CONTAGEM = tem um número que indica quantos caracteres tem um operando de macro instrução ou quantos caracteres tem um campo do Assembler definido por SETN'simbolovariável = ATRIBUTO DE NÚMERO = contém o número de sub-operandos de um operando de uma macro instruçãoD'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.

Page 142: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 142142

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

Page 143: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 143143

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'

Page 144: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 144144

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'

Page 145: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 145145

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.

Page 146: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 146146

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 ousimbolovariavel AREAD NOSTMT ousimbolovariavel 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

Page 147: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 147147

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

Page 148: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 148148

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ênciasequê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

Page 149: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 149149

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,&P3X 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').NG1X DC A(&P1) X DC A(&P1).NG1 AIF ('&P2' EQ '').NG2 .NG1 AIF (T'&P2 EQ 'O').NG2Y DC A(&P2) Y DC A(&P2).NG2 AIF ('&P3' EQ '').NG3 .NG2 AIF (T'&P3 EQ 'O').NG3Z DC A(&P3) Z DC A(&P3).NG3 ANOP .NG3 ANOP

MEND MEND

Page 150: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 150150

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=YYYX 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.

Page 151: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 151151

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.

Page 152: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 152152

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

Page 153: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 153153

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

Page 154: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 154154

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

Page 155: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 155155

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

Page 156: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 156156

A P E N D I C E S

APÊNDICE A - INSTRUÇÕES DE MÁQUINAAPÊNDICE B - TABELA DE POTÊNCIASAPÊNDICE C - TABELA DE CARACTERES EBCDICAPÊNDICE D - TABELA DE CARACTERES ASCIIAPÊNDICE E - CARACTERES DE CONTROLE (Impressão)APÊNDICE F - INTERRUPÇÕES POR ERRO DE PROGRAMAAPÊNDICE G - TRUQUES ÚTEIS A PROGRAMAS ASSEMBLERAPÊNDICE H - ALGUMAS MACROS MVSAPÊNDICE I - EXEMPLO DE PROGRAMA EM MVSAPÊNDICE J - ALGUMAS MACROS VSEAPÊNDICE K - EXEMPLO DE PROGRAMA EM VSEAPÊNDICE L - ALGUMAS MACROS VMAPÊNDICE M - EXEMPLO DE PROGRAMA EM VMAPÊNDICE N - MACROS XEGUEI E TCHAUAPÊNDICE O - EXEMPLO 1 DE SUBROTINAAPÊNDICE P - EXEMPLO 2 DE SUBROTINAAPÊNDICE Q - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 1APÊNDICE R - MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 2

Page 157: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 157157

APÊNDICE A - Instruções (ordem alfabética de mnemônico e ordem código de instrução)

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çãoc) tipo de instruçãod) 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

Page 158: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 158158

----- 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

Page 159: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 159159

----- 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

Page 160: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 160160

----- 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

Page 161: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 161161

----- 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

Page 162: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 162162

----- 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

Page 163: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 163163

----- 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

Page 164: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 164164

----- 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

Page 165: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 165165

----- 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

Page 166: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 166166

----- 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

Page 167: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 167167

----- 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 ----- - ---

Page 168: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 168168

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.36816**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.88816**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.20816**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.32816**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.24816**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.96816**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.48816**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

Page 169: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 169169

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 001 1 01 16 01 256 01 4.09602 2 02 32 02 512 02 8.19203 3 03 48 03 768 03 12.28804 4 04 64 04 1.024 04 16.38405 5 05 80 05 1.280 05 20.48006 6 06 96 06 1.536 06 24.57607 7 07 112 07 1.792 07 28.67208 8 08 128 08 2.048 08 32.76809 9 09 144 09 2.304 09 36.86410 10 10 160 10 2.560 10 40.96011 11 11 176 11 2.816 11 45.05612 12 12 192 12 3.072 12 49.15213 13 13 208 13 3.328 13 53.24814 14 14 224 14 3.584 14 57.34415 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

Page 170: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 170170

APÊNDICE C - Caracteres EBCDIC

HEX CARAC-

TER

HEX CARATER HEX CARATER HEX CARATER HEX CARATER HEX CARAC-

TER

00 30 60 - hífen 90 C0 { abre chave F0 001 31 61 / barra 91 i C1 A F1 102 32 62 92 j C2 B F2 203 33 63 93 k C3 C F3 304 34 64 94 l C4 D F4 405 35 65 95 m C5 E F5 506 36 66 96 n C6 F F6 607 37 67 97 o C7 G F7 708 38 68 98 p C8 H F8 809 39 69 99 q C9 I F9 90A 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 Espaço 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

Page 171: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 171171

APÊNDICE D - Caracteres ASCII

HEX CARAC-TER HEX CARATER HEX CARATER HEX CARATER HEX CARATER HEX CARAC-

TER

00 30 0 60 90 C0 { abre chave F0 01 31 1 61 91 i C1 A F1 02 32 2 62 92 j C2 B F2 03 33 3 63 93 k C3 C F3 04 34 4 64 94 l C4 D F4 05 35 5 65 95 m C5 E F5 06 36 6 66 96 n C6 F F6 07 37 7 67 97 o C7 G F7 08 38 8 68 98 p C8 H F8 09 39 9 69 99 q C9 I F9 0A 3A 6A 9A r CA FA 0B 3B 6B 9B CB FB 0C 3C 6C 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 7B AB DB 1C 4C < menor 7C @ arroba AC DC 1D 4D 7D AD DD 1E 4E 7E = igual AE DE 1F 4F | barra vertical 7F AF DF 20 Espaço 50 80 B0 E0 \ barra invertida 21 ! exclamação 51 81 a B1 E1 22 " aspas 52 82 b B2 E2 S 23 # número 53 83 c B3 E3 T 24 $ cifrão 54 84 d B4 E4 U 25 % percentual 55 85 e B5 E5 V 26 & E comercial 56 86 f B6 E6 W 27 ' apostrofe 57 87 g B7 E7 X 28 ( abre arênteses 58 88 h B8 E8 Y 29 ) fecha

parênteses 59 89 B9 E9 Z

2A * asterisco 5A 8A BA EA 2B + mais 5B 8B BB EB 2C , virgula 5C 8C BC EC 2D - hífen 5D 8D BD ED 2E . ponto 5E ; ponto e vírgula 8E BE EE 2F / barra 5F not 8F BF EF

Page 172: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 172172

APÊNDICE E – Caracteres de controle de impressão

HEXA---SIGNIFICADO------------------------------CARACTERES DE MÁQUINA--------

01 Imprime na linha em que estiver posicionado, e fica posicionado nela09 Imprime na linha em que estiver posicionado, depois salta 1 linha11 Imprime na linha em que estiver posicionado, depois salta 2 linhas19 Imprime na linha em que estiver posicionado, depois salta 3 linhas89 Imprime na linha em que estiver posicionado, depois salta para o canal 191 Imprime na linha em que estiver posicionado, depois salta para o canal 299 Imprime na linha em que estiver posicionado, depois salta para o canal 3A1 Imprime na linha em que estiver posicionado, depois salta para o canal 4A9 Imprime na linha em que estiver posicionado, depois salta para o canal 5B1 Imprime na linha em que estiver posicionado, depois salta para o canal 6B9 Imprime na linha em que estiver posicionado, depois salta para o canal 7C1 Imprime na linha em que estiver posicionado, depois salta para o canal 8C9 Imprime na linha em que estiver posicionado, depois salta para o canal 9D1 Imprime na linha em que estiver posicionado, depois salta para o canal 10D9 Imprime na linha em que estiver posicionado, depois salta para o canal 11E1 Imprime na linha em que estiver posicionado, depois salta para o canal 120B Salta 1 linha13 Salta 2 linhas1B Salta 3 linhas8B Salta para o canal 193 Salta para o canal 29B Salta para o canal 3A3 Salta para o canal 4AB Salta para o canal 5B3 Salta para o canal 6BB Salta para o canal 7C3 Salta para o canal 8CB Salta para o canal 9D3 Salta para o canal 10DB Salta para o canal 11E3 Salta para o canal 12

----HEXA----SIGNIFICADO-----------------------------CARACTERES ASA-----------

40 Salta 1 linha, imprime, e fica posicionado na linha impressa0 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 nela1 F1 Salta para o canal 1, imprime, e fica posicionado na linha impressa2 F2 Salta para o canal 2, imprime, e fica posicionado na linha impressa3 F3 Salta para o canal 3, imprime, e fica posicionado na linha impressa4 F4 Salta para o canal 4, imprime, e fica posicionado na linha impressa5 F5 Salta para o canal 5, imprime, e fica posicionado na linha impressa6 F6 Salta para o canal 6, imprime, e fica posicionado na linha impressa7 F7 Salta para o canal 7, imprime, e fica posicionado na linha impressa8 F8 Salta para o canal 8, imprime, e fica posicionado na linha impressa9 F9 Salta para o canal 9, imprime, e fica posicionado na linha impressaA C1 Salta para o canal 10, imprime, e fica posicionado na linha impressaB C2 Salta para o canal 11, imprime, e fica posicionado na linha impressaC C3 Salta para o canal 12, imprime, e fica posicionado na linha impressa

Page 173: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 173173

APÊNDICE F - 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.

Page 174: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 174174

APÊNDICE G - 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

Page 175: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 175175

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

Page 176: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 176176

APÊNDICE H – Exemplos de 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=FBDISKSAI DCB DDNAME=DDSAI,DSORG=PS,MACRF=(PM),RECFM=FBRELAT DCB DDNAME=DDREL,DSORG=PS,MACRF=(PM),RECFM=FBA

Page 177: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 177177

APÊNDICE I - 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 PGMMOVEPARM MVC PARMTXT(0),2(1) MOVE O PARM PARA AREA DO PGMSAVE DC 18F'0' SAVE AREA DO PROGRAMAPARMTXT DC CL100' ' AREA PARA O PARMPARMLEN 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 CL50WSAI DS CL50ENTRA DCB DDNAME=DDENTRA,DSORG=PS,EODAD=FIMINP,MACRF=(GM),RECFM=FBSAI DCB DDNAME=DDSAI,DSORG=PS,MACRF=(PM),RECFM=FB END

Page 178: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 178178

APÊNDICE J – Exemplos de 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=YESDISKSAI DTFSD TYPEFLE=OUTPUT,RECFORM=FIXBLK,RECSIZE=50,BLKSIZE=5000, X IOAREA1=BUFOUT,WORKA=YESRELAT DTFPR DEVADDR=SYSLST,RECFORM=FIXUNB,RECSIZE=133,BLKSIZE=133, X CTLCHR=ASA,IOAREA1=BUFPR,WORKA=YES

Page 179: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 179179

APÊNDICE K - 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,SAILER GET ENTRA,WENTRA MVC WSAI,WENTRA PUT SAI,WSAI B LERFIMINP CLOSE ENTRA,SAI*--------------------------------------------------------TERMINAR EQU * EOJ*--------------------------------------------------------WENTRA DS CL50WSAI DS CL50ENTRA DTFSD EOFADDR=FIMINP,TYPEFLE=INPUT,RECFORM=FIXBLK,RECSIZE=50, X BLKSIZE=5000,IOAREA1=BUFIN,WORKA=YESDISKSAI DTFSD TYPEFLE=OUTPUT,RECFORM=FIXBLK,RECSIZE=50,BLKSIZE=5000, X IOAREA1=BUFOUT,WORKA=YES LTORGBUFIN DS CL5000BUFOUT DS CL5008 END

Page 180: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 180180

APÊNDICE L – Exemplo de 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

Page 181: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 181181

APÊNDICE M - 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 LEMAYBEFIM 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 2FINAL 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 CL50WSAI DS CL50SAVE DC 18F'0' END

Page 182: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 182182

APÊNDICE N - 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 0R1 EQU 1R2 EQU 2R3 EQU 3R4 EQU 4R5 EQU 5R6 EQU 6R7 EQU 7R8 EQU 8R9 EQU 9R10 EQU 10R11 EQU 11R12 EQU 12R13 EQU 13R14 EQU 14R15 EQU 15

Page 183: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 183183

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

Page 184: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 184184

*-----------------------------------------------------------* 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 SAVEAREAPARMTEXT DC CL100' ' MINHA AREA PARA O PARMPARMLEN@ 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

Page 185: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 185185

.*-----------------------------------------------------------

.* 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

Page 186: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 186186

APÊNDICE O - 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 SAIROT4ISZONADO 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),WSAIROT EQU * L 13,4(13) LM 14,12,12(13) SR 15,15 BR 14SAIROT4 EQU * L 13,4(13) LM 14,12,12(13) LA 15,4 BR 14TABNUM DC 240X'FF',10X'00'6X'FF'W DS CL2SAVEROT DC 18F'0' END

Page 187: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 187187

APÊNDICE P - 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

Page 188: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 188188

* 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),TOTDWSAIROT EQU * L 13,4(13) LM 14,12,12(13) SR 15,15 BR 14VOLTA4 EQU * L 13,4(13) LM 14,12,12(13) LA 15,4 BR 14VOLTA8 EQU * L 13,4(13) LM 14,12,12(13) LA 15,8 BR 14TABNUM DC 240X'FF',10X'00'6X'FF'TOTDW DS DW DS CL3 END

Page 189: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 189189

APÊNDICE Q - 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

Page 190: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 190190

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'

Page 191: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 191191

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

Page 192: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 192192

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',1330001C0 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'

Page 193: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 193193

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

Page 194: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 194194

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

Page 195: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 195195

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'

Page 196: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 196196

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) P0008A8 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 *-----------------------------------

Page 197: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 197197

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

Page 198: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 198198

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'

Page 199: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 199199

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

Page 200: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 200200

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

Page 201: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 201201

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

Page 202: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 202202

APÊNDICE R - Montagem de programa de demonstração 2

EXTERNAL SYMBOL DICTIONARY SYMBOL TYPE ID ADDR LENGTH LD ID FLAGS REGSBASE SD 0001 000000 0050D5 00

Page 203: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 203203

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

Page 204: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 204204

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

Page 205: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 205205

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 * . .

Page 206: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 206206

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

Page 207: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 207207

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 *-----------------------------------

Page 208: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 208208

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 *-----------------------------------

Page 209: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 209209

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

Page 210: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 210210

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

Page 211: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 211211

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 0B 00016 000410 0039 0042 0046 0053 0090 0097 0104 0114 0151 0158 0BLOCO1 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 0DSEKCOP3 ****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 0F 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 0I 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 0REGSBASE 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

Page 212: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 212212

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

Page 213: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 213213

EXERCíCIOS PROPOSTOS

EP301

EP301 : 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=00000C00R01=00000100 R05=00000500 R09=00000900 R13=00000D00R02=00000200 R06=00000600 R10=00000A00 R14=00000E00R03=00000300 R07=00000700 R11=00000B00 R15=00000F00

Instruções a decodificar:

1ABB41278CF00A13980F334445E00CB490EC0D00FA82305448CCD28233445566

EP302

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (ZIG). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 5 5 X Informação ALFA6 15 10 X Informação BETA16 30 15 X Informação GAMA31 50 20 X Informação DELTA

Exemplo:

12345678901234567890123456789012345678901234567890 ("régua")

AAAAABBBBBBBBBBCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDD11111222222222233333333333333344444444444444444444-----**********&&&&&&&&&&&&&&&====================

---------------------------------------------------------------------------SAIDA : Arquivo em disco sequencial (ZAG). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 15 15 X Informação GAMA16 20 5 X Informação ALFA21 40 20 X Informação DELTA41 50 10 X Informação BETA

Exemplo:

12345678901234567890123456789012345678901234567890 ("régua")

Page 214: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 214214

CCCCCCCCCCCCCCCAAAAADDDDDDDDDDDDDDDDDDDDBBBBBBBBBB33333333333333311111444444444444444444442222222222&&&&&&&&&&&&&&&-----====================**********

---------------------------------------------------------------------------PROCESSAMENTO

Para cada registro de ZIG lido, gravar um registro de ZAG.

Page 215: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 215215

EP303

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (TIC). Tem no máximo 10 registros. Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 X Informação a5 8 4 X Informação b9 12 4 X Informação c13 16 4 X Informação d17 20 4 X Informação e21 24 4 X Informação f25 28 4 X Informação g29 32 4 X Informação h33 36 4 X Informação i37 40 4 X Informação j

Exemplo:

1234567890123456789012345678901234567890 ("régua")

AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ1111222233334444555566667777888899990000LLLLMMMMOOOOPPPPQQQQRRRRSSSSTTTTUUUUXXXX

---------------------------------------------------------------------------SAIDA : Arquivo em disco sequencial (TAC). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número registro5 8 4 X Informação n9 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")

00000001C1C1C1C100000000000000000000000000000002F2F2F2F200000000000000000000000000000003D6D6D6D6000000000000000000000000

---------------------------------------------------------------------------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.

Page 216: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 216216

EP304

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (ENTRA). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 50 50 X Informação qualquer

Exemplo:

1234567890123456789012345678901234567890 ("régua")

TEXTO LIVRE PARA DAR ASAS A IMAGINACAOMOVE SPACES TO LINHA-DE-IMPRESSAO

OKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOK

---------------------------------------------------------------------------SAIDA : Arquivo em disco sequencial (SAI). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número registro5 8 4 B quantos brancos9 12 4 B quantos não brancos13 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")

00000001000000080000002AFFFFFFFFFFFFFFFF000000020000000A00000028FFFFFFFFFFFFFFFF000000030000003200000000FFFFFFFFFFFFFFFF000000040000000000000032FFFFFFFFFFFFFFFF

---------------------------------------------------------------------------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.

Page 217: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 217217

EP305

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (TOP). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número a5 8 4 B Número b9 12 4 B Número c13 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")

00000001000000020000000340404040404040400000000700000006000000054040404040404040000000090000000A000000024040404040404040

---------------------------------------------------------------------------SAIDA : Arquivo em disco sequencial (DOWN). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número registro5 8 4 B menor número9 12 4 B maior número13 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")

000000010000000100000003FFFFFFFFFFFFFFFF000000020000000500000007FFFFFFFFFFFFFFFF00000003000000020000000AFFFFFFFFFFFFFFFF

---------------------------------------------------------------------------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.

Page 218: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 218218

EP306

---------------------------------------------------------------------------ENTRADA 1 : Arquivo em disco sequencial (EU)

Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número a 5 8 4 P Número b9 12 4 Z Número c13 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")

000000010000123CF0F0F1F10000000000000000000000020000124CF0F0F1F20000000000000000000000030000125CF0F0F1F30000000000000000

---------------------------------------------------------------------------SAIDA : Arquivo sequencial em disco (ELA). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número do registro 5 14 10 Z Média ponderada15 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")

00000001F0F0F0F0F0F0F0F0F4F500000000000000000002F0F0F0F0F0F0F0F0F4F600000000000000000003F0F0F0F0F0F0F0F0F4F7000000000000

---------------------------------------------------------------------------PROCESSAMENTO

Para cada registro lido em EU calcular a média ponderada (MP):MP = ( (a.7) + (b.8) + (c.9) ) / 24e gravar um registro de ELA.

Page 219: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 219219

EP307

---------------------------------------------------------------------------ENTRADA 1 : Arquivo em disco sequencial (VEMTAB)

Lay-out: Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 5 5 C Código cidade6 30 25 C Nome cidade

Exemplo:

123456789012345678901234567890 ("régua")

00003BOM JESUS DE PIRAPORA00001SAO PAULO00002SAO JOAO DO CAIUA

---------------------------------------------------------------------------ENTRADA 2 : Arquivo em disco sequencial (VEMMAIS)

Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 5 5 C Código cidade6 30 25 C Nome prefeito

Exemplo:

123456789012345678901234567890 ("régua")

00001PREFEITO DA CIDADE 0000100002ALBERTO ROMANO SCHIESARI00003QUITERIA SILVEIRA

Page 220: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 220220

---------------------------------------------------------------------------SAIDA : Relatório (VAI). Lay-out:

123456789012345678901234567890123456789012345678901234567890 ("régua")

xxxxx xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxcod nome cidade nome prefeitocid

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

00001 SAO PAULO PREFEITO DA CIDADE 0000100002 SAO JOAO DO CAIUA ALBERTO ROMANO SCHIESARI00003 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.

Page 221: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 221221

EP308

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (PAZ). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Informação qualquer5 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")

C1F200AA404040404040404040404040404040405C614EFF40404040404040404040404040404040

---------------------------------------------------------------------------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")

1100000111110010000000001010101001011100011000010100111011111111

---------------------------------------------------------------------------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'.

Page 222: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 222222

EP309

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (ROMEU). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 4 4 B Número a5 9 5 Z Número b10 12 3 P Número c13 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")

0000000AF1F2F3F4D501234C404040404040404000000011F0F0F1F9F900002D4040404040404040

---------------------------------------------------------------------------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 ZEROresultado 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)-cCalcular, 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).

Page 223: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 223223

EP310

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (TRISTAO). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 6 6 Z Data na forma DDMMAA1 2 2 Z Dia3 4 2 Z Mes5 6 2 Z Ano7 20 14 C Brancos

Exemplo:

12345678901234567890 ("régua")

280288311290121091---------------------------------------------------------------------------SAIDA : Relatório (ISOLDA). Lay-out:

123456789012345678901234567890123456789012345678901234567890 ("régua")

ddmmaa ddmmaa data fornecida data calculada

Exemplo:

123456789012345678901234567890123456789012345678901234567890 ("régua")

280288 010388311290 010191121091 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.

Page 224: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 224224

EP311

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (JOHN). Lay-out:

Posição Posição Tamanho For- DadoInicial 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")

F1C34E000102030405060708090A0B0C0D0E0F1E61506B1112131415161718191A1B1C1D1E1F2021A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3---------------------------------------------------------------------------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 . , + - / ? & $ * ( )

Page 225: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 225225

EP312

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (MICRO). Lay-out:

Posição Posição Tamanho For- DadoInicial 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")

81828384858687888940404040404040404040409192939495969798994040404040404040404040A2A3A4A5A6A7A8A9404040404040404040404040---------------------------------------------------------------------------SAIDA : Relatório (MACRO). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

xxxxxxxxxxxxxxxxxxxxdump em carater do registro de micro

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

ABCDEFGHIJKLMNOPQRSTUVWXYZ---------------------------------------------------------------------------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.

Page 226: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 226226

EP313

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (HONEY). Lay-out:

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 6 6 Z Data na forma DDMMAA7 20 14 C Brancos

Exemplo:

12345678901234567890 ("régua")

130190150291300392---------------------------------------------------------------------------SAIDA : Relatório (MOON). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

ddmmaa yyddddata gregoriana data juliana

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

130190 90013150291 91046300392 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.

Page 227: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 227227

EP314

---------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (FREE). Lay-out:

Posição Posição Tamanho For- DadoInicial 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 ***** LASTLAA B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 0 A B C D E F G H I J K L M N O P Q R S T U V W---------------------------------------------------------------------------SAIDA : Relatório (WAY). Lay-out:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

REGISTRO zzn qqnro registro quantidade de strings

Exemplo:

12345678901234567890123456789012345678901234567890123456789012 ("régua")

REGISTRO 1 11REGISTRO 2 7REGISTRO 3 30REGISTRO 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).

Page 228: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 228228

EXERCÍCIOS RESOLVIDOS

Exercício 1 : (987654)10 = (1111 0001 0010 0000 0110)2Exercício 2 : (4095)10 = (1111 1111 1111)2Exercício 3 : (7)10 = (111)2Exercício 4 : (1023)10 = (11 1111 1111)2Exercício 5 : (4096)10 = (1 0000 0000 0000)2Exercício 6 : (255)10 = (1111 1111)2Exercício 7 : (1024)10 = (100 0000 0000)2Exercício 8 : (10010001)10 = (1001 1000 1011 1101 1001 0001)2Exercício 9 : (256)10 = (1 0000 0000)2Exercício 10 : (1025)10 = (100 0000 0001)2Exercício 11 : (999888)10 = (1111 0100 0001 1101 0000)2Exercício 12 : (65432)10 = (1111 1111 1001 1000)2Exercício 13 : (987654)10 = (F1206)16Exercício 14 : (4095)10 = (FFF)16Exercício 15 : (7)10 = (7)16Exercício 16 : (1023)10 = (3FF)16Exercício 17 : (4096)10 = (1000)16Exercício 18 : (255)10 = (FF)16Exercício 19 : (1024)10 = (400)16Exercício 20 : (10010001)10 = (98BD91)16Exercício 21 : (256)10 = (100)16Exercício 22 : (1025)10 = (401)16Exercício 23 : (999888)10 = (F41D0)16Exercício 24 : (65432)10 = (FF98)16Exercício 25 : (11111000111010100100001 )2 = (7C7521)16Exercício 26 : (1000000111000111111110000011111110)2 = (2071FE0FE)16Exercício 27 : (1100)2 = (C)16Exercício 28 : (11111110001)2 = (7F1)16Exercício 29 : (1010101010101000110011000111)2 = (AAA8CC7)16Exercício 30 : (110011001100110011001)2 = (199999)16Exercício 31 : (1000000000000001)2 = (8001)16Exercício 32 : (1000000001)2 = (201)16Exercício 33 : (111111100000001111111)2 = (1FC07F)16Exercício 34 : (1)2 = (1)16Exercício 35 : (1100101011111110)2 = (CAFE)16Exercício 36 : (101011010111000111000000001111110001111)2 = (56B8E01F8F)16Exercício 37 : (CAFE)16 = (1100101011111110)2Exercício 38 : (CDF)16 = (110011011111)2Exercício 39 : (1AB4D)16 = (11010101101001101)2Exercício 40 : (15)16 = (10101)2Exercício 41 : (F)16 = (1111)2Exercício 42 : (87B54)16 = (10000111101101010100)2Exercício 43 : (1001)16 = (1000000000001)2Exercício 44 : (234)16 = (1000110100)2

Page 229: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 229229

Exercício 45 : (CAD)16 = (110010101101)2Exercício 46 : (7F7)16 = (11111110111)2Exercício 47 : (1990)16 = (1100110010000)2Exercício 48 : (33)16 = (110011)2Exercício 49 : (11)2 = (3)10Exercício 50 : (100001111111)2 = (2175)10Exercício 51 : (101010010101)2 = (2709)10Exercício 52 : (110000001111111)2 = (24703)10Exercício 53 : (11111110000011)2 = (16259)10Exercício 54 : (11110000111000)2 = (15416)10Exercício 55 : (11)2 = (3)10Exercício 56 : (111111110)2 = (510)10Exercício 57 : (1111100001111000111001101)2 = (32567757)10Exercício 58 : (1000000000000)2 = (4096)10Exercício 59 : (11111001)2 = (249)10Exercício 60 : (1000000000000001)2 = (32769)10Exercício 61 : (11)16 = (17)10Exercício 62 : (AAF45)16 = (?)10Exercício 63 : (1B567)16 = (111975)10Exercício 64 : (100)16 = (256)10Exercício 65 : (1000)16 = (4096)10Exercício 66 : (FF)16 = (255)10Exercício 67 : (FFF)16 = (4095)10Exercício 68 : (CDF)16 = (3295)10Exercício 69 : (CAFE)16 = (51966)10Exercício 70 : (FACA)16 = (64202)10Exercício 71 : (DAD0)16 = (56016)10Exercício 72 : (F1E2D3C4)16 = (4058174404)10Exercício 73 : (11001100)2 + (10101010)2 = (1 0111 0110)2Exercício 74 : (1111001111)2 + (1001111001)2 = (110 0100 1000)2Exercício 75 : (1111)2 + (1)2 = (10000)2Exercício 76 : (1111)2 + (111)2 = (10110)2Exercício 77 : (100001)2 + (11110)2 = (111111)2Exercício 78 : (1011110011)2 + (111101111)2 = (100 1110 0010)2Exercício 79 : (110011001100)2 + (101011110000)2 = (1 0111 1011 1100)2Exercício 80 : (1111100001111000)2 + (101111)2 = (1111 1000 1010 0111)2Exercício 81 : (111)2 + (1111)2 + (100)2 = (11010)2Exercício 82 : (11)2 + (111)2 + (1111)2 + (11111)2 = (111000)2Exercício 83 : (1111)2 + (1001)2 + (111)2 + (101)2 + (11)2 + (1)2 = (101000)2Exercício 84 : (111)2 + (1000)2 + (1)2 + (1100)2 = (11100)2Exercício 85 : (11001100)2 - (1010101)2 = (111 0111)2Exercício 86 : (1111001111)2 - (1111001)2 = (11 0101 0110)2Exercício 87 : (1111)2 - (1)2 = (1110)2Exercício 88 : (1111)2 - (111)2 = (1000)2Exercício 89 : (100001)2 - (11110)2 = (11)2Exercício 90 : (1011110011)2 - (111101111)2 = (1 0000 0100)2

Page 230: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 230230

Exercício 91 : (11001100)2 - (111011110000)2 = (...1111 1111 1100 1101)2Exercício 92 : (1111000)2 - (101010111)2 = (... 1111 1111 0010 0001)2Exercício 93 : (111)2 - (1111)2 = (... 1111 1111 1111 1000)2Exercício 94 : (10001)2 - (111111)2 = (... 1111 1111 1101 0010)2Exercício 95 : (0)2 - (1)2 = (... 1111 1111 1111 1111)2Exercício 96 : (0)2 - (10)2 = (... 1111 1111 1111 1110)2Exercício 97 : (F12B)16 + (321)16 = (F44C)16Exercício 98 : (1100)16 + (111)2 = (1211)16Exercício 99 : (1000F)16 + (F0001)16 = (100010)16Exercício 100 : (A9B8C7)16 + (D6E5F4)16 = (1809EBB)16Exercício 101 : (CAFE)16 + (CDF)16 = (D7DD)16Exercício 102 : (B001)16 + (FD)16 = (B0FE)16Exercício 103 : (999)16 + (111)16 = (AAA)16Exercício 104 : (123456)16 + (789ABC)16 = (19BBF12)16Exercício 105 : (FFF)16 + (EEE)16 = (1EED)16Exercício 106 : (DDD)16 + (333)16 = (1110)16Exercício 107 : (987AED)16 + (CF01)16 = (9949EE)16Exercício 108 : (FACA)16 + (CAFE)16 = (1C5C8)16Exercício 109 : (F1C5)16 - (101)16 = (F0C4)16Exercício 110 : (1AD87C)16 - (FDE9)2 = (19DA93)16Exercício 111 : (112233)16 - (44556)16 = (CDCDD)16Exercício 112 : (AABBCC)16 - (DDEEF)16 = (9CDCDD)16Exercício 113 : (F1E2D3)16 - (C4B5A6)16 = (2D2D2D)16Exercício 114 : (FF00001)16 - (10000F)16 = (FDFFFF2)16Exercício 115 : (CAFE)16 - (FACA)16 = (...FFFFD034)16Exercício 116 : (CDF)16 - (FDC)16 = (...FFFFFD03)16Exercício 117 : (10001)16 - (20001)16 = (...FFFF0000)16Exercício 118 : (10000)16 - (FFFE)16 = (2)16Exercício 119 : (0)16 - (9)16 = (...FFFFFFF7)16Exercício 120 : (0)16 - (1A)16 = (...FFFFFFE6)16Exercício 121 : (1)10 = (0000 0000 0000 0001)2 = (0001)16 = (0000 0000 0000 0000 0000 0000 0000 0001)2 = (00000001)16Exercício 122 : (-1)10 = (1111 1111 1111 1111)2 = (FFFF)16 = (1111 1111 1111 1111 1111 1111 1111 1111)2 = (FFFFFFFF)16Exercício 123 : (10)10 = (0000 0000 0000 1010)2 = (000A)16 = (0000 0000 0000 0000 0000 0000 0000 1010)2 = (0000000A)16Exercício 124 : (-10)10 = (1111 1111 1111 0110)2 = (FFF6)16 = (1111 1111 1111 1111 1111 1111 1111 0110)2 = (FFFFFFF6)16Exercício 125 : (17)10 = (0000 0000 0001 0001)2 = (0011)16 = (0000 0000 0000 0000 0000 0000 0001 0001)2 = (00000011)16Exercício 126 : (-17)10 = (1111 1111 1110 1111)2 = (FFEF)16

Page 231: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 231231

= (1111 1111 1111 1111 1111 1111 1110 1111)2 = (FFFFFFEF)16Exercício 127 : (254)10 = (0000 0000 1111 1110)2 = (00FE)16 = (0000 0000 0000 0000 0000 0000 1111 1110)2 = (000000FE)16Exercício 128 : (-254)10 = (1111 1111 0000 0010)2 = (FF02)16 = (1111 1111 1111 1111 1111 1111 0000 0010)2 = (FFFFFF02)16Exercício 129 : (100000)10 = (imposível representar em 2 bytes) = (0000 0000 0000 0001 1000 0110 1010 0000)2 = (000186A0)16Exercício 130 : (-100000)10 = (imposível representar em 2 bytes) = (1111 1111 1111 1110 0111 1001 0110 0000)2 = (FFFE7960)16Exercício 131 : (32000)10 = (0111 1101 0000 0000)2 = (7D00)16 = (0000 0000 0000 0000 0111 1101 0000 0000)2 = (00007D00)16Exercício 132 : (-32000)10 = (1000 0011 0000 0000)2 = (8300)16 = (1111 1111 1111 1111 1000 0011 0000 0000)2 = (FFFF8300)16Exercício 133 : (63000)10 = (imposível representar em 2 bytes) = (1111 1111 1111 1111 1111 0110 0001 1000 )2 = (FFFFF618)16Exercício 134 : (-63000)10 = (imposível representar em 2 bytes) = (1111 1111 1111 1111 0000 1001 1110 1000)2 = (FFFF09E8)16Exercício 135 : (1010)10 = (0000 0011 1111 0010)2 = (03F2)16 = (0000 0000 0000 0000 0000 0011 1111 0010)2 = (000003F2)16Exercício 136 : (-1010)10 = (1111 1100 0000 1110)2 = (FC0E)16 = (1111 1111 1111 1111 1111 1100 0000 1110)2 = (FFFFFC0E)16Exercício 137 : (4095)10 = (0000 1111 1111 1111)2 = (0FFF)16 = (0000 0000 0000 0000 0000 1111 1111 1111)2 = (00000FFF)16Exercício 138 : (-4095)10 = (1111 0000 0000 0001)2 = (F001)16 = (1111 1111 1111 1111 1111 0000 0000 0001)2 = (FFFFF001)16

Page 232: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 232232

Exercício 139 : (4097)10 = (0001 0000 0000 0001)2 = (1001)16 = (0000 0000 0000 0000 0001 0000 0000 0001)2 = (00001001)16Exercício 140 : (-4097)10 = (1110 1111 1111 1111)2 = (EFFF)16 = (1111 1111 1111 1111 1110 1111 1111 1111)2 = (FFFFEFFF)16Exercício 141 : (1)10 = [ 0001 1100 ] = [ 1C ]Exercício 142 : (-1)10 = [ 0001 1101 } = [ 1D ]Exercício 143 : (10)10 = [ 0000 0001 0000 1100 ] = [ 010C ]Exercício 144 : (-10)10 = [ 0000 0001 0000 1101 ] = [ 10D ]Exercício 145 : (17)10 = [ 0000 0001 0111 1100 ] = [ 017C ]Exercício 146 : (-17)10 = [ 0000 0001 0111 1101 ] = [ 017D ]Exercício 147 : (254)10 = [ 0010 0101 0100 1100 ] = [ 254C ]Exercício 148 : (-254)10 = [0010 0101 0100 1101 ] = [ 254D ]Exercício 149 : (100000)10 = [ 0000 0001 0000 0000 0000 0000 0000 1100 ] = [ 0100000C ]Exercício 150 : (100000)10 = [ 0000 0001 0000 0000 0000 0000 0000 1101 ] = [ 0100000D ]Exercício 151 : (32000)10 = [ 0011 0010 0000 0000 0000 1100 ] = [ 32000C ]Exercício 152 : (-32000)10 = [ 0011 0010 0000 0000 0000 1101 ] = [ 32000D ]Exercício 153 : (63000)10 = [ 0110 0011 0000 0000 0000 1100 ] = [ 63000C ]Exercício 154 : (-63000)10 = [ 0110 0011 0000 0000 0000 1101 ] = [ 63000D ]Exercício 155 : (1010)10 = [ 0000 0001 0000 0001 0000 1100 ] = [ 01010C ]Exercício 156 : (-1010)10 = [ 0000 0001 0000 0001 0000 1100 ] = [ 01010D ]Exercício 157 : (4095)10 = [ 0000 0100 0000 1001 0101 1100 ] = [ 04095C ]Exercício 158 : (-4095)10 = [ 0000 0100 0000 1001 0101 1101 ] = [ 04095D ]Exercício 159 : (4097)10 = [ 0000 0100 0000 1001 0111 1100 ] = [ 04097C ]Exercício 160 : (-4097)10 = [ 0000 0100 0000 1001 0111 1101 ] = [ 04097D ]Exercício 161 : (1)10 = [ 1111 0001 ] = [ F1 ]Exercício 162 : (-1)10 = [ 1101 0001 } = [ D1 ]Exercício 163 : (10)10 = [ 1111 0001 1111 0000 ] = [ F1F0 ]Exercício 164 : (-10)10 = [ 1111 0001 1101 0000 ] = [ F1D0 ]Exercício 165 : (17)10 = [ 1111 0001 1111 0111 ] = [ F1F7 ]Exercício 166 : (-17)10 = [ 1111 0001 1101 0111 ] = [ F1D7 ]Exercício 167 : (254)10 = [ 1111 0010 1111 0101 1111 0100 ] = [ F2F5F4 ]Exercício 168 : (-254)10 = [ 1111 0010 1111 0101 1101 0100 ] = [ F2F5D4 ]Exercício 169 : (100000)10 = [ 1111 0001 1111 0000 1111 0000 1111 0000 1111 0000 1111 0000 ] = [ F1F0F0F0F0F0 ]Exercício 170 : (-100000)10 = [ 1111 0001 1111 0000 1111 0000 1111 0000 1111 0000 1101 0000 ] = [ F1F0F0F0F0D0 ]Exercício 171 : (32000)10 = [ 1111 0011 1111 0010 1111 0000 1111 0000 1111 0000 ] = [ F3F2F0F0F0 ]

Page 233: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 233233

Exercício 172 : (-32000)10 = [ 1111 0011 1111 0010 1111 0000 1111 0000 1111 0000 ] = [ F3F2F0F0D0 ]Exercício 173 : (63000)10 = [ 1111 0110 1111 0011 1111 0000 1111 0000 1111 0000 ] = [ F6F3F0F0F0 ]Exercício 174 : (-63000)10 = [ 1111 0110 1111 0011 1111 0000 1111 0000 1101 0000 ] = [ F6F3F0F0D0 ]Exercício 175 : (1010)10 = [ 1111 0001 1111 0000 1111 0001 1111 0000 ] = [ F1F0F1F0 ] Exercício 176 : (-1010)10 = [ 1111 0001 1111 0000 1111 0001 1101 0000 ] = [ F1F0F1D0 ] Exercício 177 : (4095)10 = [ 1111 0100 1111 0000 1111 1001 1111 0101 ] = [ F4F0F9F5 ]Exercício 178 : (-4095)10 = [ 1111 0100 1111 0000 1111 1001 1101 0101 ] = [ F4F0F9D5 ] Exercício 179 : (4097)10 = [ 1111 0100 1111 0000 1111 1001 1111 1111 ] = [ F4F0F9F7 ]Exercício 180 : (-4097)10 = [ 1111 0100 1111 0000 1111 1001 1101 0111 ] = [ F4F0F9D7 ]Exercício 181 : “17“ = [ F1F7 ]Exercício 182 : “-17“ = [ 60F1F7 ]Exercício 183 : “AF$BD“ = [ C1C66BC2C4 ]Exercício 184 : “-AF4BD“ = [ 60C1C6F4C2C4 ]Exercício 185 : “ALBERTO“ = [ C1D3C2C5D9E3D6 ] Exercício 186 : “15-9“ = [ F1F560F9 ] Exercício 187 : “-4095“ = [ 60F4F0F9F5 ] Exercício 188 : “4095“ = [ F4F0F9F5 ] Exercício 189 : “*&$//“ = [ 5C505B6161 ] Exercício 190 : “12+3“ = [ F1F24EF3 ] Exercício 191 : “I LOVE HER“ = [ C940D3D6E5C540C8C5D9 ] Exercício 192 : “US$ 2,584.73“ = [ E4E25B40F26BF5F8F44BF7F3 ] Exercício 193 : “US$ 1 MILLION“ = [ E4E25B40F140D4C9D3D3C9D6D5 ]Exercício 194 : “PANCHO’S BAR“ = [ D7C1C5C3C8D67DE240C2C1D9 ]

Page 234: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 234234

Os exercícios 195 a 300 devem ser considerados como um programa, cujo endereço inicial é zero (X’00000000’), ou seja, a primeira área (exercíco 195) começa no endereço zero. As áreas definas por DS devem ser computadas para determinar os endereços. Assumir que o 1o statement seja USING *,9.* Endereço ConteúdoEP195: DC C'123' 0000 F1.F2.F3EP196: DC C'+123' 0003 4E.F1.F2.F3EP197: DC C'-123' 0007 60.F1.F2.F3EP198: DC C'12.3' 000B F1.F2.4B.F3EP199: DC C'1AB8' 000F F1.C1.C2.F8EP200: DC C'01101' 0013 F0.F1.F1.F0.F1EP201: DC C'A+B=C' 0018 C1.4E.C2.7E.C3EP202: DC CL4'A' 001D C1.40.40.40EP203: DC CL4'ABCDEF' 0021 C1.C2.C3.C4EP204: DC 3CL2'A' 0025 C1.40.C1.40.C1.40 EP205: DC 2CL3'A,B' 002B C1.6B.C2.C1.6B.C2EP206: DC C'ME&&YOU' 0031 D4.C5.50.E8.D6.E4EP207: DC C'''S MUSIC' 0037 7D.E2.40.D4.E4.E2.C9.C3EP208: DC C'@@OI' 003F 7C.7C.D6.C9EP209: DC CL3'*' 0043 5C.40.40EP210: DC 3C'*' 0046 5C.5C.5CEP211: DC X'123' 0049 01.23EP212: DC X'-123' *** erro *** EP213: DC X'1AB2C3' 004B 1A.B2.C3EP214: DC X'1AB2F4G3' *** erro ***EP215: DC XL3'12D' 004E 00.01.2DEP216: DC XL3'AABBCCDDEE' 0051 CC.DD.EE EP217: DC X'1,22,333,4444' 0054 01.22.03.33.44.44 EP218: DC XL2'1,22,333' 005A 00.01.00.22.03.33 EP219: DC 2X'1,22,333' 0060 01.22.03.33.01.22.03.33 EP220: DC 2XL2'1,22' 0068 00.01.00.22.00.01.00.22EP221: DC B'01010101' 0070 55EP222: DC B'1' 0071 01EP223: DC BL2'1111' 0072 00.0FEP224: DC B'1,1111111111' 0074 01.03.FFEP225: DC BL2'1,1111111111' 0077 00.01.03.FF EP226: DC 2B'1000' 007B 08.08EP227: DC 2BL2'1000' 007D 00.08.00.08 0081 00.00.00 (align) EP228: DC F'10' 0084 00.00.00.0A EP229: DC F'+10' 0088 00.00.00.0AEP230: DC F'-10' 008C FF.FF.FF.F6EP230: DC F'-15,+16' 0090 FF.FF.FF.F1.00.00.00.10EP231: DC 2F'22' 0098 00.00.00.16.00.00.00.16EP232: DC 2F'33,44' 00A0 00.00.00.21.00.00.00.2C 00.00.00.21.00.00.00.2C EP233: DC FL3'258' 00B0 00.01.02EP234: DC 2FL1'255' 00B3 FF.FF 00B5 00.00.00 (align)EP235: DC F'128000' 00B8 00.01.F4.00EP236: DC H'10' 00BC 00.0AEP237: DC H'+10' 00BE 00.0AEP238: DC H'-10' 00C0 FF.F6EP239: DC H'-15,+16' 00C2 FF.F1.00.10EP240: DC 2H'22' 00C6 00.16.00.16 EP241: DC 2H'33,44' 00CA 00.21.00.2C.00.21.00.2C EP242: DC HL3'258' 00D2 00.01.02 EP243: DC 2HL1'255' 00D5 FF.FF 00D7 00 (align)EP244: DC H'128000' 00D8 F4.00 EP245: DC P'123' 00DA 12.3C EP246: DC P'+123' 00DC 12.3C EP247: DC P'-123' 00DE 12.3DEP248: DC PL4'456' 00E0 00.00.45.6CEP249: DC PL1'789' 00E4 9C

Page 235: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 235235EP250: DC P'1,-22,333,-4444' 00E5 1C.02.2D.33.3C.04.44.4DEP251: DC PL2'1,-22,333,-4444' 00ED 00.1C.02.2D.33.3C.44.4DEP252: DC 3P'0' 00F5 0C.0C.0C EP253: DC PL3'0' 00F8 00.00.0CEP254: DC 2P'1,22,333' 00FB 1C.02.2C.33.3C.1C.02.2C.33.3CEP255: DC 2PL2'1,22,333' 0105 00.1C.02.2C.33.3C 00.1C.02.2C.33.3CEP256: DC Z'123' 0111 F1.F2.C3EP257: DC Z'+123' 0114 F1.F2.C3EP258: DC Z'-123' 0117 F1.F2.D3EP259: DC ZL4'456' 011A F0.F4.F5.C6EP260: DC ZL1'789' 011E C9EP261: DC Z'1,-22,333,-4444' 011F F1.F2.D2.F3.F3.C3.F4.F4.F4.D4EP262: DC ZL3'1,-22,333,-4444' 0129 F0.F0.C1.F0.F2.D2.F3.F3.C3 F4.F4.F4.D4EP263: DC 3Z'0' 0135 C0.C0.C0EP264: DC ZL3'0' 0138 F0.F0.F0EP265: DC 2Z'1,22,333' 013B C1.F2.C2.F3.F3.C3 C1.F2.C2.F3.F3.C3EP266: DC 2ZL3'1,22,333' 0147 F0.F0.C1.F0.F2.C2.F3.F3.C3 F0.F0.C1.F0.F2.C2.F3.F3.C3EP267: SIMBZZ DC A(0) 015C 00.00.00.00EP268: SIMBAA DC A(127) 0160 00.00.00.7FEP269: SIMBBB DC A(X'8000') 0164 00.00.80.00EP270: SIMBCC DC A(B'1111') 0168 00.00.00.0FEP271: SIMBDD DC A(C'*') 016C 00.00.00.5CEP272: SIMBEE DC A(*) 0170 00.00.01.70EP273: SIMBFF DS CL17 0174 ??.??.??.??.??.??.??.??.?? ??.??.??.??.??.??.??.?? 0185 00.00.00 (align)EP274: SIMBGG DC A(*) 0188 00.00.01.88EP275: SIMBHH DC A(SIMBGG) 018C 00.00.01.88EP276: SIMBII DC A(SIMBAA+12) 0190 00.00.01.6CEP277: SIMBJJ DC A(SIMBII-SIMBBB) 0194 00.00.00.2C EP278: SIMBKK DC AL1(*-SIMBKK) 0198 00EP279: SIMBLL DC 5AL1(*-SIMBLL) 0199 00.01.02.03.04EP280: SIMBMM DC AL2(3,5,7) 019E 00.03.00.05.00.07 EP281: SIMBNN DC A(SIMBII+5*2) 01A4 00.00.01.9A EP282: SIMBOO DC A(SIMBNN+X'80000000') 01A8 80.00.01.A4EP283: SIMBPP DC 4AL2(*-SIMBPP) 01AC 00.00.00.02.00.04 00.06EP284: SIMBQQ DC A(SIMBVV) 01B4 00.00.01.D8EP285: SIMBRR DC A(SIMBKK,SIMBJJ) 01B8 00.00.01.98 00.00.01.94 EP286: SIMBSS DC A(SIMBTT+40) 01C0 00.00.01.ECEP287: SIMBTT DC A(SIMBUU,*,80) 01C4 00.00.01.D0 00.00.01.C8 00.00.00.50 EP288: SIMBUU DC 2A(*-SIMBUU) 01D0 00.00.00.00 00.00.00.04EP289: SIMBVV DC A(C'AMO') 01D8 00.C1.D4.D6EP290: SIMBWW DC A(X'7FFFFFFF') 01DC 7F.FF.FF.FFEP291: YY1 DC Y(SIMBWW) 01E0 01.DCEP292: YY2 DC Y(10) 01E2 00.0AEP293: YY3 DC Y(L'YY2) 01E4 00.02EP294: SS1 DC S(SIMBAA) 01E6 91.60 EP295: SS2 DC S(SS1) 01E8 91.E6EP296: SS3 DC S(10) 01EA 00.0A EP297: SS4 DC S(*) 01EC 91.EC 01EE 00.00 (align)EP298: SS5 DC A(125),F'33',C'*',2H'6,18' 01F0 00.00.00.7D 00.00.00.21 5C 00 (align) 00.06.00.12

Page 236: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 236236 00.06.00.12 EP299: SS6 DC X'1,1',B'1,1',C'1,1' 0202 01.01.01.01 F1.6B.F1

EP300: * Endereço ConteúdoLAST DC 256AL1(255+LAST-*) 0209 FF.FE.FD.FC.FB.FA.F9.F8.F7.F6.F5.F4.F3.F2.F1.F0* 0219 EF.EE.ED.EC.EB.EA.E9.E8.E7.E6.E5.E4.E3.E2.E1.E0* 0229 DF.DE.DD.DC.DB.DA.D9.D8.D7.D6.D5.D4.D3.D2.D1.D0* 0239 CF.CE.CD.CC.CB.CA.C9.C8.C7.C6.C5.C4.C3.C2.C1.C0* 0249 BF.BE.BD.BC.BB.BA.B9.B8.B7.B6.B5.B4.B3.B2.B1.B0* 0259 AF.AE.AD.AC.AB.AA.A9.A8.A7.A6.A5.A4.A3.A2.A1.A0* 0269 9F.9E.9D.9C.9B.9A.99.98.97.96.95.94.93.92.91.90* 0279 8F.8E.8D.8C.8B.8A.89.88.87.86.85.84.83.82.81.80* 0289 7F.7E.7D.7C.7B.7A.79.78.77.76.75.74.73.72.71.70* 0299 6F.6E.6D.6C.6B.6A.69.68.67.66.65.64.63.62.61.60* 02A9 5F.5E.5D.5C.5B.5A.59.58.57.56.55.54.53.52.51.50* 02B9 4F.4E.4D.4C.4B.4A.49.48.47.46.45.44.43.42.41.40* 02C9 3F.3E.3D.3C.3B.3A.39.38.37.36.35.34.33.32.31.30* 02D9 2F.2E.2D.2C.2B.2A.29.28.27.26.25.24.23.22.21.20* 02E9 1F.1E.1D.1C.1B.1A.19.18.17.16.15.14.13.12.11.10* 02F9 0F.0E.0D.0C.0B.0A.09.08.07.06.05.04.03.02.01.00

Exercício 301 : Decodificar o seguinte conjunto de instruções:1ABB41278CF00A13980F334445E00CB490EC0D00FA82305448CCD28233445566----////////----////////--------////////------------////////////Supor os registradores gerais com os seguintes conteúdos:R00=00112233 R04=00000400 R08=00000800 R12=00000C00R01=00000100 R05=00000500 R09=00000900 R13=00000D00R02=00000200 R06=00000600 R10=00000A00 R14=00000E00R03=00000300 R07=00000700 R11=00000B00 R15=00000F00

1ABB - Código de operação (máquina) = 1A- Mnemônico Assembler = AR (add register)- Endereço da instrução = X’00000000’- Operandos = 1o operando = registrador 11; 2o operando = registrador 11

41278CF0 - Código de operação (máquina) = 41- Mnemônico Assembler = LA (load address)- Endereço da instrução = X’00000002’-Operandos = 1st operand = register 2; 2o operando : indexador = registrador 7

2o operando : base register = registrador 8 2o operando : deslocamento = X’CF0’ Endereço 2o operando = X’ 00000700’+X’00000800’+X’CF0’= X’00001BF0’

0A13 - Código de operação (máquina) = 0A- Mnemônico Assembler = SVC (supervisor call)- Endereço da instrução = X’00000006’- Operandos = códifo de chamada ao supervisor = X’13’ = (19)10 = open

Page 237: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 237237

980F3344 - Código de operação (máquina) = 98- Mnemônico Assembler = LM (load multiple)- Endereço da instrução = X’00000008’-Operandos = 1o operando = registrador 0;

3o operando : registrador 15 (X’F’) 2o operando : base = registrador 3 2o operando : deslocamento = X’344’ Endereço 2o operando = X’00000300’+X’344’= X’00000644’

45E00CB4 - Código de operação (máquina) = 45- Mnemônico Assembler = BAL (branch and link)- Endereço da instrução = X’0000000C’-Operandos = 1o operando = registrador 14 (X’E’); 2o operando : indexador = registrador 0 ; 2o operando : base = registrador 0; 2o operando : deslocamento = X’CB4’; Endereço 2o operando = X’CB4’= X’00000CB4’ 90EC0D00 - Código de operação (máquina) = 90- Mnemônico Assembler = STM (store multiple)- Endereço da instrução = X’00000010’-Operandos = 1o operando = registrador 14 (X’E’); 3o operando : registrador 12 (X’C’)

2o operando : base = registrador 0; 2o operando : deslocamento = X’D00’ Endereço 2o operando = X’D00’= X’00000D00’

FA82305448CC - Código de operação (máquina) = FA- Mnemônico Assembler = AP (add packed)- Endereço da instrução = X’00000014’- Tamanho 1o operando = 9 bytes; 1o operando : base = registrador 3; 1o operando : deslocamento = X’054’; Endereço 1o operando= X’00000300’+X’054’ = X’00000354’- Tamanho 2o operando = 3 bytes; 2o operando : base = registrador 4; 2o operando : deslocamento = X’8CC’; Endereço 2o operando = X’00000400’+X’8CC’ = X’00000CCC’

D28233445566 - Código de operação (máquina) = D2- Mnemônico Assembler = MVC (move character)- Endereço da instrução = X’0000001A’- Tamanho 1o operando = 131 bytes; 1o operando : base = registrador 3; 1o operando : deslocamento = X’344’; Endereço 1o operando = X’00000300’+X’344’ = X’00000644’- Tamanho 2o operando = 131 bytes; 2o operando : base = registrador 5; 2o operando : deslocamento = X566’; Endereço 2o operando = X’00000500’+X’566’ = X’00000A66’

Page 238: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 238238

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 FAREA DC CL80' 'TAB DC 256X'00' ORG TAB+C'0' DC C'0123456789ABCDEF' ORG

Page 239: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 239239

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 VOLTAACHOU LA 5,5(5) MVC RESULT,0(3,5)FIM TCHAUARG DC CL5'0'RESULT DC CL3'0' LTORG LTORGTABELA DS 1000CL8 END PRG3

Page 240: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 240240

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-1sendo 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,VINICVOLTO 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 VOLTOFASE2 S 6,=F'5' C 6,=A(TABELA) BL FIM AP VTOT,0(5,6) B FASE2FIM TCHAU*------------------------------ DEFINICAO DAS AREAS AUXILIARESVTOT DC PL8'0'VATUAL DC PL8'0'VINIC DC PL8'0'VINCR DC PL8'0'VMAX DC PL8'0' LTORG LTORGTABELA DS 5000PL5 END PRG6

Page 241: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 241241

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- DadoInicial Final (bytes) mato

1 50 50 C Informação ALFA51 70 20 C Informação BETA71 120 50 C Informação GAMA121 200 80 C Informação DELTA201 220 20 C Informação PI221 256 36 C Informação OMEGA

Lay-out de AL

Posição Posição Tamanho For- DadoInicial Final (bytes) mato

1 20 20 C Informação PI21 70 50 C Informação GAMA71 106 36 C Informação OMEGA107 156 50 C Informação ALFA157 176 20 C Informação BETA177 256 80 C Informação DELTA

SOLUÇÃO:

TR AG,AL*-----------------------------------------------------------* DEFINICAO DAS AREAS AL E AG **-----------------------------------------------------------

AL DS CL256AG DS 0CL256AG1 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)

Page 242: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 242242

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....+....0REGISTRO 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 13ABRIR EQU * OPEN (ENTRA,INPUT) ABRE ARQUIVO ENTRADA OPEN (RELAT,OUTPUT) ABRE ARQUIVO RELATORIOLEDENOVO BAL 14,LERENTRA EXECUTA ROTINA LEITURA CLI FIMENTRA,C'S' VERIFICA SE EOF

Page 243: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 243243 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 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

Page 244: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 244244 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' ' * *--------------------------------------------------------------------- * 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 :

Page 245: ASSEMBLER para Mainframes IBM - montesite.com.br · ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 33 2-4-2-1 Termos de Expressões

ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI 245245PAG. 1REG.# --------------------* CONTEUDO DO REG LIDO *------------------------- -------------------------------------------------------------------------------- 00001 REGISTRO 1 ....................................................................*00002 REGISTRO 2 ...+....2....+....3....+....4....+....5....+....6....+....7....+....000003 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 BUS00015 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. 2REG.# --------------------* 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 TREE00032 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 00035 *** ULTIMO REGISTRO !!! ***