ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
ASSEMBLER para
Mainframes IBM
Prof. Alberto Romano Schiesari (1a edição: 1974; última revisão:Julho/2009)
11
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
22
SUMÁRIO
1. Introdução.................................................................................................................................................................................................. 7
1-1 A Linguagem Assembler ..................................................................................................................................................................... 7
1-2 Revisão dos Sistemas de Numeração Binário e Hexadecimal ............................................................................................................. 7
1-2-1 Conversões ................................................................................................................................................................................... 8
1-2-1-1 Conversão de decimal para binário ....................................................................................................................................... 8
1-2-1-2 Conversão de decimal para hexadecimal ............................................................................................................................ 10
1-2-1-3 Conversão de binário para hexadecimal.............................................................................................................................. 11
1-2-1-4 Conversão de hexadecimal para binário.............................................................................................................................. 12
1-2-1-5 Conversão de binário para decimal ..................................................................................................................................... 13
1-2-1-6 Conversão de hexadecimal para decimal ............................................................................................................................ 14
1-2-2 Operações aritméticas ................................................................................................................................................................ 15
1-2-2-1 Soma em binário ................................................................................................................................................................. 15
1-2-2-2 Subtração em binário .......................................................................................................................................................... 16
1-2-2-3 Soma em hexadecimal......................................................................................................................................................... 17
1-2-2-4 Subtração em hexadecimal.................................................................................................................................................. 18
1-3. Arquitetura de Mainframes IBM ...................................................................................................................................................... 19
1-3-1 Visão Geral ................................................................................................................................................................................ 19
1-3-2 Endereçamento ........................................................................................................................................................................... 22
BASE + DESLOCAMENTO........................................................................................................................................................... 22
INDEXADOR + BASE + DESLOCAMENTO............................................................................................................................... 23
Deslocamento máximo; uso de bases............................................................................................................................................... 24
Carga de registradores base ................................................................................................................................................................. 26
1-3-3 Representação de Dados............................................................................................................................................................. 29
1-3-3-1 Formato binário de ponto fixo............................................................................................................................................. 29
1-3-3-2 Formato decimal zonado ..................................................................................................................................................... 30
1-3-3-3 Formato decimal compactado ............................................................................................................................................. 30
1-3-3-4 Formato caracter (padrão EBCDIC) ................................................................................................................................... 30
1-3-4 Representação de Instruções ...................................................................................................................................................... 31
RR - 2 bytes .................................................................................................................................................................................... 31
E - 2 bytes ...................................................................................................................................................................................... 31
QST - 4 bytes ................................................................................................................................................................................... 31
QV - 4 bytes.................................................................................................................................................................................... 31
RRE - 4 bytes................................................................................................................................................................................... 31
RS - 4 bytes..................................................................................................................................................................................... 31
RX - 4 bytes .................................................................................................................................................................................... 31
S - 4 bytes ...................................................................................................................................................................................... 31
SI - 4 bytes ...................................................................................................................................................................................... 31
VR - 4 bytes .................................................................................................................................................................................... 32
VS - 4 bytes..................................................................................................................................................................................... 32
VST - 4 bytes ................................................................................................................................................................................... 32
VV - 4 bytes.................................................................................................................................................................................... 32
RSE - 6 bytes ................................................................................................................................................................................... 32
SS - 6 bytes ..................................................................................................................................................................................... 32
SSE - 6 bytes.................................................................................................................................................................................... 32
2. Montador Assembler e Especificação de Elementos ............................................................................................................................... 37
2-1. Introdução......................................................................................................................................................................................... 37
2-1-1 O Montador Assembler .............................................................................................................................................................. 37
2-1-2 O Statement Assembler .............................................................................................................................................................. 39
2-2. Símbolo ............................................................................................................................................................................................ 39
2-3. Código de Instrução.......................................................................................................................................................................... 40
2-3-1 Instruções ao Montador.............................................................................................................................................................. 40
2-3-2 Instruções de Máquina ............................................................................................................................................................... 40
2-3-3 Macro-Instruções........................................................................................................................................................................ 40
2-4. Operandos e Comentários................................................................................................................................................................. 40
2-4-1 Operandos em Registrador ......................................................................................................................................................... 40
2-4-2 Operandos em Memória ............................................................................................................................................................. 41
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
33
2-4-2-1 Termos de Expressões......................................................................................................................................................... 41
2-4-2-2 Expressões para referência de Operandos........................................................................................................................... 42
2-5. Continuação de Statements............................................................................................................................................................... 44
2-6. Identificação e Sequência de Statements .......................................................................................................................................... 44
3. Instruções ao Montador Assembler.......................................................................................................................................................... 45
3-1. Instruções para definição de áreas .................................................................................................................................................... 45
DC (Define Constant - Definir Constante)........................................................................................................................................... 45
TABELA DE CONSTANTES......................................................................................................................................................... 46
DC tipo C......................................................................................................................................................................................... 47
DC tipo X......................................................................................................................................................................................... 47
DC tipo B......................................................................................................................................................................................... 47
DC tipo F ......................................................................................................................................................................................... 48
DC tipo H......................................................................................................................................................................................... 48
DC tipo P ......................................................................................................................................................................................... 48
DC tipo Z ......................................................................................................................................................................................... 48
DC tipo A......................................................................................................................................................................................... 49
DC tipo Y......................................................................................................................................................................................... 50
DC tipo S ......................................................................................................................................................................................... 50
DC tipo V......................................................................................................................................................................................... 50
DC tipo Q......................................................................................................................................................................................... 50
DS (Define Storage - Definir Memória) .............................................................................................................................................. 51
3-2. Literais.............................................................................................................................................................................................. 52
3-3. Outras instruções ao montador ......................................................................................................................................................... 53
CCW ou CCW0 (Channel Command Word - Palavra de Comando de Canal).................................................................................... 53
CCW1 (Channel Command Word - Palavra de Comando de Canal)................................................................................................... 54
START (Começo)................................................................................................................................................................................ 55
CSECT (Control Section - Seção de Controle).................................................................................................................................... 55
DSECT (Dummy Section - Seção Simulada)....................................................................................................................................... 56
DXD (Define External Dummy Section - Definir Dummy Section Externa)....................................................................................... 56
CXD..................................................................................................................................................................................................... 57
COM (Blank Common Control Section - Seção de Controle Branca Comum) ................................................................................... 57
LOCTR (Multiple Location Counters - Múltiplos Contadores de localização) ................................................................................... 58
AMODE (Adressing Mode - Modo de endereçamento) ...................................................................................................................... 59
RMODE (Residence Mode - Modo de residência) .............................................................................................................................. 59
ENTRY (Entrada)................................................................................................................................................................................ 60
EXTRN (External - Externo) ............................................................................................................................................................... 60
WXTRN............................................................................................................................................................................................... 60
USING (Usando) ................................................................................................................................................................................. 61
DROP (Por de lado, Deixar) ................................................................................................................................................................ 61
TITLE (Título)..................................................................................................................................................................................... 62
EJECT (Ejetar) .................................................................................................................................................................................... 62
SPACE (Espaço).................................................................................................................................................................................. 62
PRINT (Impressão).............................................................................................................................................................................. 63
ICTL (Input Control - Controle de Entrada) ........................................................................................................................................ 63
ISEQ (Input Sequence - Sequência de Entrada)................................................................................................................................... 64
PUNCH (Perfure) ................................................................................................................................................................................ 64
REPRO (Reproduza) ........................................................................................................................................................................... 64
ORG..................................................................................................................................................................................................... 65
EQU (Equate - Igualar)........................................................................................................................................................................ 65
OPSYN (Operation Code Synonim - Sinônimo para código de operação).......................................................................................... 66
PUSH (Empurrar) ................................................................................................................................................................................ 66
POP...................................................................................................................................................................................................... 66
LTORG................................................................................................................................................................................................ 66
CNOP (Conditional Nop - Nop Condicional)...................................................................................................................................... 67
COPY (Copiar) .................................................................................................................................................................................... 67
END (Fim) ........................................................................................................................................................................................... 67
4. Instruções de Máquina ............................................................................................................................................................................. 71
4-1. Instruções de movimento de memória para memória ....................................................................................................................... 73
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
44
MVC (Move Character - Movimentar Caracteres) .............................................................................................................................. 73
MVZ (Move Zones – Movimentar Zonas)........................................................................................................................................... 74
MVN (Move Numerics - Movimentar Numéricos).............................................................................................................................. 74
MVI (Move Immediate - Movimentar Imediato)................................................................................................................................. 75
MVO (Move with Offset – Movimetar com deslocamento) ................................................................................................................ 76
ZAP (Zero and Add Packed – Zerar e Somar em Compactado) .......................................................................................................... 77
MVCL (Move Long – Mover [campo] Longo) ................................................................................................................................... 78
PACK (Compactar).............................................................................................................................................................................. 79
UNPK (Unpack – descompactar)......................................................................................................................................................... 80
MVCIN (Move Inverse – Mover invertido)......................................................................................................................................... 81
4-2. Instruções aritméticas com campos compactados............................................................................................................................. 82
AP (Add Packed – Somar em compactado) ......................................................................................................................................... 82
SP (Subtract Packed – Subtrair em compactado)................................................................................................................................. 83
MP (Multiply Packed – Multiplicar em compactado).......................................................................................................................... 84
DP (Divide Packed – Dividir em compactado).................................................................................................................................... 84
SRP (Shift and Round Packed – Deslocar e arredondar compactado)................................................................................................. 85
4-3. Instruções de comparação................................................................................................................................................................. 86
CP (Compare Packed – Comparar em compactado) ............................................................................................................................ 86
CLC (Compare Logical Character – Comparar Caracteres Logicamente)........................................................................................... 86
CLI (Compare Logical Immediate - Comparar Logicamente com Operando Imediato)...................................................................... 86
CLCL (Compare Logocal Character Long – Comparar Logicamente campos longos) ....................................................................... 87
C (Compare) ........................................................................................................................................................................................ 88
CH (Compare Halfword) ..................................................................................................................................................................... 88
CL (Compare Logical – Compare Logicamente)................................................................................................................................. 89
CLM (Compare Logical Characters Under Mask - Comparar campos lógicamente, sob máscara) ..................................................... 89
CR (Compare Register – Comparar Registradores) ............................................................................................................................. 90
CLR (Compare Logical Register – Comparar Registradores Logicamente) ........................................................................................ 90
4-4. Instruções de desvio ......................................................................................................................................................................... 91
4-4-1 Introdução e mnemônicos........................................................................................................................................................... 91
4-4-2 Instruções de desvio condicional e incondicional ...................................................................................................................... 93
BC (Branch on Condition – Desviar na Condição).............................................................................................................................. 93
BCR (Branch on Condition Register – Desviar [para endereço de registrador] na Condição) ............................................................ 93
4-5. Instruções de controle de loop .......................................................................................................................................................... 94
BCT (Branch on Count – Desvie na condição [de contagem] testada) ................................................................................................ 94
BCTR (Branch on Count Register – Desvie na condição [de contagem] testada para [endereço contido em] registrador) ................ 94
BXH (Branch on Index High – Desvie se o Índice for Maior) ............................................................................................................ 95
BXLE (Branch on Index Low or Equal – Desvie se o Índice for Menor ou Igual).............................................................................. 96
4-6. Instruções de edição ......................................................................................................................................................................... 97
ED (Edit – Editar)................................................................................................................................................................................ 97
EDMK (Edit and Mark – Editar e Marcar) .......................................................................................................................................... 98
4-7. Instruções de tradução e teste de bytes ............................................................................................................................................. 99
TR (Translate – Traduzir) .................................................................................................................................................................... 99
TRT (Translate and Test – Traduzir e Testar) ................................................................................................................................... 100
4-8. Shift (deslocamento de bits) em registradores ................................................................................................................................ 101
SLL (Shift Left Logical – Deslocamento Simples Lógico à esquerda) .............................................................................................. 101
SRL (Shift Right Logical – Deslocamento Simples Lógico à direita)................................................................................................ 101
SLDL (Shift Left Double Logical – Deslocamento Duplo Lógico à esquerda) ................................................................................. 102
SRDL (Shift Right Double Logical – Deslocamento Duplo Lógico à direita)................................................................................... 102
SLA (Shift Left Algebraic – Deslocamento Simples Algébrico à esquerda) ..................................................................................... 103
SRA (Shift Right Algebraic – Deslocamento Simples Algébrico à direita) ....................................................................................... 103
SLDA (Shift Left Double Algebraic – Deslocamento Duplo Algébrico à esquerda)......................................................................... 104
SRDA (Shift Right Double Algebraic – Deslocamento Duplo Algébrico à direita) .......................................................................... 104
4-9. Instruções de álgebra booleana....................................................................................................................................................... 105
N (And – E) ....................................................................................................................................................................................... 105
O (Or – Ou)........................................................................................................................................................................................ 106
X (Exclusive Or – Ou exclusivo) ....................................................................................................................................................... 106
NR (And Register – E entre registradores) ........................................................................................................................................ 107
OR (Or Register – Ou entre registradores) ........................................................................................................................................ 107
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
55
XR (Exclusive or Register – Ou exclusivo entre registradores)......................................................................................................... 107
NI (And Immediate – E [com operando] imediato) ........................................................................................................................... 108
OI (Or Immediate – Ou [com operando] imediato) ........................................................................................................................... 108
XI (Exclusive Or Immediate – Ou exclusivo [com operando] imediato)........................................................................................... 108
NC (And Character – E entre campos com caracteres)...................................................................................................................... 109
OC (Or Character – Ou entre campos com caracteres) ...................................................................................................................... 109
XC (Exclusive Or Character – Ou exclusivo entre campos com caracteres) ..................................................................................... 109
4-10. Instruções de carga e desvio ......................................................................................................................................................... 110
BALR (Branch and Link Register – Desviar e ligar via registrador) ................................................................................................. 110
BAL (Branch and Link – Desviar e ligar).......................................................................................................................................... 111
BAS (Branch and Save – Desviar e salvar) ....................................................................................................................................... 112
BASR (Branch and Save Register – Desviar para endereço em registrador e salvar)........................................................................ 113
BASSM (Branch and Save and Set Mode – Desviar, salvar e posicionar modo) .............................................................................. 114
BSM (Branch and Set Mode – Desviar e posicionar modo) .............................................................................................................. 115
4-11. Instruções de movimento de dados de registrador para memória ................................................................................................. 116
ST (Store – Armazenar)..................................................................................................................................................................... 116
STH (Store Halfword – Armazenar halfword)................................................................................................................................... 116
STM (Store Multiple – Armazenar Múltiplos) .................................................................................................................................. 117
STC (Store Character – Armazenar um byte) .................................................................................................................................... 117
STCM (Store Characters under Mask – Armazenar caracteres por máscara) .................................................................................... 118
CVD (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................................................................................. 119
L (Load – Carregar) ........................................................................................................................................................................... 119
LH (Load Halfword – Carregar halfword)......................................................................................................................................... 119
LM (Load Multiple – Carregar Múltiplos)......................................................................................................................................... 120
IC (Insert Character – Inserir Byte) ................................................................................................................................................... 120
ICM (Insert Character under Mask – Inserir bytes sob máscara)....................................................................................................... 121
CVB (Convert to binary – Converter [de compactado] para binário) ................................................................................................ 121
4-13. Instruções de movimento de dados de registrador para registrador .............................................................................................. 122
LR (Load Register – Carregar registrador) ........................................................................................................................................ 122
LPR (Load Positive Register – Carregar registrador positivo) .......................................................................................................... 122
LNR (Load Negative Register – Carregar registrador negativo) ....................................................................................................... 123
LCR (Load Complement Register – Carregar o complemento do registrador).................................................................................. 123
LTR (Load and test Register – Carregar e testar registrador) ............................................................................................................ 124
4-14. Operações aritméticas entre registradores .................................................................................................................................... 125
AR (Add Register – Somar registradores) ......................................................................................................................................... 125
SR (Subtract Register – Subtrair registradores) ................................................................................................................................. 125
MR (Multiply Register – Multiplicar registradores) .......................................................................................................................... 126
DR (Divide Register – Dividir registradores) .................................................................................................................................... 126
ALR (Add Logical Register – Somar registradores logicamente)...................................................................................................... 127
SLR (Subtract Logical Register – Subtrair registradores logicamente) ............................................................................................. 127
4-15. Operações aritméticas entre registradores e campos de memória................................................................................................. 128
A (Add – Somar)................................................................................................................................................................................ 128
S (Subtract – Subtrair) ....................................................................................................................................................................... 128
M (Multiply – Multiplicar) ................................................................................................................................................................ 129
D (Divide – Dividir) .......................................................................................................................................................................... 129
AH (Add Halfword – Somar hafword) .............................................................................................................................................. 130
SH (Subtract Halfword – Subtrair hafword) ...................................................................................................................................... 130
MH (Multiply Halfword – Multiplicar hafword) ............................................................................................................................... 131
AL (Add Logical – Somar logicamente)............................................................................................................................................ 131
SL (Subtract Logical – Subtrair logicamente).................................................................................................................................... 132
4-16. Outras instruções .......................................................................................................................................................................... 133
LA (Load Address – Carregar Endereço) .......................................................................................................................................... 133
TM (Test Under Mask – Testar com máscara) .................................................................................................................................. 133
EX (Execute) ..................................................................................................................................................................................... 134
SVC (Supervisor Call – Chamada ao Supervisor) ............................................................................................................................. 134
MC (Monitor Call – Chamada do monitor) ....................................................................................................................................... 135
SPM (Set Program Mask – estabelecer máscara de programa).......................................................................................................... 135
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
66
IPM (Insert Program Mask – inserir máscara de programa) .............................................................................................................. 135
STCK (Store clock – armazenar clock) ............................................................................................................................................. 136
TS (Test and Set – Testar e posicionar) ............................................................................................................................................. 136
CS (Compare and Swap – Comparar e Trocar) ................................................................................................................................. 136
CDS (Compare Double and Swap – Comparar double e Trocar) ...................................................................................................... 137
5. Macro-Instruções ................................................................................................................................................................................... 138
5-1. Introdução....................................................................................................................................................................................... 138
5-2. Símbolos variáveis e de sequência.................................................................................................................................................. 139
5-3. Expressões ...................................................................................................................................................................................... 142
5-4. Variáveis de montagem : declaração e atribuição de conteúdo ...................................................................................................... 143
5-5. ANOP, MNOTE e AREAD............................................................................................................................................................ 145
ANOP.............................................................................................................................................................................................. 145
MNOTE ........................................................................................................................................................................................... 145
5-6. MHELP .......................................................................................................................................................................................... 147
5-7. Desvios - AGO, ACTR E AIF ........................................................................................................................................................148
5-8. Parâmetros posicionais e keyword.................................................................................................................................................. 149
5-9. Funcionamento das macros - exemplos .......................................................................................................................................... 151
5-9-1 Macro sem símbolo e sem parâmetros...................................................................................................................................... 151
5-9-2 Macro com símbolo fixo e sem parâmetros.............................................................................................................................. 151
5-9-3 Macro com símbolo variável e sem parâmetros ....................................................................................................................... 152
5-9-4 Macro com símbolo variável e com 1 parâmetro posicional .................................................................................................... 152
5-9-5 Macro com símbolo variável e com 2 parâmetros posicionais ................................................................................................. 153
5-9-6 Macro com símbolo variável e com 1 parâmetro keyword (sem default)................................................................................. 153
5-9-7 Macro com símbolo variável e com 1 parâmetro keyword (com default) ................................................................................ 154
5-9-8 Macro com símbolo variável e com 2 parâmetros keyword (sem default) ............................................................................... 154
5-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 ............................................................................................................................................................................. 156
APÊNDICE A - Instruções (ordem alfabética de mnemônico e ordem código de instrução)................................................................ 157
APÊNDICE B - Tabelas de potências de 2 e 16 .................................................................................................................................... 168
APÊNDICE C - Caracteres EBCDIC .................................................................................................................................................... 170
APÊNDICE D - Caracteres ASCII ........................................................................................................................................................ 171
APÊNDICE E – Caracteres de controle de impressão........................................................................................................................... 172
APÊNDICE F - Interrupções por erro de programa............................................................................................................................... 173
APÊNDICE G - Truques úteis a programas Assembler......................................................................................................................... 174
APÊNDICE H – Exemplos de macro instruções MVS.......................................................................................................................... 176
APÊNDICE I - Exemplo de programa MVS ......................................................................................................................................... 177
APÊNDICE J – Exemplos de macro Instruções VSE............................................................................................................................ 178
APÊNDICE K - Exemplo de programa VSE......................................................................................................................................... 179
APÊNDICE L – Exemplo de macro instruções VM .............................................................................................................................. 180
APÊNDICE M - Exemplo de programa VM ......................................................................................................................................... 181
APÊNDICE N - Macro instruções XEGUEI e TCHAU........................................................................................................................ 182
APÊNDICE O - Exemplo de Subrotina ................................................................................................................................................. 186
APÊNDICE P - Exemplo 2 de subrotina ............................................................................................................................................... 187
APÊNDICE Q - Montagem de programa de demonstração 1................................................................................................................ 189
APÊNDICE R - Montagem de programa de demonstração 2 ................................................................................................................ 202
EXERCíCIOS PROPOSTOS .................................................................................................................................................................... 213
EXERCÍCIOS RESOLVIDOS .................................................................................................................................................................. 228
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
0
1
2
3
4
5
6
7
HEXA
0
1
2
3
4
5
6
7
BINÁRIO
DECIMAL
HEXA
0000
0001
0010
0011
0100
0101
0110
0111
8
9
10
11
12
13
14
15
8
9
A
B
C
D
E
F
BINÁRIO
1000
1001
1010
1011
1100
1101
1110
1111
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
77 / 2
38 / 2
19 / 2
9 / 2
4 / 2
2 / 2
1 / 2
=
=
=
=
=
=
=
=
cociente
cociente
cociente
cociente
cociente
cociente
cociente
cociente
77
38
19
9
4
2
1
0
resto
resto
resto
resto
resto
resto
resto
resto
0
1
0
1
1
0
0
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 :
01100101
somando 1 :
+
1
-------01100110
completando à esquerda com 1’s para completar 16 bites (half-word):
1111111101100110
Portanto:
(-154)10 = (1111111101100110)2 = (FF66)16
(7)10 =
(111)2
111 invertido :
somando 1 :
+
000
1
-------001
completando à esquerda com 1’s para completar 16 bites (half-word):
1111111111111001
Portanto:
(-7)10 = (1111111111111001)2 = (FFF9)16
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
99
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
10
10
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
77160 / 16
4822 / 16
301 / 16
13 / 16
=
=
=
=
=
cociente 77160 resto 7
cociente 4822 resto 8
cociente
301 resto 6
cociente
18 resto 13
cociente
0 resto 13
Portanto, DD687 é o número hexadecimal equivalente ao decimal 1234567.
EXERCÍCIOS PROPOSTOS
Converter de decimal para hexadecimal:
EP013: 987654
EP014: 4095
EP015: 7
EP016: 1023
EP017: 4096
EP018: 255
EP019: 1024
EP020: 10010001
EP021: 256
EP022: 1025
EP023: 999888
EP024: 65432
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
11
11
1-2-1-3 Conversão de binário para hexadecimal
Basta separar o número binário em grupos de 4 algarismos, da direita para a esquerda (completando com zeros à
esquerda, o último grupo à esquerda, se for necessário para completar 4 algarismos), e, em seguida, colocar, para
cada grupo de 4 algarismos binários, o algarismo hexadecimal equivalente, conforme a tabela básica de
equivalência colocada na introdução do tópico 1-2.
Exemplo: determinar o número hexadecimal equivalente ao binário 11001101010001010000011.
0110 0110 1010 0010 1000 0011
6
6
A
2
8
3
Portanto, 66A283 é o número hexadecimal equivalente ao binário 11001101010001010000011.
EXERCÍCIOS PROPOSTOS
Converter de binário para hexadecimal:
EP025: 11111000111010100100001
EP026: 1000000111000111111110000011111110
EP027: 1100
EP028: 11111110001
EP029: 1010101010101000110011000111
EP030: 110011001100110011001
EP031: 1000000000000001
EP032: 1000000001
EP033: 111111100000001111111
EP034: 1
EP035: 1100101011111110
EP036: 101011010111000111000000001111110001111
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
12
12
1-2-1-4 Conversão de hexadecimal para binário
Basta transcrever, para cada algarismo hexadecimal, o grupo de 4 algarismos binários a ele correspondente,
conforme a tabela do item anterior.
Para o último grupo à esquerda pode-se deixar de transcrever os zeros binários à esquerda não significativos.
Exemplo: determinar o número binário correspondente ao hexa 1AB4C.
1
A
B
4
C
0001 1010 1011 0100 1100
Portanto, o número binário 11010101101001100 é equivalente ao hexadecimal 1AB4C.
EXERCÍCIOS PROPOSTOS
Converter de hexadecimal para binário:
EP037: CAFE
EP038: CDF
EP039: 1AB4D
EP040: 15
EP041: F
EP042: 87B54
EP043: 1001
EP044: 234
EP045: CAD
EP046: 7F7
EP047: 1990
EP048: 33
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
1
1
0
0
1
1
0
1
.
.
.
.
.
.
.
.
.
(2**8)
(2**7)
(2**6)
(2**5)
(2**4)
(2**3)
(2**2)
(2**1)
(2**0)
=
=
=
=
=
=
=
=
=
1
1
1
0
0
1
1
0
1
.
.
.
.
.
.
.
.
.
256
128
64
32
16
8
4
2
1
=
=
=
=
=
=
=
=
=
256
128
64
0
0
8
4
0
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
13
13
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
A
C
5
F
.
.
.
.
.
(16**4)
(16**3)
(16**2)
(16**1)
(16**0)
= 1 . (16**4) = 1 .
= 10 . (16**3) = 10 .
= 12 . (16**2) = 12 .
= 5 . (16**1) = 5 .
= 15 . (16**0) = 15 .
65536
4096
256
16
1
=
=
=
=
=
65536
40960
3072
80
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
14
14
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
1
1
+
+
+
+
0
1
0
1
=
=
=
=
0
1
1
0 e vai 1 para a "casa" da esquerda
Exemplos:
11001001
+
1010
----------11010011
1001111011
+
110110
------------1010110001
111
+
1
-----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
15
15
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
1
1
0
+
-
0
0
1
1
=
=
=
=
0
1
0
tira-se 1 da "casa" da esquerda (que fica valendo 1
a menos), e que vem para a "casa" presente valendo 2
Exemplos:
11001001
1010
----------10111111
1001111011
110110
------------1001000101
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
100
1
-----11
100
1000
--------...1111100
16
16
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
17
17
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
+ 123
------1BD7
CF55
+ 102D
------DF82
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
A2BC89
+
F00F
--------A3AC98
FFF
+
4
------1003
F0F0
+ CCCC
-------1BDBC
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
18
18
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
- 123
------1991
CF55
- 102D
------BF28
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
A2BC89
F00F
--------A1CC7A
FFF
4
------FFB
0
2
-------...FFE
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
19
19
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
20
20
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 externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12
= 0 = Basic Control Mode
BIT 13
= máscara de machine-check
BIT 14
= 1 = estado de wait
BIT 15
= 1 = estado de programa problema
BYTES 2-3 (BITS 16-31) = Interruption code
BYTE 4 BITS 32-33 = ILC = Instruction length code
BITS 34-35 = CC = Condition code
BITS 36-39 = máscara de programa
BYTES 5-7 (BITS 40-63) = Instruction address
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 externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12
= 1 = Extended Control Mode
BIT 13
= máscara de machine-check
BIT 14
= 1 = estado de wait
BIT 15
= 1 = estado de programa problema
BYTE 2 BIT 16
= 0
BIT 17
= 0
BITS 18-19 = CC = condition code
BITS 20-23 = máscara de programa
BIT 20 = máscara de fixed-point overflow
BIT 21 = máscara de decimal-overflow
BIT 22 = máscara de exponent underflow
BIT 23 = máscara de significância
BYTE 3 (BITS 24-31) = 00000000
BYTE 4 (BITS 32-39) = 00000000
BYTES 5-7 (BITS 40-63) = Instruction address
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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 externa
BYTE 1 BITS 8-11 = chave de proteção
BIT 12
= 1
BIT 13
= máscara de machine-check
BIT 14
= 1 = estado de wait
BIT 15
= 1 = estado de programa problema
BYTE 2 BIT 16
= address space mode (junto c/ bit 5)
BIT 17
= 0
BITS 18-19 = CC = condition code
BITS 20-23 = máscara de programa
BIT 20 = máscara de fixed-point overflow
BIT 21 = máscara de decimal-overflow
BIT 22 = máscara de exponent underflow
BIT 23 = máscara de significância
BYTE 3 (BITS 24-31) = 00000000
BYTE 4 BIT 32
= 0 = 24 bit addressing
= 1 = 31 bit addressing
BYTE 4/5/6/7 (BITS 33-63) = Instruction address
LAYOUT DA PSW ATUAL (ESA MODE)
BYTE 0 BIT
BIT
BIT
BIT
BIT
BIT
BYTE 1 BITS
BIT
BIT
BIT
BIT
BYTE 2 BIT
0
1
2-4
5
6
7
8-11
12
13
14
15
16-17
= 0
= máscara de program-event recording
= 000
= translation mode
= máscara de I/O
= máscara externa
= chave de proteção
= 1
= máscara de machine-check
= 1 = estado de wait
= 1 = estado de programa problema
= address space control
= 00 = Primary space mode (bit 5 = 1)
= 01 = Access-register mode (bit 5 = 1)
= 10 = Secondary space mode (bit 5 = 1)
= 11 = Home space mode (bit 5 = 1)
BITS 18-19 = CC = condition code
BITS 20-23 = máscara de programa
BIT 20 = máscara de fixed-point overflow
BIT 21 = máscara de decimal-overflow
BIT 22 = máscara de exponent underflow
BIT 23 = máscara de significância
BYTE 3 (BITS 24-31) = 00000000
BYTE 4 BIT 32
= 0 = 24 bit addressing
= 1 = 31 bit addressing
BYTE 4/5/6/7 (BITS 33-63) = Instruction address
21
21
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
22
22
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
Deslocamento
=
C5A
Endereço do campo de memória = 0AC082
dependendo da arquitetura utilizada.
ou
610AB428
C5A
610AC082
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
23
23
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
Conteúdo do registrador Base
Deslocamento
Endereço do campo de memória
= C0A800
= 002800
=
F84
= C0DF84
ou
ou
ou
30C0A800
10002800
F84
40C0DF84
dependendo da arquitetura utilizada.
Exemplo de uso: endereçar itens de tabela.
AC
AM
BA
SC
SP
TO
MT
MS
PB
RS
CE
RN
PA
DF
GO
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’
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
24
24
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;
Deslocamento
Endereço de memória
conteúdo = 00334400
=
123
= 00000123
5) Registrador base = R9;
Deslocamento
Endereço de memória
conteúdo = 00334400
=
123
= 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 campo
Base+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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
25
25
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 EDMK
2 = Evitar se necessário ou usar para work; usado pela instrução TRT de edição
3 = Usar como base
4 = Usar como base
5 = Usar como base
6 = Usar como base
7 = Usar como base
8 = Usar como work
9 = Usar como work
10 = Usar como work
11 = Usar como work
12 = Usar como work
13 = Evitar; usado como base de área de salvação de saveareas nos processos de interface entre softwares
14 = Evitar; usado em geral como “guardador” do endereço de volta do programa chamador
15 = 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 R7
Isso 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
0K
4K
8K
12K
16K
R3 com x’00000000’
R4 com x’00001000’
R5 com x’00002000’
R6 com x’00003000’
R7 com x’00004000’
20K
0K
4K
8K
12K
16K
R3 com x’00005000’
R4 com x’00006000’
R5 com x’00007000’
R6 com x’00008000’
R7 com x’00009000’
20K
0K
4K
8K
12K
16K
20K
R3 com x’0000A000’
R4 com x’0000B000’
R5 com x’0000C000’
R6 com x’0000D000’
R7 com x’0000E000’
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
26
26
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
USING
LR
0
*,3
3,15
START
USING
BALR
BCTR
BCTR
0
*,3
3,0
3,0
3,0
*
*
CARREGA PRIMEIRO E UNICO REG BASE
REG 3 FICA COM O ENDERECO DO ENTRY POINT
CARREGAMENTO COM LR MUITO USADO EM MVS
ou
PROG
*
*
CARREGA ENDERECO SEGUINTE AO BALR
SUBTRAI 1
SUBTRAI MAIS 1
NESTE PONTO, O REG 3 ESTAH OK;
ELE TEM O ENDERECO DO ENTRY POINT
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
Carga de 2 registradores base
Pode fazer assim?
PROG
START
USING
LR
*
LA
0
*,3,4
3,15
CARREGA PRIMEIRO REG BASE
REG 3 FICA COM O ENDERECO DO ENTRY POINT
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
USING
LR
0
*,3,4
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
USING
LR
0
*,3,4
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
USING
LR
0
*,3,4
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
USING
LR
*
LA
LA
*
*
0
*,3,4
3,15
CARREGA PRIMEIRO REG BASE
REG 3 FICA COM O ENDERECO DO ENTRY POINT
4,2048
CARREGA NRO 2048 NO REG 4
4,2048(3,4) SOMA 2048 + ENTRY POINT
FICOU COM ENTRY POINT + 4096
OU ENTRY POINT + X’001000’
27
27
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
*
PRONTO ! R4 CARREGADO OK TAMBEM !
Deste jeitinho...
PROG
*
*
*
*
START
USING
LR
0
*,3,4
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
USING
LR
*
LA
0
*,3,4
3,15
CARREGA PRIMEIRO REG BASE
REG 3 FICA COM O ENDERECO DO ENTRY POINT
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
USING
LR
*
L
0
*,3,4
3,15
CARREGA PRIMEIRO REG BASE
REG 3 FICA COM O ENDERECO DO ENTRY POINT
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.
28
28
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
29
29
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
+12
-12
Representação em Half-word
00.0C
FF.F4
Representação em Full-word
00.00.00.0C
FF.FF.FF.F4
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
30
30
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
+12
-12
Representação em decimal zonado
F1.C2
F1.D2
ou
F1.F2
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
+12
-12
Representação em decimal compactado
01.2C
01.2D
ou
01.2F
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 EBCDIC
ALBERTO
C1.C3.D2.C5.D9.E4.D6
Alberto
C1.93.82.85.99.A4.96
AMO 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 ASCII
ALBERTO
41.4C.42.45.52.54.4F
Alberto
41.6C.62.65.72.74.6F
AMO ELA
41.4D.4F.20.45.4C.41
+12
2B.31.32
-12
2D.31.32
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
31
31
1-3-4 Representação de Instruções
Existem os seguintes tipos de instruções:
RR - 2 bytes
CO
R1
R2
= 1 byte (código de operação)
= 1/2 byte (registrador primeiro operando)
= 1/2 byte (registrador segundo operando)
E - 2 bytes
ambos para o código de operação
QST - 4 bytes
CO
QR3
RT2
VR1
RS2
=
=
=
=
=
2 bytes (código de operação)
1/2 byte (registrador geral -GR- ou pto flut -FR- terceiro oper)
1/2 byte (registrador "stride of vector" do segundo operando)
1/2 byte (registrador de vetor primeiro operando)
1/2 byte (registrador end início de vetor do segundo operando)
QV - 4 bytes
CO
QR3
NU
VR1
VR2
=
=
=
=
=
2 bytes (código de operação)
1/2 byte (registrador geral -GR- ou pto flut -FR- terceiro oper)
1/2 byte (não usado)
1/2 byte (registrador de vetor primeiro operando)
1/2 byte (registrador de vetor segundo operando)
RRE - 4 bytes
CO
NU
R1
R2
=
=
=
=
2 bytes (código de operação)
1 byte (não usado)
1/2 byte (registrador primeiro operando)
1/2 byte (registrador segundo operando)
RS - 4 bytes
CO
R1
R3
B2
D2
=
=
=
=
=
1 byte (código de operação)
1/2 byte (registrador primeiro operando)
1/2 byte (registrador terceiro operando)
1/2 byte (registrador base do segundo operando)
1 byte e 1/2 (deslocamento do segundo operando)
RX - 4 bytes
CO
R1
X2
B2
D2
=
=
=
=
=
1 byte (código de operação)
1/2 byte (registrador primeiro operando)
1/2 byte (registrador indexador do segundo operando)
1/2 byte (registrador base do segundo operando)
1 byte e 1/2 (deslocamento do segundo operando)
S - 4 bytes
CO
B2
D2
= 2 bytes (código de operação)
= 1/2 byte (registrador base do segundo operando)
= 1 byte e 1/2 (deslocamento do segundo operando)
SI - 4 bytes
CO
I2
B1
D1
=
=
=
=
1 byte (código de operação)
1 byte (operando imediato - segundo operando)
1/2 byte (registrador base do primeiro operando)
1 byte e 1/2 (deslocamento do primeiro operando)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
VR - 4 bytes
CO
QR3
NU
VR1
GR2
=
=
=
=
=
2 bytes (código de operação)
1/2 byte (registrador geral -GR- ou pto flut -FR- terceiro oper)
1/2 byte (não usado)
1/2 byte (registrador de vetor primeiro operando)
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
VR3
RT2
VR1
RS2
=
=
=
=
=
2 bytes (código de operação)
1/2 byte (registrador de vetor terceiro operando)
1/2 byte (registrador "stride of vector" do segundo operando)
1/2 byte (registrador de vetor primeiro operando)
1/2 byte (registrador end início de vetor do segundo operando)
VV - 4 bytes
CO
VR3
NU
VR1
VR2
=
=
=
=
=
2 bytes (Código de operação)
1/2 byte (registrador de vetor terceiro operando)
1/2 byte (não usado)
1/2 byte (registrador de vetor primeiro operando)
1/2 byte (registrador de vetor segundo operando)
RSE - 6 bytes
CO
R3
NU
VR1
NU
B2
D2
=
=
=
=
=
=
=
2 bytes (código de operação)
1/2 byte (registrador terceiro operando)
1/2 byte (não usado)
1/2 byte (registrador de vetor primeiro operando)
1/2 byte (não usado)
1/2 byte (registrador base do segundo operando)
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
B1
D1
B2
D2
=
=
=
=
=
32
32
2 bytes (código de operação)
1/2 byte (registrador base do primeiro operando)
1 byte e meio (deslocamento do primeiro operando)
1/2 byte (registrador base do segundo operando)
1 byte e meio (deslocamento do segundo operando)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
33
33
EXERCÍCIOS PROPOSTOS
Representar, no formato binário de ponto fixo, em half-words e full-words, os seguintes números (especificados em
decimal):
EP121: 1
EP122: -1
EP123: 10
EP124: -10
EP125: 17
EP126: -17
EP127: 254
EP128: -254
EP129: 100000
EP130: -100000
EP131: 32000
EP132: -32000
EP133: 63000
EP134: -63000
EP135: 1010
EP136: -1010
EP137: 4095
EP138: -4095
EP139: 4097
EP140: -4097
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
34
34
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
35
35
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
36
36
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
37
37
2. Montador Assembler e Especificação de Elementos
2-1. Introdução
2-1-1 O Montador Assembler
É o programa encarregado de transformar as instruções de linguagem fonte (simbólica) para linguagem objeto. O
programa objeto será posteriormente tratado pelo linkeditor para torná-lo executável.
Uma das diferenças básicas entre um montador e um compilador é que o montador, para cada instrução simbólica
gera uma única instrução de máquina, ao passo que um compilador pode gerar de uma a n instruções de
máquina.
Numa primeira fase, o montador Assembler lê todos os statements fonte, expandindo as macro-instruções e os
COPY's, e, além disso, identificando todos os comandos ao montador e instruções de máquina; ele consegue, para
cada um deles que gera algum byte, identificar quantos bytes devem ser gerados, e, em alguns casos, já colocando o
conteúdo necessário do programa objeto.
À medida que vai alocando os bytes, o montador Assembler vai incrementando um contador denominado
LOCATION COUNTER, que reflete a quantidade de bytes gastos (alocados) até um determinado instante, isto é, o
tamanho do programa até esse instante.
Ao mesmo tempo, cada símbolo encontrado vai formando a TABELA DE SÍMBOLOS, de tal forma que fique
completa ao fim da primeira fase.
A tabela de símbolos contém, entre outras informações: o símbolo, seu endereço, seu atributo de tamanho e seu
atributo de tipo (se é uma instrução, o atributo de tipo é I, se é um campo compactado, o atributo de tipo é P, se for
uma full-word, é F, e assim por diante).
Na segunda fase, de posse da tabela de símbolos completa, ele "varre" o código objeto gerado, completando as
informações que tinham ficado faltando, como por exemplo os endereços na forma base + deslocamento.
Para efeito de exemplificação, vejamos o seguinte fluxo, referente ao sistema operacional MVS:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
fonte
objeto
SYSIN
SYSPUNCH
macros/
copys
SYSLIB
asmF=IFOX00
listagem
asmH=IEV90
SYSPRINT
work
objeto
SYSUT1
SYSGO
objeto
SYSUT1
SYSLIN
statements
de controle
SYSIN
IEWL
outros
objetos
SYSPRINT
executável
SYSLMOD
SYSLIB
executável
(de uma
LINKLIB)
listagem
LOADER
memória
38
38
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
39
39
2-1-2 O Statement Assembler
Ele é utilizado para a codificação das instruções de um programa em Assembler.
Normalmente (pode ser diferente - veja o comando ICTL) um statement Assembler é dividido em campos, cada um
com uma função. São os seguintes os campos:
a) Posições 1 a 8: Símbolo
b) Posições 10 a 14: Código da Instrução
c) Posições 16 a 71: Operandos e Comentários
d) Posição
72: Posição de Continuação
e) Posições 73 a 80: Identificação e Sequência
COMPLETA
MVC
Símbolo
Instrução
ou
Comando
ARIMP,=CL133'b'
1o operando
2o operando
LIMPAR ARIMP
Comentários
Operandos
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
40
40
2-3. Código de Instrução
Especifica a instrução. Pode-se especificar um dos 3 tipos:
2-3-1 Instruções ao Montador
São dados para o montador Assembler, a fim de conduzir a montagem de acordo com o necessário. Com poucas
exceções, elas não dão origem a nenhuma instrução em linguagem de máquina. São os seguintes os Comandos ao
Montador Assembler:
a) Definição de áreas : DC, DS, CCW, CCW0, CCW1
b) Seccionamento de um Programa e Ligação: START, CSECT, DSECT, DXD
CXD, COM, ENTRY, EXTRN, WXTRN
c) Controle de Registradores Base: USING, DROP
d) Controle da listagem: TITLE, EJECT, SPACE, PRINT
e) Controle de programa : ICTL, ISEQ, PUNCH, REPRO, ORG, EQU, OPSYN, PUSH
POP, LTORG, CNOP, COPY, END, LOCTR, AMODE, RMODE
f) Definição de macro-instrução: AREAD, MACRO, MEXIT, MEND
g) Montagem condicional: ACTR, AGO, AIF, ANOP, GBLA, GBLB, GBLC
LCLA, LCLB, LCLC, MHELP, MNOTE, SETA, SETB, SETC
2-3-2 Instruções de Máquina
Para cada código de operação válido no primeiro byte de uma instrução de máquina, existe um código Assembler
correspondente. Verifique nos APÊNDICES A e B a relação de todas as instruções de máquina.
2-3-3 Macro-Instruções
São códigos que farão com que o montador Assembler dê origem a diversas instruções (de máquina ou ao
montador). Para que ele saiba o que gerar, ele consulta a Biblioteca de Macros (em VSE é a SOURCE
STATEMENT LIBRARY; em MVS é, em geral, a SYS1.MACLIB). As macro-instruções variam de um sistema
operacional para outro.
2-4. Operandos e Comentários
Os operandos informam onde se localizam os dados a serem processados. Deve-se especificar um operando após o
outro, separando-os através de uma vírgula, sem espaços em branco. Terminada a especificação dos operandos,
deve haver pelo menos um espaço em branco; o que vier em seguida, até a posição 71, será considerado
comentário, isto é, servirá somente para, aparecendo na listagem dos statements-fonte fornecida pelo montador,
explicar o que foi feito na instrução. Por exemplo:
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
41
41
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 programa
CODIGO
CERTO
BALR
USING
BAL
CLC
BNE
AP
BAL
.
.
.
.
DS
DC
.
3,0
*,3
14,ROTLE
CODIGO,=C'1'
ERRADO
CERTO,=P'1'
14,IMPRIME
CL1
PL3'0'
Tamanho de cada
instrução ou área
(em bytes)
2
0
4
6
4
6
4
.
.
Por ex. 382 bytes
.
1
3
.
Conteúdo do
Location
Counter
ANTES
000000
000002
000002
000006
00000C
000010
000016
00001A
...
Conteúdo do
Location
Counter
DEPOIS
000002
000002
000006
00000C
000010
000016
00001A
...
...
...
000198
000199
00019C
000198
000199
00019C
...
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
42
42
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
MVI
BYTE,C'&&'
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
R2
R3
B1
B2
D1
D2
X2
I2
L
L1
L2
CO
=
=
=
=
=
=
=
=
=
=
=
=
=
Registrador primeiro operando
Registrador segundo operando
Registrador terceiro operando
Registrador Base do primeiro operando
Registrador Base do segundo operando
Deslocamento do primeiro operando
Deslocamento do segundo operando
Registrador Indexador do segundo operando
Operando Imediato (segundo operando)
Tamanho do primeiro e do segundo operandos
Tamanho do primeiro operando
Tamanho do segundo operando
Código de Operação
Existem três maneiras de especificarmos um operando de memória:
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
43
43
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:
a3. Instruções SI:
CO
R1,R3,D2(B2)
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
LA
LA
LM
MVI
MVC
AP
7,382(3,12)
7,382(3)
7,382(,12)
1,12,35(14)
0(5),X'80'
0(2,7),5(11)
4(8,12),0(2,3)
RX
RX
RX
RS
SI
SS
SS
(L)
(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
LA
LM
MVI
MVI
MVC
MVC
AP
AP
SP
7,TABELA
7,TABELA-30
1,13,SAVE+4
ARIMP+82,C'*'
BYTE,C'*'
ARIMP+5(6),ARCOMP
ARIMP+5(6),ARCOMP+2
TOTAL,=P'1'
VALOR,ARLEIT+5(2)
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
44
44
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
CLC
CLC
ARIMP,=CL133' '
BYTE,=C' '
=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 RESPECTIVOS DEPENDENTES'
ENTRADA
DCB
DSORG=PS,
DDNAME=DDENTRA,
EODAD=FIM,
MACRF=(GM)
ORGANIZACAO
NOME DO DD
FIM DE ARQUIVO
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
45
45
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
X
B
F
H
E
D
L
P
Z
A
Y
S
V
Q
W
(Caracter)
(Hexadecimal)
(Binário)
(Full-Word)
(Half-Word)
(Full-Word - Ponto Flutuante)
(Double-Word - Ponto Flutuante)
(Duas Double-Words - Ponto Flutuante)
(Compactado)
(Zonado)
(Address - Endereço - 4 bytes)
(Address - Endereço - 2 bytes)
(Endereço em Base + Deslocamento)
(Endereço Externo)
(Símbolo que dá nome a DXD ou DSECT)
(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'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
46
46
Exemplos:
[nome]
SEPARAT1
*
DC
DC
[ad]tipo[at]ci
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
Tamanho
assumido
Alinhamento
Tamanhos
Válidos
C
X
B
F
H
P
Z
D
A
Y
S
suficiente
suficiente
suficiente
4 bytes
2 bytes
suficiente
suficiente
8 bytes
4 bytes
2 bytes
2 bytes
byte
byte
byte
FullWord
HalfWord
Byte
Byte
DoubWord
FullWord
HalfWord
HalfWord
1 a 256
1 a 256
1 a 256
1a8
1a8
1 a 16
1 a 16
1a8
1a4
1a2
2
Constantes
por
operando
uma
várias
várias
várias
várias
várias
várias
várias
várias
várias
várias
Sentido
preenchimento
E->D
D->E
D->E
D->E
D->E
D->E
D->E
-xE->D
E->D
-x-
Completa
com
Trunca
à
Caracteres
Válidos
brancos
X’0’
B’0’
(1)
(1)
X’0’
C’0’
-xB’0’
B’0’
-x-
D
E
E
E
E
E
E
-xE
E
-x-
qualquer
0aF
0e1
+-0a9
+-0a9
+-0a9
+-0a9
+-0a9
expressão
expressão
expressão
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
Cada
carater
ocupa
1 byte
½ byte
1 bit
(2) (4)
(3) (4)
½ byte (5)
1 byte
-x-x-x-x-
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
47
47
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
DC
DC
DC
DC
DC
DC
DC
DC
DC
1CL1'*'
2CL1'*'
CL1'*'
CL2'*'
2CL2'*'
C'ABC'
CL1'ABC'
C'A&&B'
C'ZE''S'
C''''
5C
5C5C
5C
5C40
5C405C40
C1C2C3
C1
C150C2
E5C57DE2
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
DC
DC
DC
DC
DC
1XL1'0B'
3X'5C'
XL3'5C'
XL2'AB0C14'
X'1A2'
X'00A,B,5A8'
0B
5C5C5C
00005C
0C14
01A2
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
DC
DC
DC
DC
DC
BL1'0'
BL2'010001001'
B'0101'
BL2'1'
2B'1'
B'1,00101,001'
00
0089
05
0001
0101
010501
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
48
48
DC tipo F
O número desejado deve ser colocado em decimal. O montador irá converte-lo para binário e colocá-lo na FullWord. 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
DC
DC
DC
F'138'
F'+138'
F'-138'
F'4,392'
0000008A
0000008A
FFFFFF76
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
DC
DC
DC
DC
DC
DC
DC
P'122'
P'10'
P'-345,45,21.6,7'
P'0'
P'+66'
PL3'1'
PL2'43556'
3P'1'
122C
010C
345D045C216C7C
0C
066C
00001C
556C
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
DC
DC
DC
DC
DC
Z'122'
Z'-345,45'
Z'+66'
ZL3'1'
ZL2'43556'
3Z'1'
F1F2C2
F3F4D5F4C5
F6C6
F0F0C1
F5C6
C1C1C1
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
49
49
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
DC
DC
DC
DC
DC
DC
CAMPO
A(TABELA)
A(TABELA-50)
A(*)
A(259)
3A(*-CAMPO)
A(TCABC+28*52)
A(FIM-COMECO)
00000103
00000000.00000004.00000008
Os endereços relocáveis são ajustados (relocados) pelo Linkeditor e pelo Loader; veja um exemplo:
Programa fonte (rotina
VALIDAR; supor que endereço
de VALIDS seja X’00001BC0’)
...
VVV
...
...
...
VALIDS
...
DC
A(VALIDS)
DC
C’AEIOUaeiou’
Programa objeto a ser chamado
(supor tamanho = 4K = X’1000’)
...
00001BC0
...
...
...
C1C5C9D6E481858996A4
...
Programa chamador: vai de
X’0000’ a X’9FFF’
Programa objeto chamador (supor
tamanho = 40K = X’A000’)
...
...
...
CALL VALIDAR
...
...
...
...
...
Programa chamador: vai de
X’0000’ a X’9FFF’
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 chamado ficou em
X’A000’ (o seu zero é o endereço
X’A000’): vai de X’A000’ a X’AFFF’
...
0000BBC0
...
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
50
50
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
DC
DC
DC
DC
DC
Y(TABELA)
Y(TABELA-50)
Y(*)
Y(259)
Y(TCABC+28*52)
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
DC
DC
DC
S(TABELA)
S(TABELA-50)
S(*)
S(TCABC+28*52)
DC tipo V
Se o tamanho for especificado, não será efetuado o alinhamento. Esta constante é usada para reservar memória para
o endereço de um símbolo externo. A Full-Word será reservada com zeros binários, sendo que o endereço será
colocado quando da linkedição do programa.
DC
V(ROTINA)
DC tipo Q
Esta constante é usada para reservar memória para o deslocamento numa área de memória de uma DSECT externa.
O deslocamento é colocado na constante durante a linkedição do programa. O símbolo especificado no conteúdo
inicial deve ter sido previamente definido como símbolo de um DXD ou DSECT. Exemplo:
DC
Q(DUMMYEXT)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
51
51
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
DS
DS
DS
CL3
XL4
PL4'0'
3CL8
O comando DS admite atributo de duplicação zero (0). Ex:
ARLEIT
CODIGO
DTEM
NOME
CIDADE
DS
DS
DS
DS
DS
0CL80
CL10
CL8
CL50
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
A1PART1
A1PART2
A1PART3
A1PART4
A1PART5
A1PART6
A1PART7
A1PART8
*
AREA2
A2PART1
A2PART2
A2PART3
A2PART4
*
AREA3
A3PART1
A3PART2
A3PART3
A3PART4
A3PART5
A3PART6
A3PART7
DS
DS
DS
DS
DS
DS
DS
DS
DS
0CL80
CL10
CL10
CL10
CL10
CL10
CL10
CL10
CL10
ORG
DS
DS
DS
DS
DS
, VOLTA PARA MESMO ENDEREÇO DE AREA1
0CL80
CL20
CL20
CL20
CL20
ORG
DS
DS
DS
DS
DS
DS
DS
DS
, VOLTA PARA MESMO ENDEREÇO DE AREA1
0CL80
CL5
CL5
CL20
CL30
CL3
CL4
CL13
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
52
52
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
MVC
CLC
AP
CLC
CP
CLC
VALOR,=P'0'
ARIMP,=CL133'b'
ARLEIT+5(2),=C'DB'
TOTLIDOS,=P'1'
=C'DB',ARLEIT+5
CONTLIN,=P'66'
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
53
53
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 autodefinido.
Ex:
CCW1
CCW
X'02',ARLEIT,X'48',80
O primeiro operando dará o conteúdo do Byte 0 da CCW.
O segundo operando dará o conteúdo dos Bytes 1 a 3 da CCW.
O terceiro operando dará o conteúdo do Byte 4 da CCW. O byte 5 será sempre preenchido com zeros.
O quarto operando dará o conteúdo dos Bytes 6 e 7 da CCW.
O formato da CCW é o seguinte:
Byte 0 = Código de comando (COMMAND CODE)
Bytes 1, 2 e 3 = Endereço do buffer (DATA ADDRESS) ou da primeira IDAW
Byte 4 = Flags
Bit 32: 0 - Não haverá DATA CHAIN
1 - Haverá DATA CHAIN
Bit 33: 0 - Não haverá COMMAND CHAIN.
1 - Haverá COMMAND CHAIN
Bit 34: 0 - Erro de tamanho deve ser indicado
1 - A condição acima não deve ser indicada.
Bit 35: 0 - Haverá transferência de dados
1 - Não haverá transferência de dados
Bit 36: 0 - Não haverá interrupção intermediária
1 - Haverá interrupção intermediária
Bit 37: 0 - Data address normal
1 - Data address tem endereço da primeira IDAW
Bit 38: 0 - Execução normal da CCW
1 - Suspende antes da execução desta CCW
Bit 39: não usado; deve ser 0.
Byte 5 = não usado
Bytes 6 e 7 = Tamanho (quantidade de bytes a transferir)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
a
b
c
d
-
CCW1
a,b,c,d
sendo:
Command Code
Data Address
FLAGS
Tamanho
Exemplo:
CCW1
CCW1
X'02',ARLEIT,X'48',80
O formato da CCW1 é o seguinte:
Byte 0 = Código de comando (COMMAND CODE)
Byte 1 = Flags
Bit 8 : 0 - Não haverá DATA CHAIN
1 - Haverá DATA CHAIN
Bit 9 : 0 - Não haverá COMMAND CHAIN.
1 - Haverá COMMAND CHAIN
Bit 10: 0 - Erro de tamanho deve ser indicado
1 - A condição acima não deve ser indicada.
Bit 11: 0 - Haverá transferência de dados
1 - Não haverá transferência de dados
Bit 12: 0 - Não haverá interrupção intermediária
1 - Haverá interrupção intermediária
Bit 13: 0 - Data address normal
1 - Data address tem endereço da primeira IDAW
Bit 14: 0 - Execução normal da CCW
1 - Suspende antes da execução desta CCW
Bit 15: não usado; deve ser 0
Bytes 2 e 3 = Tamanho (quantidade de bytes a transferir)
Bytes 4, 5, 6 e 7 = Endereço do buffer (DATA ADDRESS) ou da primeira IDAW
(obs: bit 32=0)
54
54
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
55
55
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
START
X'305'
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
B
C
A
C
CSECT
.
.
CSECT
.
.
CSECT
.
.
CSECT
.
.
CSECT
.
END
1
2
3
4
5
CSECT
CSECT
CSECT
A
B
C
=
=
=
1
2
3
+
4
+
5
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
56
56
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
DSN1
A
B
C
D
CSN1
START
.
.
DSECT
DS
DS
DS
DS
CSECT
.
.
END
CL2
CL20
CL10
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
DESLOC
DXD
.
.
DC
5F
Q(CONST)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
57
57
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
A
B
START
.
.
COM
DS
DS
.
.
END
0
CL3
CL4
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
58
58
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
PGM1A
PGM1A
PGM1A
PGM1A
PGM1B
PGM1B
PGM1B
PGM1C
PGM1C
PGM1C
PGM1C
PGM1D
PGM1D
PGM1D
PGM1E
PGM1E
PGM1E
PGM1E
PGM1F
PGM1F
PGM1F
PGM1G
PGM1G
PGM1
X
AREA1
AREA2
PGM1
Y
TAB1
TAB2
PGM1
X
AREA11
AREA12
PGM1
OBJETO GERADO
CSECT
.
.
.
LOCTR
DS
DS
LOCTR
.
.
.
LOCTR
DS
DS
LOCTR
.
.
.
LOCTR
DC
DC
LOCTR
LTORG
END
CL80
CL4
PGM1A
PGM1C
PGM1E
PGM1G
PGM1B
PGM1F
PGM1D
(loc.
(loc.
(loc.
(loc.
(loc.
(loc.
(loc.
counter
counter
counter
counter
counter
counter
counter
PGM1)
PGM1)
PGM1)
PGM1)
X)
X)
Y)
CL10000
CL20000
C'*'
F'0'
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
59
59
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 é:
n podendo ser 24 ou 31 ou ANY.
[símbolo]
AMODE
n
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
nenhum
AMODE 24
AMODE 31
AMODE ANY
RMODE 24
RMODE ANY
Assumido
AMODE 24
RMODE 24
RMODE 24
RMODE 24
AMODE 24
AMODE 31
e
RMODE 24
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 é:
n podendo ser 24 ou ANY.
[símbolo]
RMODE
n
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
nenhum
AMODE 24
AMODE 31
AMODE ANY
RMODE 24
RMODE ANY
Assumido
AMODE 24
RMODE 24
RMODE 24
RMODE 24
AMODE 24
AMODE 31
e
RMODE 24
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
60
60
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
ROTINA
START
.
.
EQU
.
.
ENTRY
END
0
PROG2
*
CONST
ROTINA
START
.
.
DC
.
.
EXTRN
END
0
A(ROTINA)
ROTINA
WXTRN
Este comando é análogo ao EXTRN, com as seguintes diferenças:
- com o comando EXTRN, o Linkage Editor faz uma pesquisa automática nas bibliotecas para achar o módulo que
contém os símbolos especificados como operandos no comando EXTRN.
- com o comando WXTRN não é feita essa pesquisa automática. O Linkage Editor somente resolverá as referências
feitas através do comando WXTRN se os símbolos especificados nele estão definidos:
-- num módulo que é linkeditado e carregado junto com o programa que tem o comando WXTRN ou
-- num módulo trazido de uma biblioteca devido à presença de um comando EXTRN em outro módulo
linkeditado e carregado junto com o programa que tem o comando WXTRN.
Seu formato é o seguinte:
WXTRN
símbolo[,símbolo ....... ]
Ex:
WXTRN
MOD
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
61
61
USING (Usando)
O comando USING informa ao montador:
A) Qual é (ou quais são) o(s) registrador(es) base do programa (através do segundo operando em diante)
B) Qual o conteúdo do(s) registrador(es) base (através do primeiro operando).
O seu formato é o seguinte:
USING
x,R1[,R2,R3 .......R16]
Sendo x uma expressão que indica ao montador o conteúdo do primeiro registrador base especificado (R1). Para o
segundo registrador base, se especificado, será assumido conteúdo igual a V+4096. Para o terceiro, será assumido
V+8192, e assim por diante. Ex:
USING
*,3,8
Neste exemplo, os registradores base serão o 3 (que deverá ter o endereço contido no Location Counter) e o 8 (que
deverá ter o endereço contido no Location Counter + 4096).
Observar que o comando USING apenas avisa o montador qual deverá ser o conteúdo do registrador base quando o
programa for executado. Cabe ao programador providenciar a carga do registrador base (em geral via instrução
BALR).
Observar também que, no caso de DSECT's, o comando USING deve especificar como primeiro operando o nome
que foi dado à DSECT.
DROP (Por de lado, Deixar)
Este comando tem por função indicar ao montador que um (ou mais) registrador que anteriormente havia sido
especificado como base (através de um comando USING), não deve mais ser base. O seu formato é o seguinte:
DROP
[R1[,R2,R3 ..........R16]]
Sendo que R1 .........R16 é a relação dos registradores que não devem mais ser base. Ex:
DROP
3,8
Se não for especificado nenhum operando, todos os registradores base serão desassinalados.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
62
62
TITLE (Título)
O comando TITLE especifica qual o cabeçalho que deve ser colocado pelo montador Assembler na listagem do
programa-fonte que ele fornece. O seu formato é o seguinte:
[símbolo]
TITLE
a
Símbolo --- em VSE pode ter de 1 a 4 caracteres. Do primeiro comando TITLE que tiver o programa, o montador
Assembler pegará o símbolo e o colocará em todos os statements do programa-objeto, nas posições 73 a 76,
identificando-o, portanto.
a -- conjunto de 1 ate 100 caracteres colocados entre apóstrofes. Quando o caracter que se desejar colocar no
cabeçalho for um apóstrofe (') ou um E comercial (&), então deve-se colocá-lo duas vezes.
Ex:
P001
TITLE
'EMISSAO NOTAS FISCAIS'
A cada comando TITLE que for colocado, o montador Assembler providenciará um salto para outra folha na
listagem que ele faz dos statements-fonte, imprimindo, a partir dessa hora, o novo cabeçalho especificado.
EJECT (Ejetar)
O comando EJECT causa um salto para a folha seguinte, na hora em que ele for detectado, na listagem dos
statements-fonte que o montador Assembler fornece. O seu formato é o seguinte:
EJECT
Este comando não deve ter símbolo nem operandos.
SPACE (Espaço)
O comando SPACE, quando detectado pelo montador Assembler, faz com que o montador, na listagem que ele
fornece, deixe tantas linhas em branco quantas forem especificadas no operando do SPACE. O seu formato é:
SPACE
n
Sendo que n é um número decimal que indica quantas linhas devem ser deixadas em branco. Ex:
SPACE
3
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
63
63
PRINT (Impressão)
O comando PRINT é utilizado para controlar a listagem fornecida pelo montador. O seu formato é o seguinte:
PRINT
opções
Sendo que as opções são palavras colocadas uma após a outra, separadas por vírgulas, que indicam ao montador o
que deve ou não ser listado. As palavras válidas são as seguintes:
ON
- A listagem é fornecida
OFF
- A listagem não é fornecida
GEN
- As instruções geradas por macro-instruções devem ser listadas
NOGEN
- As instruções geradas por macro-instruções não devem ser listadas
DATA
- As áreas definidas terão todo o seu conteúdo listado
NODATA
- As áreas definidas terão somente os 8 primeiros Bytes seus listados
Ex:
PRINT
OFF,DATA
Enquanto não for colocado um comando PRINT no programa, será assumido 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 16
O comando ICTL, se usado, deve ser o primeiro statement do programa-fonte (só pode haver um ICTL num
programa), e a sua função é modificar a estrutura explicada acima. O seu formato pode ser um dos 3 seguintes:
ICTL
A
ou
ICTL
A,B
ou
ICTL
A,B,C
Sendo:
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
64
64
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
Neste caso, o statement teria:
pos
pos
pos
pos
pos
'
1
3
9
11
14
a
a
a
a
a
CATALR
2
8
10
13
80
:
:
:
:
:
MOD'
brancos
CATALR
brancos
MOD
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:
CATALR
REPRO
MOD
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
65
65
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
.
.
.
0AB84C
0AB94C
0AB93C
0AB946
.
Location Counter
APÓS o comando
.
.
.
0AB94C
0AB93C
0AB946
0AB94C
.
.
TABNUM
.
.
.
DC
ORG
DC
ORG
.
256X'FF'
TABNUM+240
10X'00'
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
INST
OFF
ON
PAGOU
EQU
EQU
EQU
EQU
EQU
5
*
X'00'
X'FF'
X'80'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
66
66
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
MVC
OPSYN
OPSYN
MVC
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
67
67
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,b
Sendo:
a - Pode ser 0, 2, 4 ou 6. Indica em qual Byte da Full-Word ou da Double-Word deve ser posicionado o Location
Counter.
b - Pode ser 4 ou 8. Indica se o campo deve ser uma Full-Word ou Double-Word.
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
0,4
Ex:
2,8
2,4
CNOP
4,8
0,4
6,8
2,4
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
68
68
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:
EP196:
EP197:
EP198:
EP199:
EP200:
EP201:
EP202:
EP203:
EP204:
EP205:
EP206:
EP207:
EP208:
EP209:
EP210:
EP211:
EP212:
EP213:
EP214:
EP215:
EP216:
EP217:
EP218:
EP219:
EP220:
EP221:
EP222:
EP223:
EP224:
EP225:
EP226:
EP227:
EP228:
EP229:
EP230:
EP230:
EP231:
EP232:
EP233:
EP234:
EP235:
EP236:
EP237:
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
C'123'
C'+123'
C'-123'
C'12.3'
C'1AB8'
C'01101'
C'A+B=C'
CL4'A'
CL4'ABCDEF'
3CL2'A'
2CL3'A,B'
C'ME&&YOU'
C'''S MUSIC'
C'@@OI'
CL3'*'
3C'*'
X'123'
X'-123'
X'1AB2C3'
X'1AB2F4G3'
XL3'12D'
XL3'AABBCCDDEE'
X'1,22,333,4444'
XL2'1,22,333'
2X'1,22,333'
2XL2'1,22'
B'01010101'
B'1'
BL2'1111'
B'1,1111111111'
BL2'1,1111111111'
2B'1000'
2BL2'1000'
F'10'
F'+10'
F'-10'
F'-15,+16'
2F'22'
2F'33,44'
FL3'258'
2FL1'255'
F'128000'
H'10'
H'+10'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
EP238:
EP239:
EP240:
EP241:
EP242:
EP243:
EP244:
EP245:
EP246:
EP247:
EP248:
EP249:
EP250:
EP251:
EP252:
EP253:
EP254:
EP255:
EP256:
EP257:
EP258:
EP259:
EP260:
EP261:
EP262:
EP263:
EP264:
EP265:
EP266:
EP267:
EP268:
EP269:
EP270:
EP271:
EP272:
EP273:
EP274:
EP275:
EP276:
EP277:
EP278:
EP279:
EP280:
EP281:
EP282:
EP283:
EP284:
EP285:
EP286:
EP287:
EP288:
EP289:
EP290:
SIMBZZ
SIMBAA
SIMBBB
SIMBCC
SIMBDD
SIMBEE
SIMBFF
SIMBGG
SIMBHH
SIMBII
SIMBJJ
SIMBKK
SIMBLL
SIMBMM
SIMBNN
SIMBOO
SIMBPP
SIMBQQ
SIMBRR
SIMBSS
SIMBTT
SIMBUU
SIMBVV
SIMBWW
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DS
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
H'-10'
H'-15,+16'
2H'22'
2H'33,44'
HL3'258'
2HL1'255'
H'128000'
P'123'
P'+123'
P'-123'
PL4'456'
PL1'789'
P'1,-22,333,-4444'
PL2'1,-22,333,-4444'
3P'0'
PL3'0'
2P'1,22,333'
2PL2'1,22,333'
Z'123'
Z'+123'
Z'-123'
ZL4'456'
ZL1'789'
Z'1,-22,333,-4444'
ZL3'1,-22,333,-4444'
3Z'0'
ZL3'0'
2Z'1,22,333'
2ZL3'1,22,333'
A(0)
A(127)
A(X'8000')
A(B'1111')
A(C'*')
A(*)
CL17
A(*)
A(SIMBGG)
A(SIMBAA+12)
A(SIMBII-SIMBBB)
AL1(*-SIMBKK)
5AL1(*-SIMBLL)
AL2(3,5,7)
A(SIMBII+5*2)
A(SIMBNN+X'80000000')
4AL2(*-SIMBPP)
A(SIMBVV)
A(SIMBKK,SIMBJJ)
A(SIMBTT+40)
A(SIMBUU,*,80)
2A(*-SIMBUU)
A(C'AMO')
A(X'7FFFFFFF')
69
69
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
EP291:
EP292:
EP293:
EP294:
EP295:
EP296:
EP297:
EP298:
EP299:
EP300:
YY1
YY2
YY3
SS1
SS2
SS3
SS4
SS5
SS6
LAST
DC Y(SIMBWW)
DC Y(10)
DC Y(L'YY2)
DC S(SIMBAA)
DC S(SS1)
DC S(10)
DC S(*)
DC A(125),F'33',C'*',2H'6,18'
DC X'1,1',B'1,1',C'1,1'
DC 256AL1(255+LAST-*)
70
70
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
71
71
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
72
72
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'.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
73
73
4-1. Instruções de movimento de memória para memória
MVC (Move Character - Movimentar Caracteres)
Código de máquina
D2 (Instrução SS - L)
Condition code
Não é alterado
Interrupções Possíveis 0004,0005
A instrução MVC move um campo de memória para outro campo de memória, byte a byte, da esquerda para a
direita. Ex:
MVC
CPOA,CPOB
Antes
Depois
CPOB
C1.C2.C3
C1.C2.C3
CPOA
C4.C5.C6
C1.C2.C3
O campo emissor é o segundo operando. 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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
MVZ (Move Zones – Movimentar Zonas)
Código de máquina
D3 (Instrução SS – L)
Condition code
Não é alterado
Interrupções Possíveis 0004,0005
A instrução MVZ é análoga à MVC, com a diferença de que ela move somente a parte de zona dos bytes. Ex:
MVZ
CPOB
CPOA
Antes
12.34.56
78.9A.BC
CPOA,CPOB
Depois
12.34.56
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 é alterado
Interrupções Possíveis 0004,0005
A instrução MVN é análoga à MVC, com a diferença de que ela move somente a parte numérica dos bytes. Ex:
MVN
CPOB
CPOA
Antes
12.34.56
78.9A.BC
CPOA,CPOB
Depois
12.34.56
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
74
74
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
75
75
MVI (Move Immediate - Movimentar Imediato)
Código de máquina
92 (Instrução SI)
Condition code
não é alterado
Interrupções Possíveis 0004,0005
A instrução MVI movimenta um byte de memória (o 2. byte da instrução - o operando imediato) para outro byte de
memória. O 2º operando é o campo emissor (operando imediato) e o 1º operando é o campo receptor.
O operando imediato pode ser especificado somente através de um termo auto-definido. Ex:
MVI
MVI
MVI
MVI
operando Imediato
CPOA
MVI
MVI
CPOA,C'*'
CPOA,X'5C'
CPOA,B'01011100'
CPOA,92
Antes
5C
12
ARIMP+72,C'/'
0(4),X'80'
Depois
5C
5C
ou
ou
ou
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
76
76
MVO (Move with Offset – Movimetar com deslocamento)
Código de máquina
F1 (Instrução SS – L1 e L2)
Condition code
Não é alterado
Interrupções Possíveis 0004,0005
A instrução MVO move o campo especificado no 2ºoperando para o campo especificado no 1º operando da direita
para a esquerda, da seguinte forma:
A parte numérica do último byte à direita do 1º operando permanece inalterada. A parte numérica do último byte à
direita do 2º operando é colocada na parte de zona do último byte à direita do 1º operando; e assim por diante.
Se o 1º operando (campo receptor) não for suficientemente grande para receber todo o 2º operando (campo
emissor) os meios-bytes à esquerda serão truncados.
Se o 1º operando for maior que o suficiente para conter o 2º operando, a instrução preencherá com 0's à esquerda.
Ex:
MVO
CPOA,CPOB
1º Caso
2º Caso
3º Caso
Antes
Depois
Antes
Depois
CPOA
CPOA
78.9A
45.6A
CPOB
CPOB
12.34.56
12.34.56
CPOA
CPOA
4A.5C.B9.FC
00.0A.B7.2C
CPOB
CPOB
AB.72
AB.72
CPOA
CPOA
00.00.00.0C
00.01.20.0C
CPOB
CPOB
00.00.12.00
00.00.12.00
Outros exemplos:
MVO
MVO
MVO
MVO
ARCALC(5),ARCALC(4)
0(4,7),ARCALC
AREA,2(5,8)
2(7,13),19(5,15)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
77
77
ZAP (Zero and Add Packed – Zerar e Somar em Compactado)
Código de máquina
F8 (Instrução SS – L1 e L2)
Condition code
00 Se o campo movido = 0
01 Se o campo movido < 0
10 Se o campo movido > 0
11 Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A
A instrução ZAP movimenta o campo especificado no 2º operando (campo emissor) para o campo especificado no
1º operando (campo receptor). O emissor permanece inalterado, e deve estar obrigatoriamente em compactado.
A movimentação é feita da direita para a esquerda.
Se o emissor for maior (em tamanho) que o receptor, os algarismos em excesso à esquerda serão truncados.
Se o emissor for menor (em tamanho) que o receptor, o ZAP preencherá à esquerda com zeros. Ex:
ZAP
1º Caso
2º Caso
CPOA,CPOB
Antes
Depois
CPOA
CPOA
B4.F8
34.5C
CPOB
CPOB
12.34.5C
12.34.5C
CPOA
CPOB
07.B8.92
00.12.3C
CPOA
CPOB
12.3C
12.3C
Outros exemplos:
ZAP
ZAP
ZAP
TOTAL,=P'0'
TOTAL,TOTAL
CONTLIN,=P'2'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
78
78
MVCL (Move Long – Mover [campo] Longo)
Código de máquina
0E (Instrução RR)
Condition code
00
Tamanhos do 1. e 2º operandos são iguais
01
Tamanho do 1º operando é menor
10
Tamanho do 1º operando é maior
11
Movimento não efetuado
Interrupções Possíveis 0004,0005,0006
Tanto o 1º como o 2º operandos especificados devem ser registradores pares, os quais indicam (cada um deles)
conjuntos de registradores par-ímpar, os quais chamaremos de R1 e R1+1 e R2 e R2+1.
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
PACK (Compactar)
Código de máquina
Condition code
Interrupções Possíveis
79
79
F2 (Instrução SS – L1 e L2)
não é alterado
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
1ºcaso
2ºcaso
3ºcaso
Antes
Depois
CPOA
CPOA
00.B7.2A
01.23.4F
CPOB
CPOB
F1.F2.F3.F4
F1.F2.F3.F4
CPOA
CPOA
C9.4A
23.4F
CPOB
CPOB
F1.F2.F3.F4
F1.F2.F3.F4
CPOA
CPOA
19.B7.CA
00.09.BD
CPOB
CPOB
F9.DB
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
PACK
PACK
PACK
PACK
PACK
VALOR,ARLEIT+5(9)
QUANTO+2(7),2(8,5)
0(10,2),AREA
2(5,7),2(3,8)
DOUBLE,DOUBLE
BYTE,BYTE
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
80
80
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
1ºcaso
2ºcaso
3ºcaso
CPOA,CPOB
Antes
Depois
CPOA
CPOA
00.00.00.00.B7.2A
F0.F1.F2.F3.F4.C5
CPOB
CPOB
12.34.5C
12.34.5C
CPOA
CPOA
00.00.B7.2A
F2.F3.F4.5F
CPOB
CPOB
12.34.5F
12.34.5F
CPOA
CPOA
19.B7.CA
FA.F3.BD
CPOB
CPOB
A3.DB
A3.DB
Outros exemplos:
UNPK
UNPK
UNPK
UNPK
ARGRAV+5(12),TOTLIQ
AX2,2(3,7)
17(10,8),T4B2F+3(5)
2(13,10),0(5,3)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
81
81
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
4-2. Instruções aritméticas com campos compactados
AP (Add Packed – Somar em compactado)
Código de máquina
FA (Instrução SS – L1 e L2)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A
A instrução AP efetua a soma entre dois campos de memória que estejam no formato compactado.
O resultado da soma é colocado no campo especificado no 1º operando.
O campo especificado no 2º operando fica inalterado. Ex:
AP
CPOA,CPOB
CPOB
CPOA
Antes
12.3C
12.34.5C
Depois
12.3C
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
82
82
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
SP (Subtract Packed – Subtrair em compactado)
Código de máquina
FB (Instrução SS – L1 e L2)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A
A instrução SP efetua a subtração entre dois campos de memória que estejam no formato compactado.
O campo especificado no 1º operando tem o minuendo;
O campo especificado no 2º operando tem o subtraendo.
Após efetuada a subtração, o resto é colocado no campo especificado no 1º operando.
O campo especificado no 2º operando permanece inalterado.
Ex.:
SP
CPOA,CPOB
Antes
98.7C
12.34.5C
CPOB
CPOA
Outros exemplos:
SP
SP
SP
SP
Depois
98.7C
11.35.8C
VALOR,VALOR
TOTAL,=P'1'
AE+5(8),AE+15(3)
0(2,7),4(1,8)
83
83
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
84
84
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
CPOB
CPOA
Antes
99.9C
00.09.99.9C
Outros exemplos:
MP
MP
CPOA,CPOB
Depois
99.9C
99.89.00.1C
PERCENT,=P'20'
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
Depois
CPOB
00.2C
00.2C
CPOA
00.00.45.67.8C
22.83.9C.00.0C
Outros exemplos:
DP
VALOR,=P'5'
DP
2(4,7),0(1,1)
DP
PERCT,0(2,7)
DP
4(12,5),1(3,7)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
85
85
SRP (Shift and Round Packed – Deslocar e arredondar compactado)
Código de máquina
F0 (Instrução SS)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0001,0004,0005,0007,000A
O seu formato de máquina é o seguinte:
CO
L1
I3
E1
E2
=
=
=
=
=
1 byte (código de operação)
1/2 byte (tamanho do primeiro operando - 1)
1/2 byte (operando imediato (terceiro operando)
2 bytes (B1D1D1D1 endereço base+deslocamento do primeiro operando)
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
Antes
Depois
SRP
TOTAL
Antes
Depois
TOTAL,61,5
12.34.56.78.9C
00.01.23.45.7C
TOTAL,3,0
12.34.56.78.9C
45.67.89.00.0C
Estas regras facilitam a especificação do sentido e da quantidade de algarismos do deslocamento:
Deslocamento para a esquerda = especificar direto o numero de algarismos
SRP
TOTAL,3,5
desloca 3 casas para a esquerda
Deslocamento para a direita = especificar (64 - qtdd de algarismos)
SRP
TOTAL,64-3,5
desloca 3 casas para a direita
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
86
86
4-3. Instruções de comparação
CP (Compare Packed – Comparar em compactado)
Código de máquina
F9 (Instrução SS – L1 e L2)
Condition code
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CP
Interrupções Possíveis 0005,0007
A instrução CP efetua a comparação algébrica entre dois campos de memória que estejam no formato decimal
compactado. Os dois campos permanecem inalterados. Ex:
CP
CP
CP
CP
CPOA,CPOB
CONTLIN,=P'1'
0(5,9),=P'0'
TOTAL,2(5,9)
CLC (Compare Logical Character – Comparar Caracteres Logicamente)
Código de máquina
D5 (Instrução SS – L)
Condition code
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CLC
Interrupções Possíveis 0005
A interrupção CLC faz a comparação lógica (bit a bit, da esquerda para a direita) entre dois campos de memória.
Ex:
CLC
CLC
CLC
CLC
CLC
CPOA,CPOB
AE+78(2),=C'*1'
4(2,7),2(9)
ID,2(7)
194(5,11),AE+3
CLI (Compare Logical Immediate - Comparar Logicamente com Operando Imediato)
Código de máquina
95 (Instrução SI)
Condition code
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CLI
Interrupções Possíveis 0005
A instrução CLI faz a comparação lógica entre dois campos de memória (1 byte cada). O seu 2º operando deve ser
um termo auto definido. Ex:
CLI
CLI
CLI
CLI
AE+79,C'*'
2(5),X'00'
BYTE,B'11110000'
NOP+1,240
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
87
87
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ºoperando
10 1ºoperando > 2ºoperando
11 Nunca o condition code fica em 11 após um CLCL
Interrupções Possíveis 0005,0006
Tanto o 1. como o 2º operandos especificados devem ser registradores pares, os quais indicam (cada um deles)
conjuntos de registradores par-ímpar, os quais chamaremos de R1 e R1+1 e R2 e R2+1.
Esta instrução compara dois campos de memória, do mesmo modo que um CLC.
O endereço do campo 1º operando deve estar nos 3 últimos bytes à direita de R1.
O endereço do campo 2º operando deve estar nos 3 últimos bytes à direita de R2.
O tamanho (número de bytes) do 1º operando deve estar nos 3 últimos bytes à direita de R1+1.
O tamanho (número de bytes) do 2º operando deve estar nos 3 últimos bytes à direita de R2+1.
O 1º byte à esquerda de R2+1 deve conter o caracter de preenchimento.
O conteúdo do 1º byte à esquerda de R1, R2 e R1+1 é desprezado.
A comparação é feita bit a bit, da esquerda para a direita. Ela termina quando é encontrada uma desigualdade entre
bits, ou quando o tamanho do maior operando for alcançado.
Se os operandos não tiverem o mesmo tamanho, o menor é estendido com o caracter de preenchimento (para a
comparação - a expansão é feita internamente, sem alteração de campos).
Se a execução da instrução termina por causa de uma desigualdade, temos que:
 Do conteúdo dos 3 últimos bytes à direita de R1+1 e R2+1 é subtraído o número de bytes iguais, a menos que a
desigualdade tenha ocorrido com o caracter de preenchimento, sendo que, neste caso, os 3 últimos bytes à
direita de R1+1 ou R2+1 (o que indicar o menor tamanho) são zerados.
 Ao conteúdo dos 3 últimos bytes à direita de R1 e R2 é somado o número de bytes iguais.
Se os 2 operandos forem iguais (incluindo o caracter de preenchimento, se necessário), temos que:
 Os 3 últimos bytes à direita de R1+1 e R2+1 são zerados.
 Aos 3 últimos bytes à direita de R1 e R2 é somado o número de bytes iguais.
Em ambos os casos, o 1º byte à esquerda de R1 e R2 é zerado, e o 1º byte à esquerda de R1+1 e R2+1 não são
alterados. Ex:
CLCL
2,8
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
C (Compare)
Código de máquina
Condition code
Interrupções Possíveis
88
88
59 (Instrução RX)
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um C
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
C
C
C
C
C
9,CPO
8,=F'0'
13,=A(TABELA+430)
1,2(4)
1,2(,4)
1,2(7,4)
CH (Compare Halfword)
Código de máquina
Condition code
Interrupções Possíveis
49 (Instrução RX)
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CH
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
CH
CH
CH
CH
CH
9,CPO
8,=H'0'
13,=Y(TABELA+430)
1,2(4)
1,2(,4)
1,2(7,4)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
89
89
CL (Compare Logical – Compare Logicamente)
Código de máquina
55 (Instrução RX)
Condition code
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CL
Interrupções Possíveis 0005
A instrução CL efetua uma comparação lógica entre o conteúdo de um registrador (especificado no 1º operando) e
o conteúdo de um campo de 4 bytes (Especificado no 2º operando - em geral uma Full-Word). Ex:
CL
CL
CL
CL
CL
9,CPO
8,=F'0'
1,2(4)
1,2(,4)
1,2(7,4)
CLM (Compare Logical Characters Under Mask - Comparar campos lógicamente, sob máscara)
Código de máquina
BD (Instrução RS)
Condition code
00
Os bytes selecionados são iguais, ou a máscara
é zero.
01
Campo selecionado do 1ºoperando é menor
10
Campo selecionado do 1ºoperando é maior
11
Nunca o condition code fica em 11 após um CLM
Interrupções Possíveis 0005
O conteúdo do registrador 1º operando é comparado logicamente com o conteúdo do campo de memória 2º
operando, sob o controle de uma máscara, e o resultado é indicado no condition code. O seu formato de máquina é
o seguinte:
CO = 1 byte (código de operação)
R1 = 1/2 byte (registrador primeiro operando)
M3 = 1/2 byte (máscara)
E2 = 2 bytes (endereço base+deslocamento do segundo operando)
Os 4 bits da máscara, da esquerda para a direita, correspondem aos 4 bytes do registrador especificado no
1ºoperando. Os bytes do registrador que tiverem os seus bits correspondentes na máscara ligados, são considerados
como um "campo" contíguo, e comparados com o campo especificado no último operando da instrução (2º
operando), o qual deve ter tantos bytes de tamanho quantos forem os bits da máscara ligados. Os bytes do
registrador cujos bits correspondentes na máscara estiverem desligados, não participam da operação. Ex:
CLM
5,B'1011',ARCOMP
Neste caso o "campo" formado pelos 1º, 3º e 4º bytes do registrador 5, será comparado o campo de 3 bytes
denominado ARCOMP.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
90
90
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ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CR
Interrupções Possíveis nenhuma
A instrução CR faz uma comparação algébrica entre um número binário contido num registrador (especificado no
1º operando) e outro número binário contido em outro registrador (especificado no 2º operando). Ex:
CR
4,5
CLR (Compare Logical Register – Comparar Registradores Logicamente)
Código de máquina
15 (Instrução RR)
Condition code
00
1ºoperando = 2ºoperando
01
1ºoperando < 2ºoperando
10
1ºoperando > 2ºoperando
11
O condition code nunca fica em 11 após um CLR
Interrupções Possíveis Nenhuma
A instrução CLR faz uma comparação lógica entre o conteúdo de um registrador (especificado no 1º operando) e o
conteúdo de outro registrador (especificado no 2º operando). Ex:
CLR
4,5
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
91
91
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
00
01
10
11
CÓDIGO
8
4
2
1
A MÁSCARA indica em que condição deve ser efetuado o desvio, e, como ocupa meio byte, pode ir de X'0' a X'F'
(em decimal, de 0 a 15).
Se a máscara estiver com 8, o desvio será efetuado se o condition code estiver em B'00' ; se ela estiver em 4, o
desvio ocorrerá se o condition code estiver em B'01'; máscara 2 causa desvio se o condition code estiver em B'10";
e, finalmente, máscara 1 acarreta desvio se o condition code estiver posicionado em B'11'.
Pode-se fazer combinação dessas condições, somando-se os valores referentes aos códigos do condition code. Por
exemplo, a máscara estando em X'C', significa que o desvio deve ser efetuado caso o condition code esteja em 8 ou
4 (8 + 4 = C).
Se a máscara for zero, não será efetuado desvio (NOP/NOPR = no operation).
Se a máscara for 15 (X'F') será efetuado o desvio independentemente do estado
do condition code, pois 15 é a soma dos 4 códigos (8+4+2+1); é o desvio incondicional.
As instruções de desvio que especificarem máscara de 1 a 14 são as de desvio condicional (desviam
condicionalmente, dependendo do posicionamento do condition code).
Vejamos, a seguir, a tabela de mnemônicos normais (BC ou BCR) e suas máscaras possíveis, e seus respectivos
mnemônicos estendidos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
-------------------------------------------------------------------------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
NOP
BH
BL
BE
BNH
BNL
BNE
BO
BP
BM
BZ
BNP
BNM
BNZ
BO
BM
BZ
BNO
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
Branch
No Operation
Branch High
Branch Low
Branch Equal
Branch Not High
Branch Not Low
Branch Not Equal
Branch If Overflow
Branch If Plus
Branch If Minus
Branch If Zero
Branch If Not Plus
Branch If Not Minus
Branch If Not Zero
Branch If Ones
Branch If Mixed
Branch If Zeros
Branch If Not Ones
(Desvie)
(Sem operação - não desvie)
(Desvie se Maior)
(Desvie se Menor)
(Desvie se Igual)
(Desvie se Não Maior)
(Desvie se Não Menor)
(Desvie se Não Igual)
(Desvie se Overflow)
(Desvie se Mais)
(Desvie se Menos)
(Desvie se Zero)
(Desvie se Não Mais)
(Desvie se Não Menos)
(Desvie se Não Zero)
(Desvie se Um's)
(Desvie se Misturados)
(Desvie se Zeros)
(Desvie se Não UM's)
92
92
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
93
93
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
VOLTA
Neste caso, será efetuado o desvio para VOLTA se o condition code tiver 00. Outros exemplos:
B
LER
BH
AGAIN
BL
COMPARA
BE
0(2)
BE
0(,4)
BE
0(2,4)
BCR (Branch on Condition Register – Desviar [para endereço de registrador] na Condição)
Código de máquina
07 (Instrução RX)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
A instrução BCR é análoga ao BC e tem o seguinte formato de máquina:
CO = 1 byte (código de operação = 07)
M1 = 1/2 byte (MÁSCARA)
R2 = registrador segundo operando
Ela ocasiona um desvio (ou não) para a instrução cujo endereço esteja no registrador operando.
Usando BCR, o primeiro operando é a máscara, e o segundo é o número do registrador que contém o endereço da
instrução para onde será efetuado o desvio. Se usarmos o mnemônico estendido, o único operando especificado é o
número do registrador que é o segundo operando da instrução (mas único na especificação). Exemplos:
BCR
2,10
BR
7
BNER
10
BLR
15
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
94
94
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
BCT
BCT
BCT
5,VOLTA
2,0(4,7)
2,0(4)
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
BCTR
2,7
4,0
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
95
95
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
BXH
7,9,AGAIN
BXH
7,9,8(4)
R7 = R8 + R7; Se R7
Se R7
R7 = R9 + R7; Se R7
Se R7
R7 = R9 + R7; Se R7
Com endereço =
Se R7
> R9 Desvia para AGAIN;
<= R9 próxima instrução
> R9 Desvia para AGAIN;
<= R9 próxima instrução
> R9 Desvia para instrução
[ (conteúdo R4) + x’008’ ]
<= 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 tabela
R8 = tamanho dos itens da tabela
R9 = endereço do último elemento
NOTFOUND : 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 NEXTITEM
TABLSEEN ...
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
96
96
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
BXLE
7,9,AGAIN
BXLE
7,9,8(4)
R7 = R8 + R7; Se R7 <= R9 Desvia para AGAIN;
Se R7 > R9 próxima instrução
R7 = R9 + R7; Se R7 <= R9 Desvia para AGAIN;
Se R7 > R9 próxima instrução
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 tabela
R8 = tamanho dos itens da tabela
R9 = endereço do último elemento
NOTFOUND : 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 pesquisa
NOTFOUND ...
TABLSEEN ...
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
97
97
4-6. Instruções de edição
ED (Edit – Editar)
Código de máquina
Condition code
Interrupções Possíveis
DE (Instrução SS – L)
00
Último Campo = 0
01
Último Campo < 0
10
Último Campo > 0
11
O condition code nunca fica em 11 após o ED
0004,0005,0007
O seu formato é o seguinte:
(símbolo)
ED
camporeceptor,campoemissor
O campo emissor (segundo operando) é transformado de compactado para zonado, e colocado no campo receptor
(primeiro operando), substituindo, assim, o modelo da edição (que estava no primeiro operando).
A edição inclui controle de sinal e pontuação, e a supressão e proteção de zeros não significativos.
Pode-se editar diversos campos numa só operação.
O tamanho especificado refere-se apenas ao 1º operando.
O 2º operando deve estar no formato compactado. Se algum byte do 2º operando tiver em sua parte de zona
configuração A, B, C, D , E ou F, então haverá interrupção de programa (0007).
A edição é feita da esquerda para a direita.
Durante a edição, cada caracter do campo receptor (modelo), pode ter um dos três destinos:
 Não é modificado
 É substituído por um algarismo do campo emissor, transformado para zonado.
 É substituído pelo primeiro caracter à esquerda do campo receptor (denominado CARACTER DE
PREENCHIMENTO).
Qual das 3 ações acima é executada, é determinado pelo conteúdo do modelo e se o algarismo a ser editado é zero
ou não.
Examinemos como é formado o modelo de edição:
 O seu 1º Byte à esquerda é o caracter de preenchimento; se for X'20' ou X'21', a ação correspondente é tomada
após ele ter sido assinalado como caracter de preenchimento.
 Cada um dos bytes seguintes pode ter um dos seguintes conteúdos:
 SELETOR DE DÍGITOS (X'20')
 INÍCIO DE SIGNIFICÂNCIA (X'21')
 SEPARADOR DE CAMPOS (X'22')
 Qualquer outro
 Quando, na edição, é detectado um X'20' ou X'21' no 1º operando, a instrução verifica duas coisas:
 O INDICADOR DE SIGNIFICANCIA (é um indicador da UCP que pode estar ligado --ON-- ou
desligado --OFF--), que, chamaremos abreviadamente de S-TRIGGER.
 O algarismo correspondente no 2º operando. Como resultado dessa verificação, temos que o caracter do
modelo (X'20' ou X'21') será substituído pelo algarismo do 2º operando transformado para zonado, ou
pelo caracter de preenchimento.
Quanto ao S-TRIGGER, temos que:
 Ele é colocado OFF no início da edição, após ser encontrado um X'22', ou após ser encontrado na parte
numérica de um byte do 2º operando uma configuração A, C, E ou F (número positivo).
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
98
98
 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:
MODELO
MVC
ED
.
.
DC
ARIMP+5(10),MODELO
ARIMP+5(10),TOTAL
X'4020204B202126B2020'
Antes:
TOTAL
ARIMP+5(10)
Depois:
TOTAL
ARIMP+5(10)
b b
Outros Exemplos do ED:
ED
ED
ED
00.12.34.5C
40.20.20.4B.20.21.20.6B.20.20.20
00.12.34.5C
40.40.40.40.F1.F2.F3.6B.F4.F5
b b 1 2 3 , 4 5
0(5,7),CPO
ARIMP+17(8),ISDRT
4(12,9),2(10)
EDMK (Edit and Mark – Editar e Marcar)
Código de máquina
DF (Instrução SS – L)
Condition code
00
Último Campo = 0
01
Último Campo < 0
10
Último Campo > 0
11
O condition code nunca fica em 11 após o EDMK
Interrupções Possíveis 0004,0005,0007
A instrução EDMK é análoga a instrução ED, com a diferença de que ela coloca no registrador 1 (nos bits 8 a 31;
os bits 0 a 7 permanecem inalterados) o endereço do byte do 1º operando que recebeu o primeiro algarismo
significativo.
OBS:- O endereço não é colocado quando a significância foi forçada (via X'21').
Ex:
EDMK
ARIMP+5(10),TOTAL
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
99
99
4-7. Instruções de tradução e teste de bytes
TR (Translate – Traduzir)
Código de máquina
Condition code
Interrupções Possíveis
DC (Instrução SS – L)
Não é alterado
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
Depois
ACSD
TABELA
I
ACSD
TABELA
Outros exemplos:
TR
TR
TR
02.00.08.FF.05
C1.48.B9.D7.A1.C3.D9.5C.4B ........1A
.......... 256 bytes ................
B9.C1.4B.1A.C3
não é alterado
0(5,7),0(10)
ARIMP+7(10),TABASTER
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 EBCDIC
CONVTB1
DC
ORG
DC
ORG
DC
ORG
DC
ORG
256C´ ’
CONVTB1+C’A’
C’abcdefghi’
CONVTB1+C’J’
C’jklmnopqr’
CONVTB1+C’S’
C’stuvwxyz’
256 espacos EBCDIC
Volta para A maiusculo
Substitui espacos originais pelas minusculas
Volta para J maiusculo
Substitui espacos originais pelas minusculas
Volta para S maiusculo
Substitui espacos originais pelas minusculas
, Volta para CONVTB1 +256
Traduzir letras maiúsculas EBCDIC para letras maiúsculas ASCII; “letras” inválidas são convertidas para espaços ASCII
CONVTB2
DC
ORG
DC
ORG
DC
ORG
DC
ORG
256X’20’
256 ASCII spaces
CONVTB2+C’A’
Volta para A maiusculo
X’414243444546474849’
Substitui letras EBCDIC pelas ASCII
CONVTB1+C’J’
Volta para J maiusculo
X’4A4B4C4D4E4F505152’
Substitui letras EBCDIC pelas ASCII
CONVTB1+C’S’
Volta para S maiusculo
X’535455565758595A’
Substitui letras EBCDIC pelas ASCII
, Volta para CONVTB2+256
Traduzir letras ASCII maiúsculas para letras EBCDIC maiúsculas; “letras” inválidas são convertidas em espaços EBCDIC
CONVTB3 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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
100
100
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:
TABNUM
TRT
BZ
...
DC
CART+9(6),TABNUM
NUMÉRICO
240X'FF',10X'00',6X'FF'
b) Testar se um campo (1º operando) é alfabético (só tem letras e brancos)
TABALFAB
TRT
BZ
...
DC
ORG
DC
ORG
DC
ORG
DC
ORG
DC
ORG
CART+9(6),TABALFAB
FABETICO
CL256X'FF'
TABALFAB+C' '
X'00'
TABALFAB+C'A'
9X'00'
TABALFAB+C'J'
9X'00'
TABALFAB+C'S'
8X'00'
c) Achar o 1º byte de um campo que tenha determinado caracter (* no exemplo).
TABASTER
TRT
0(80,7),TABASTER
BZ
NOTASTER
aqui o registrador 1 tem o
endereço do byte desejado
...
DC
256X'00'
ORG
TABASTER+C'*'
DC
X'FF'
ORG
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
101
101
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 Shift
b) Duplos - dois registradores seguidos (conjunto par-ímpar; deve-se especificar o registrador par) participarão do
Shift
c) Lógicos - todos os bits são deslocados para a esquerda ou para a direita.
d) Algébricos - o bit do sinal (o mais à esquerda do registrador) não é deslocado.
Todas as instruções de Shift são RS, e os bits 12 a 15 dessas instruções são ignorados pela UCP.
Os 6 bits mais à direita do número que é o endereço do 2º operando, formam um número que indica quantas
"casas" devem ser deslocadas.
SLL (Shift Left Logical – Deslocamento Simples Lógico à esquerda)
Código de máquina
89 (Instrução RS)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
Pode-se deslocar 32 "casas" no máximo. Exemplo:
SLL
5,2
Registrador 5 antes do Shift
B9.4F.FF.FF
Registrador 5 após o Shift
E5.3F.FF.FC
SRL (Shift Right Logical – Deslocamento Simples Lógico à direita)
Código de máquina
88 (Instrução RS)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
Pode-se deslocar 32 "casas" no máximo. Exemplo:
SRL
5,2
Registrador 5 antes do Shift
B9.4F.FF.FF
Registrador 5 após o Shift
2E.53.FF.FF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
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
8,4
102
102
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
103
103
SLA (Shift Left Algebraic – Deslocamento Simples Algébrico à esquerda)
Código de máquina
8B (Instrução RS)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis Nenhuma
Pode-se deslocar 15 "casas" no máximo. Ex:
SLA
5,3
Registrador 5 antes do Shift
FF.80.9A.00
Registrador 5 após o Shift
FC.00.50.00
SRA (Shift Right Algebraic – Deslocamento Simples Algébrico à direita)
Código de máquina
8A (Instrução RS)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
O condition code nunca fica em 11 após um SRA
Interrupções Possíveis Nenhuma
Pode-se deslocar 15 "casas" no máximo. Ex:
SRA
Registrador 5 antes do Shift
FF.80.0A.00
Registrador 5 após o Shift
8F.F0.01.40
5,3
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
104
104
SLDA (Shift Left Double Algebraic – Deslocamento Duplo Algébrico à esquerda)
Código de máquina
8F (Instrução RS)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0004, 0008
Pode-se deslocar 63 "casas" no máximo. Exemplo:
SLDA
8,3
Registradores 8 e 9 antes do Shift
B4.20.08.91.C4.00.02.FF
8
9
Registradores 8 e 9 após o Shift
A1.00.44.8E.20.00.17.F8
8
9
SRDA (Shift Right Double Algebraic – Deslocamento Duplo Algébrico à direita)
Código de máquina
8E (Instrução RS)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
O condition code nunca fica em 11 após um SRDA
Interrupções Possíveis 0006
Pode-se deslocar 63 "casas" no máximo. Exemplo:
SRDA
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
8,3
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
105
105
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
Condition code
Interrupções Possíveis
54 (Instrução RX)
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um N
11
O condition code nunca fica em 11 após um N
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
Reg. 13
CAMPOF
13,CAMPOF
Antes
Depois
B4.EF.2F.A8
00.00.00.FF
00.00.00.A8
00.00.00.FF
Outros exemplos:
N
N
N
N
11,=F'15'
3,0(4)
3,0(,4)
3,0(8,4)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
O (Or – Ou)
Código de máquina
Condition code
Interrupções Possíveis
106
106
56 (Instrução RX)
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um O
11
O condition code nunca fica em 11 após um O
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
Depois
B4.EF.2F.A8
00.00.00.FF
B4.EF.2F.FF
00.00.00.FF
Reg. 13
CAMPOF
Antes
X (Exclusive Or – Ou exclusivo)
Código de máquina
57 (Instrução RX)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um X
11
O condition code nunca fica em 11 após um X
Interrupções Possíveis 0005
A instrução X executa um EXCLUSIVE OR entre um registrador (especificado no 1º operando) e um campo de
memória de 4 bytes (Especificado no 2º operando - em geral uma Full-Word). Ex:
X
Reg. 13
CAMPOF
13,CAMPOF
Antes
Depois
B4.EF.2F.A8
00.00.00.FF
B4.EF.2F.57
00.00.00.FF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
NR (And Register – E entre registradores)
Código de máquina
14 (Instrução RR)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um NR
11
O condition code nunca fica em 11 após um NR
Interrupções Possíveis Nenhuma
A instrução NR executa um AND entre 2 registradores. Ex:
NR
Reg. 5
Reg. 8
5,8
Antes
Depois
B4.EF.2F.A8
00.00.00.FF
00.00.00.A8
00.00.00.FF
OR (Or Register – Ou entre registradores)
Código de máquina
16 (Instrução RR)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um OR
11
O condition code nunca fica em 11 após um OR
Interrupções Possíveis Nenhuma
A instrução OR executa um OR entre 2 registradores. Ex:
OR
Reg. 5
Reg. 8
5,8
Antes
Depois
B4.EF.2F.A8
00.00.00.FF
B4.EF.2F.FF
00.00.00.FF
XR (Exclusive or Register – Ou exclusivo entre registradores)
Código de máquina
17 (Instrução RR)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um XR
11
O condition code nunca fica em 11 após um XR
Interrupções Possíveis Nenhuma
A instrução XR executa um EXCLUSIVE OR entre 2 registradores. Ex:
XR
Reg. 5
Reg. 8
5,8
Antes
Depois
B4.EF.2F.A8
00.00.00.FF
B4.EF.2F.57
00.00.00.FF
107
107
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
NI (And Immediate – E [com operando] imediato)
Código de máquina
94 (Instrução SI)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um NI
11
O condition code nunca fica em 11 após um NI
Interrupções Possíveis 0004, 0005
A instrução NI executa um AND entre 2 campos de memória (um byte cada). Ex:
NI
Antes
BYTE
Op.Imed.
B4
0F
BYTE,X'0F'
Depois
04
0F
OI (Or Immediate – Ou [com operando] imediato)
Código de máquina
96 (Instrução SI)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um OI
11
O condition code nunca fica em 11 após um OI
Interrupções Possíveis 0004, 0005
A instrução OI executa um Or entre 2 campos de memória (um byte cada). Ex:
OI
Antes
BYTE
Op.Imed.
B4
0F
BYTE,X'0F'
Depois
BF
0F
XI (Exclusive Or Immediate – Ou exclusivo [com operando] imediato)
Código de máquina
97 (Instrução SI)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um OI
11
O condition code nunca fica em 11 após um OI
Interrupções Possíveis 0004, 0005
A instrução XI executa um EXCLUSIVE OR entre 2 campos de memória (um byte cada). Exemplo:
BYTE
Op.Imed.
Antes
Depois
B4
0F
BB
0F
108
108
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
NC (And Character – E entre campos com caracteres)
Código de máquina
D4 (Instrução SS – L)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um NC
11
O condition code nunca fica em 11 após um NC
Interrupções Possíveis 0004, 0005
A instrução NC executa um AND entre 2 campos de memória. Ex:
NC
CPOA
CPOB
CPOA,CPOB
Antes
Depois
EF.2F.A8
00.00.FF
00.00.A8
00.00.FF
OC (Or Character – Ou entre campos com caracteres)
Código de máquina
D6 (Instrução SS – L)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um OC
11
O condition code nunca fica em 11 após um OC
Interrupções Possíveis 0004, 0005
A instrução OC executa um OR entre 2 campos de memória. Ex:
OC
CPOA
CPOB
CPOA,CPOB
Antes
Depois
EF.2F.A8
00.00.FF
EF.2F.FF
00.00.FF
XC (Exclusive Or Character – Ou exclusivo entre campos com caracteres)
Código de máquina
D7 (Instrução SS – L)
Condition code
00
Resultado = 0
01
Resultado <> 0
10
O condition code nunca fica em 10 após um XC
11
O condition code nunca fica em 11 após um XC
Interrupções Possíveis 0004, 0005
A instrução XC executa um EXCLUSIVE OR entre 2 campos de memória. Ex:
XC
CPOA
CPOB
CPOA,CPOB
Antes
Depois
EF.2F.A8
00.00.00
EF.2F.57
00.00.FF
109
109
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
110
110
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
BALR
3,0
14,15
LA carrega o endereço da instrução
ROUTINE no registrador 15
...
LA
15,ROUTINE
BALR 14,15
EQU * continuação
RETINS
...
...
ROUTINE ST
....
....
L
BR
14,SAVEREG
14,SAVEREG
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
111
111
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 carrega o endereço da
instrução RETINS no registrador 9
...
...
Salva o registrador 9 (endereço de
BAL 9,ROUTINE
retorno) em SAVEREG9
RETINS EQU * continuation
...
...
Restaura o endereço de retorno
ROUTINE ST
9,SAVEREG9
....
....
L
9,SAVEREG9
Retorna para RETINS
BR
9
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
112
112
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
RETINS EQU
...
...
ROUTINE ST
....
....
L
BR
BAS carrega o endereço da
instrução RETINS no registrador 9
(bytes 1, 2 e 3) e zera o byte 0
9,ROUTINE
* continuation
9,SAVEREG9
9,SAVEREG9
9
Salva o registrador 9 (endereço de
retorno) em SAVEREG9
Restaura o endereço de retorno
Retorna para RETINS
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
113
113
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,15
EQU * continuação
RETINS
...
...
ROUTINE ST
....
....
L
BR
14,SAVEREG
14,SAVEREG
14
LA carrega o endereço da instrução
ROUTINE no registrador 15
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
114
114
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 carrega o endereço da instrução
ROUTINE no registrador 15
LA
15,ROUTINE
ICM
15,8,AMODE
BASSM 14,15
EQU * continuação
RETINS
...
...
ROUTINE ST
....
....
L
BR
14,SAVEREG
14,SAVEREG
14
Retorna para RETINS
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 retorno
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
115
115
BSM (Branch and Set Mode – Desviar e posicionar modo)
Código de máquina
0B (Instrução RR)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
O bit 32 da PSW atual (addressing mode) é carregado no bit 0 do registrador 1º operando (os bits 1-31 do
registrador 1º operando não são alterados), e em seguida é carregado nos bytes 4 a 7 da PSW atual o conteúdo do
registrador 2º operando, incluindo o bit de addressing mode e o endereço da próxima instrução; isto causa um
posicionamento do addressing mode e o desvio para a instrução.
Se o registrador 2º operando for o zero, não é feita a carga da PSW. Exemplo:
BSM
14, 15
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
116
116
4-11. Instruções de movimento de dados de registrador para memória
ST (Store – Armazenar)
Código de máquina
Condition code
Interrupções Possíveis
50 (Instrução RX)
Não é alterado
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
1o operando depois
ST 7,FULL
FE.DC.BA.98
FE.DC.BA.98
ST 14,SAVE
00.00.00.11
00.00.00.11
Outros exemplos:
ST
ST
ST
ST
ST
2o operando antes
2o operando depois
00.01.00.00
FE.DC.BA.98
FF.FF.FF.FD
00.00.00.11
14,SALVA
14,FULL+4
14,0(2)
14,0(,8)
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
1o operando depois
STH 5,FLD
00.00.00.0A
00.00.00.0A
STH 8,HWORD
FF.FF.FF.FF
FF.FF.FF.FF
Outros exemplos:
STH
STH
STH
STH
STH
STH
2o operando antes
2o operando depois
8A.B4
00.0A
FF.FF
FF.FF
14,SALVA+18
14,HALF
14,0(2)
14,0(,8)
14,0(2,8)
0,CPO
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
117
117
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
1o operando depois
STC 7,BYTE
FE.DC.BA.98
FE.DC.BA.98
STC 14,0(5)
00.00.00.11
00.00.00.11
Outros exemplos:
STC
STC
STC
STC
2o operando antes
2o operando depois
00
98
FF
11
4,BYTE
8,0(5)
8,0(,9)
8,0(5,9)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
118
118
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
1o operando depois
STCM 5,B’1010’,TWOBYTES
00.00.45.67
00.00.45.67
2o operando antes
2o operando depois
9A.BC
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
CVD
CVD
CVD
8,DOUBLE
8,0(5,9)
8,0(,9)
8,0(5)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
119
119
4-12. Instruções de movimento de dados de campo de memória para registrador
L (Load – Carregar)
Código de máquina
Condition code
Interrupções Possíveis
58 (Instrução RX)
Não é alterado
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
L
L
L
L
L
7,FULL
14,SALVA
8,0(10)
8,0(,11)
8,0(10,11)
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
LH
LH
LH
LH
7,HALF
8,0(10)
8,0(,11)
8,0(10,11)
8,=H'200'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
120
120
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
IC
IC
IC
IC
4,BYTE
8,0(5)
8,0(,9)
8,0(5,9)
9,=C'A'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
121
121
ICM (Insert Character under Mask – Inserir bytes sob máscara)
Código de máquina
BF (Instrução RS)
Condition code
00
Todos os bits inseridos estão em 0, ou a
máscara é 0.
01
O 1º bit do campo inserido está em 1.
10
O 1º bit do campo inserido está em 0, e nem
todos os bits inseridos estão em 0.
11
Nunca o condition code fica em 11 após um ICM.
Interrupções Possíveis 0005
O seu formato de máquina é o seguinte:
CO = 1 byte (código de operação)
R1 = 1/2 byte (registrador primeiro operando)
M3 = 1/2 byte (máscara terceiro operando)
E2 = 2 bytes (base+deslocamento do segundo operando)
Os 4 bits da máscara, da esquerda para a direita, correspondem aos 4 bytes do registrador especificado no 1º
operando. O campo de memória especificado no último operando da instrução (2º operando), deve ter tantos bytes
quantos forem os bits da máscara ligados. Os bytes do campo de memória são movidos, um a um, da esquerda para
a direita, para os bytes do registrador 1º operando que tiverem os bits correspondentes na máscara ligados.
Os bytes do registrador 1º operando que tiverem os bits correspondentes na máscara desligados, permanecem
inalterados. Ex:
ICM
5,B'1010',SAVE
Neste caso, o 1º byte de SAVE será movido para o 1º byte do registrador 5, e o 2º byte de SAVE será movido para
o 3º byte do registrador 5.
CVB (Convert to binary – Converter [de compactado] para binário)
Código de máquina
4F (Instrução RX)
Condition code
Não é alterado
Interrupções Possíveis 0005, 0007, 0009
O número compactado que esta no campo de 8 bytes especificado no 2º operando (em geral uma Double-Word), o
qual permanece inalterado, é transformado para binário e colocado no registrador especificado no 1º operando. Ex:
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
CVB
CVB
CVB
8,DOUBLE
8,0(5,9)
8,0(,9)
8,0(5)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
122
122
4-13. Instruções de movimento de dados de registrador para registrador
LR (Load Register – Carregar registrador)
Código de máquina
18 (Instrução RR)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
O conteúdo do registrador especificado no 2º operando é colocado no registrador especificado no 1º operando. Ex:
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 > 0
11
Overflow
Interrupções Possíveis 0008
O número binário contido no registrador especificado no 2º operando (o qual permanece inalterado) é transformado
para positivo e colocado no registrador especificado no 1º operando.
Números positivos não sofrem transformação.
Números negativos são transformados por complementação.
O overflow ocorre quando o maior número negativo é complementado; neste caso, o número permanece inalterado.
Ex:
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LNR (Load Negative Register – Carregar registrador negativo)
Código de máquina
11 (Instrução RR)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Nunca o condition code
11
Nunca o condition code
Interrupções Possíveis Nenhuma
123
123
fica em 10 após um LNR
fica em 10 após um LNR
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 < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0008
O número binário contido no registrador especificado no 2º operando (o qual permanece inalterado) é
complementado (se for positivo fica negativo e vice-versa) e colocado no registrador especificado no 1º operando.
O overflow ocorre quando o maior número negativo é complementado. EX:
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LTR (Load and test Register – Carregar e testar registrador)
Código de máquina
12 (Instrução RR)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Nunca o condition code
Interrupções Possíveis Nenhuma
124
124
fica em 10 após um LTR
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
125
125
4-14. Operações aritméticas entre registradores
AR (Add Register – Somar registradores)
Código de máquina
1A (Instrução RR)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0008
O conteúdo do registrador especificado no 2º operando (o qual não é alterado) é somado algebricamente ao
conteúdo do registrador especificado no 1º operando (ambos os números em binário) e o resultado é colocado no
registrador 1º operando. Ex:
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 < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0008
O número binário contido no registrador especificado no 2º operando é subtraído algebricamente do número binário
contido no registrador especificado no 1º operando, e o resto é colocado no registrador 1º operando.
Portanto: Minuendo : 1ºoperando
Subtraendo : 2ºoperando
Resto
: 1ºoperando
Ex:
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
126
126
MR (Multiply Register – Multiplicar registradores)
Código de máquina
1C (Instrução RR)
Condition code
Não é alterado
Interrupções Possíveis 0006
O 1º operando especificado deve ser um registrador par (o número binário nele contido será desprezado, a menos
que ele seja o multiplicador).
O número binário contido no registrador especificado no 2º operando será o multiplicador. O produto será colocado
no conjunto de 2 registradores (par-ímpar) indicado pelo 1º operando: o registrador par será ele mesmo, e o ímpar
será o seguinte a ele.
O multiplicando será o número binário do registrador ímpar do conjunto par-ímpar indicado pelo 1º operando.
Exemplo:
MR
6,9
MR
6,9
Registrador 6 antes Registrador 7 antes
Registrador 9 antes
Registrador 6 depois Registrador 7 depois Registrador 9 depois
[ 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
[ 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 é alterado
Interrupções Possíveis 0006,0009
O 1º operando especificado deve ser um registrador par. O número contido nele e no registrador ímpar seguinte a
ele (número binário com 64 bits) será o dividendo.
O número binário contido no registrador especificado no 2º operando será o divisor.
Após a divisão, o registrador ímpar receberá o quociente.
Resto ou quociente = 0 : sinal sempre positivo
Sinal do resto = Sinal do dividendo
Ex:
DR
4,9
Dividendo : Número binário de 64 bits (sinal + 63 bits), contido nos registradores 4 e 5, em conjunto.
Divisor : Reg. 9
Resto : Reg. 4
Quociente : Reg. 5
*
L
L
L
DR
12,=F’2’
4,=F’0’
5,=F’257’
4,12
Divisor: Registrador 12 com número 2
Dividendo: Registradores 4-5 juntos;
Eles tem o número 257
Quociente: Registrador 5 = 128; Resto: Registrador 4 = 1
L
L
L
DR
9,=F’12’
6,=F’0’
7,=F’148’
6,9
Divisor: Registrador 9 com número 12
Dividendo: Registradores 6-7 juntos;
Eles tem o número 145
Quociente: Registrador 7 = 12; Resto: Registrador 6 = 4
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
127
127
ALR (Add Logical Register – Somar registradores logicamente)
Código de máquina
1E (Instrução RR)
Condition code
00
Resultado = 0, não perde sinal
01
Resultado <> 0, não perde sinal
10
Resultado = 0, perde sinal
11
Resultado <> 0, perde sinal
Interrupções Possíveis Nenhuma
É efetuada uma soma lógica entre os números binários (considerados com 32 bits cada, positivos) contidos nos
registradores especificados como operandos. O resultado é colocado no registrador 1º operando. Ex:
Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes”
registrador 1o operando antes
registrador 1o operando depois
ALR
7,12
00.B0.C4.E2
00.B0.C4.E3
ALR
8,8
7F.FF.FF.FF
80.00.00.00
ALR
10,10
FF.FF.FF.FF
00.00.00.00
ALR
10,10
80.00.00.00
00.00.00.00
2o operando antes
2o operando depois
00.00.00.01
00.00.00.01
00.00.00.01
00.00.00.01
00.00.00.01
00.00.00.01
80.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 sinal
10
Resultado = 0, perde sinal
11
Resultado <> 0, perde sinal
Interrupções Possíveis Nenhuma
É efetuada uma subtração lógica entre os números binários (considerados com 32 bits cada, positivos) contidos no
1º operando (minuendo) e 2º operando (subtraendo). O resto é colocado no registrador 1º operando. Ex:
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
128
128
4-15. Operações aritméticas entre registradores e campos de memória
A (Add – Somar)
Código de máquina
Condition code
Interrupções Possíveis
5A (Instrução RX)
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
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.10
00.00.01.03
00.00.01.03
A
7,4(2,8)
07.FF.FF.FE
07.FF.FF.FF
00.00.00.01
00.00.00.01
A
7,4(2)
07.FF.FF.FF
07.FF.FF.FE
FF.FF.FF.FF
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
Condition code
Interrupções Possíveis
5B (Instrução RX)
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
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
FF.FF.FF.0A
00.00.01.03
00.00.01.03
S
7,4(2,8)
07.FF.FF.FE
07.FF.FF.FD
00.00.00.01
00.00.00.01
S
7,4(2)
07.FF.FF.FF
07.FF.FF.FD
00.00.00.02
00.00.00.02
S
7,4(,8)
00.00.00.00
00.00.00.01
FF.FF.FF.FF
FF.FF.FF.FF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
M (Multiply – Multiplicar)
Código de máquina
Condition code
Interrupções Possíveis
129
129
5C (Instrução RX)
Não é alterado
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
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
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
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
Multiplicando: Reg 7; Endereço multiplicador: Indexador 2 [ + Base 0 ] + X’4’;
6,4(2)
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
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
M
M
M
M
M
D (Divide – Dividir)
Código de máquina
Condition code
Interrupções Possíveis
5D (Instrução RX)
Não é alterado
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,CPOA
Neste caso, temos: Dividendo : Regs. 6 e 7 juntos; Divisor : CPOA; Quociente : Reg. 7; Resto : Reg. 6
*
L
L
D
6,=F’0’
7,=F’257’
6,=F’4’
Dividendo: Registradores 6-7 juntos;
They have the number 257
Divisor: (literal) com número 4; Quociente: Registrador 7 = conteúdo 64; Resto: Registrador 6 = conteúdo 1
L
L
D
10,=F’0’
11,=F’17’
10,=F’3’
Dividendo: Registradores 10-11 juntos;
They have the number 17
Divisor: (literal) com número 3; Quociente: Registrador 11 = conteúdo 5; Resto: Registrador 10 = conteúdo 2
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
130
130
AH (Add Halfword – Somar hafword)
Código de máquina
4A (Instrução RX)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0005,0008
Esta instrução efetua uma soma algébrica entre dois números binários.
Um deles esta localizado no registrador especificado no 1º operando, e o outro num campo de memória de 2 bytes
especificado no 2º operando (em geral uma Half-Word).
Antes de efetuada a soma pela UCP, o 2º operando é expandido na UCP para que fique com 32 bits (o bit de sinal é
expandido a esquerda); aí então é feita a adição. O resultado é colocado no registrador 1º operando. Ex:
Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes”
registrador 1o operando antes
registrador 1o operando depois
AH
5,=H'259'
00.00.2B.C4
00.00.2C.C7
AH
5,HALF
00.00.00.0D
00.00.01.1A
AH
5,4(2,8)
11.11.11.11 (decimal 286331153)
11.10.99.99 (decimal 286300569)
AH
5,4(2)
11.11.11.11 (decimal 286331153)
11.11.89.99 (decimal 286362009)
2o operando antes
2o operando depois
01.03
01.03
01.0D
01.0D
88.88 (decimal –30584)
88.88
78.88 (decimal +30856)
78.88
SH (Subtract Halfword – Subtrair hafword)
Código de máquina
4B (Instrução RX)
Condition code
00
Resultado = 0
01
Resultado < 0
10
Resultado > 0
11
Overflow
Interrupções Possíveis 0005,0008
Esta instrução efetua uma subtração algébrica entre dois números binários.
Um deles está localizado no registrador especificado no 1º operando, e o outro num campo de memória de 2 bytes
especificado no 2º operando (em geral uma Half-Word).
Antes de efetuada a subtração pela UCP, o 2º operando é expandido na UCP para que fique com 32 bits (o bit de
sinal é expandido a esquerda); aí então é feita a subtração. O resultado é colocado no registrador 1º operando. Ex:
Supor os operandos com tamanho e conteúdo como exibidos na linha “antes”
1o operando antes
1o operando depois
SH
5,=H'259'
00.00.2B.C4
00.00.2A.C1
SH
5,HALF
00.00.00.0D
FF.FF.FF.00
SH
5,4(2,8)
11.11.11.11 (decimal 286331153)
11.11.88.89 (decimal 286361737)
SH
5,4(2)
11.11.11.11 (decimal 286331153)
11.10.98.89 (decimal 286300297)
2o operando antes
2o operando depois
01.03
01.03
01.0D
01.0D
88.88 (decimal –30584)
88.88
78.88 (decimal +30856)
78.88
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
131
131
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:
M
5,=H’4’
M
5,=F'2'
Registrador 1o operandoantes 2o operando antes
Registrador 1o operando depois 2o operando depois
Multiplicando: Registrador 5; Multiplicador: literal 4; Resultado: Registrador 5
00.00.00.0A
00.04
00.00.00.28
00.04
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 sinal
10
Resultado = 0, perde sinal
11
Resultado <> 0, perde sinal
Interrupções Possíveis 0005
Esta instrução efetua uma soma lógica entre dois números binários.
Um deles está localizado no registrador especificado no 1º operando. O outro, num campo de memória de 4 bytes
especificado no 2º operando (em geral uma Full-Word).
O resultado é colocado no registrador 1º operando. Ex:
Supor os operandos com tamanho e conteúdo conforme mostrado na linha “Antes”
registrador 1o operando antes
registrador 1o operando depois
AL
5,=F'259'
00.00.00.00
00.00.01.03
2o operando antes
2o operando depois
00.00.01.03
00.00.01.03
AL
5,FULL
00.B0.C4.E2
00.B0.C4.E3
00.00.00.01
00.00.00.01
AL
5,4(2,8)
7F.FF.FF.FF
80.00.00.0
00.00.00.01
00.00.00.01
AL
5,4(2)
FF.FF.FF.FF
00.00.00.0
00.00.00.01
00.00.00.01
AL
5,4(,8)
80.00.00.00
00.00.00.00
00.00.00.01
00.00.00.01
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
SL (Subtract Logical – Subtrair logicamente)
Código de máquina
5F (Instrução RX)
Condition code
00 O condition code nunca fica em 00 após um SL
01 Resultado <> 0, não perde sinal
10 Resultado = 0, perde sinal
11 Resultado <> 0, perde sinal
Interrupções Possíveis 0005
Esta instrução efetua uma subtração lógica entre dois números binários.
Um deles localizado no registrador especificado no 1º operando.
O outro, num campo de memória de 4 bytes especificado no 2º operando (em geral uma Full-Word).
O resultado é colocado no registrador 1º operando. Ex:
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.0A
00.00.00.03
00.00.00.03
SL
7,4(2,8)
07.FF.FF.FE
07.FF.FF.FD
00.00.00.01
00.00.00.01
SL
7,4(2)
07.FF.FF.FF
07.FF.FF.FD
00.00.00.02
00.00.00.02
132
132
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
133
133
4-16. Outras instruções
LA (Load Address – Carregar Endereço)
Código de máquina
41 (Instrução RX)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
Esta instrução calcula o endereço real do 2º operando especificado (um endereço qualquer de memória), e o coloca
nos 3 últimos bytes à direita do registrador, especificado no 1º operando). No primeiro byte à esquerda do
registrador são colocados zeros binários. Ex:
LA
registrador 1o operando antes instrução máquina registrador 3 antes registrador 9 antes
registrador 1o operando depois
registrador 3 depois registrador 9 depois
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
00.A0.0F.03
41.50.3F.03
00.A0.00.00
00.A0.00.00
nao usado
nao usado
LA
5,FLD+17(9)
01.12.34.56
00.A0.0F.6A
41.59.3F.03
00.A0.00.00
00.A0.00.00
00.00.00.14
00.00.00.14
LA
5,2(9,3)
01.12.34.56
00.A0.00.16
41.59.30.02
00.A0.00.00
00.A0.00.00
00.00.00.14
00.00.00.14
LA
5,200
01.23.45.67
00.00.00.C8
41.50.00.C8
nao usado
nao usado
nao usado
nao usado
LA
5,4095
01.23.45.67
00.00.0F.FF
41.50.0F.FF
not used
not used
not used
not used
LA
5,4095(3)
01.23.45.67
00.0A.8F.FF
41.53.0F.FF
00.0A.80.00
00.0A.80.00
not used
not used
LA
5,4095(3,9)
01.23.45.67
00.0A.90.00
41.53.9F.FF
00.0A.00.00
00.0A.80.00
00.00.00.01
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 é 0
01
Dos bits testados, alguns estão ligados e
outros desligados
10
Nunca o condition code fica em 10 após um TM
11
Todos os bits testados estão ligados
Interrupções Possíveis 0005
Esta instrução testa bits do campo de 1 byte especificado no 1º operando, a partir da máscara especificada no 2º
operando (termo auto-definido), a qual indica quais são os bits que devem ser testados.
Os bits ligados na máscara indicam que os seus correspondentes no 1º operando devem ser testados. Após o teste, o
condition code é posicionado. Ex:
TM
BYTE,X'9C' 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
TM
TM
CHAVE,B'10000001' Bits 0 e 7 of BYTE são testados
0(4),240 Bits 4,5,6 e 7 de [reg base 4 + deslocamento X’0’] são testados
2(8),X'80' Bit 0 [reg base 8 + deslocamento X’2’] é testado
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
EX (Execute)
Código de máquina
Condition code
134
134
44 (Instrução RX)
o seu posicionamento (ou não) depende da instrução
que for executada
0003,0005,0006
Interrupções Possíveis
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
SVC
0
7
Exemplos de SVC's de MVS:
X'00'
X'01'
X'02'
X'04'
X'05'
X'0B'
X'0D'
(000)
(001)
(002)
(004)
(005)
(011)
(013)
=
=
=
=
=
=
=
EXCP/XDAP
WAIT/WAITR/PRTOV
POST
GETMAIN
FREEMAIN
TIME
ABEND
X'13'
X'14'
X'23'
X'24'
X'5D'
X'63'
X'6B'
(019)
(020)
(035)
(036)
(093)
(099)
(107)
=
=
=
=
=
=
=
OPEN
CLOSE
WTO/WTOR
WTL
TGET/TPUT
DYNALLOC
MODESET
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
MC (Monitor Call – Chamada
Código de máquina
Condition code
Interrupções Possíveis
135
135
do monitor)
AF (Instrução SI)
Permanece inalterado
0006,0040
Esta instrução causa uma interrupção de programa, se o bit que mascara esta situação no registrador de controle 8
estiver ligado.
Os bits de máscara no registrador de controle 8 são os bits 16 a 31, e que correspondem às classes 0 a 15,
respectivamente.
No operando imediato, os 4 primeiros bits à esquerda (bits 8 a 11 da instrução) devem estar em zero. Os bits 12 a
15 (a metade da direita do segundo byte da instrução) especificam um número binário que indica qual a classe de
interrupção desejada; se o bit a ela referente no registrador de controle 8 estiver ligado, será causada a interrupção.
O endereço do segundo operando não faz referência a um campo de memória, e sim indicam um código que deve
ser colocado na fullword de endereço X'000156' de memória.
Se a máscara referente à interrupção desejada estiver desligada no registrador de controle 8, a instrução funciona
como um NOP. Exemplo:
MC
MONITCOD,7
SPM (Set Program Mask – estabelecer máscara de programa)
Código de máquina
04 (Instrução RR)
Condition code
fica com o conteúdo dos bits 2 e 3 do reg. 1º
operando
Interrupções Possíveis nenhuma
Os bits 12 a 15 da instrução (onde haveria o registrador 2º operando) são ignorados. O conteúdo do registrador 1º
operando é usado como base para colocar o condition code e a máscara de programa na PSW atual.
Os bits 2 e 3 do registrador 1º operando tem seu conteúdo colocado no condition code da PSW atual, e os bits 4,5,6
e 7 tem seu conteúdo colocado na máscara de programa da PSW atual.
Os bits 0 e 1, e os bits 8 a 31 do registrador 1º operando são ignorados. Ex:
SPM
8
IPM (Insert Program Mask – inserir máscara de programa)
Código de máquina
B222 (Instrução RRE)
Condition code
Não é alterado
Interrupções Possíveis Nenhuma
Os bits 16-23 (terceiro byte) e 28-31 (segunda metade do quarto byte) da instrução são ignorados.
O condition code e a máscara de programa da PSW atual são colocados nos bits 2-3 )condition code) e 4-7
(máscara de programa) do registrador primeiro (e único) operando; Os bits 0-1 do registrador são zerados e os bits
8-31 não são alterados. Exemplo:
IPM
8
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
136
136
STCK (Store clock – armazenar clock)
Código de máquina
B205 (Instrução S)
Condition code
00 O clock está em estado de set
01 O clock não está em estado de set
10 O clock está em estado de erro
11 Nunca fica em 11 após um STCK
Interrupções Possíveis 0004
O conteúdo do TOD clock é armazenado no campo de 8 bytes especificado como operando. O clock deve estar em
estado de set, stop ou não-set.
As posições à direita não providas pelo TOD clock são preenchidas com zeros.
Se o TOD clock está em estado de erro, o conteúdo do campo é imprevisível.
Se ele está não operacional, é colocado zeros no campo. Exemplo:
STCK
DW
TS (Test and Set – Testar e posicionar)
Código de máquina
93 (Instrução
Condition code
00 Bit mais à
01 Bit mais à
10 Nunca fica
11 Nunca fica
Interrupções Possíveis 0004,0005
S)
esquerda desligado
esquerda ligado
em 10 após um TS
em 11 após um TS
O segundo byte da instrução é ignorado.
O bit mais à esquerda do único byte do operando é testado para ver se está ligado ou desligado; o condition code é
posicionado, e o byte tem todos os seus bits ligados (fica com X'FF'). Exemplo:
TS
BYTE
CS (Compare and Swap – Comparar e Trocar)
Código de máquina
BA (Instrução RS)
Condition code
00 1º e 2º operandos são iguais, o 3. Operando foi
colocado no 2º operando
01 1º e 2º operandos são diferentes, o 2º operando
foi colocado no 1º operando
10 Nunca fica em 10 após um CS
11 Nunca fica em 11 após um CS
Interrupções Possíveis 0004,0005,0006
O primeiro e o terceiro operandos são registradores.
O segundo operando é um campo de memória (full-word).
O conteúdo do registrador 1º operando é comparado com o conteúdo da full-word. Se eles forem iguais, o conteúdo
do registrador 3º operando é colocado na full-word(store). Se eles forem diferentes, o conteúdo da full-word é
colocado no registrador 1º operando (load). Exemplo:
5,8,FW
7D.48.C0.00
7D.48.C0.00
FW
FW
00.BF.C4.20
7D.48.C0.00
Outro exemplo:
CS
5,8,FW
Antes: R5 00.BF.C4.20
R8 7D.48.C0.00
Depois: R5 00.FF.EE.DD
R8 7D.48.C0.00
FW
FW
00.FF.EE.DD
00.FF.EE.DD
Antes: R5
Depois: R5
00.BF.C4.20
00.BF.C4.20
CS
R8
R8
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
137
137
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º operando
01 1º e 2º operandos são diferentes, o 2º operando
foi colocado no 1º operando
10 Nunca fica em 10 após um CDS
11 Nunca fica em 11 após um CDS
Interrupções Possíveis 0004,0005,0006
O primeiro e o terceiro operandos são registradores pares, e são considerados os registradores R1 e R1+1 como 1º
operando, e R3 e R3+1 como 3º operando.
O segundo operando é um campo de memória (double-word).
O conteúdo dos registradores R1 e R1+1 é comparado com o conteúdo da double word. Se eles forem iguais, o
conteúdo dos registradores R3 e R3+1 é colocado na double-word (store). Se eles forem diferentes, o conteúdo da
double-word é colocado nos registradores R1 e R1+1 (load). Exemplo:
CDS
Antes:
4,8,DW
R4/R5
R8/R9
DW
00.BF.C4.20.50.CC.A0.00
7D.48.C0.00.00.00.00.02
00.BF.C4.20.50.CC.A0.00
Depois: R4/R5
R8/R9
DW
00.BF.C4.20.50.CC.A0.00
7D.48.C0.00.00.00.00.02
7D.48.C0.00.00.00.00.02
Outro exemplo:
Antes:
CDS
4,8,DW
R4/R5
R8/R9
DW
00.CC.DD.EE.FF.FF.FF.FF
7D.48.C0.00.00.00.00.02
00.BF.C4.20.50.CC.A0.00
Depois: R4/R5
R8/R9
DW
00.BF.C4.20.50.CC.A0.00
7D.48.C0.00.00.00.00.02
00.BF.C4.20.50.CC.A0.00
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
138
138
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
AGO
AIF
LCLA
LCLB
LCLC
GBLA
GBLB
GBLC
SETA
SETB
SETC
ANOP
AREAD
MHELP
MNOTE
Além desses comandos ao montador, outros existem, específicos para uso na elaboração de macro-instruções, quais
sejam:
MACRO
MEXIT
MEND
As macro instruções podem tanto residir numa biblioteca fonte (onde, normalmente, ele faz busca automática), ou
podem estar no próprio programa que as utiliza. Neste caso, elas devem preceder qualquer statement fonte, e sua
presença é detectada pelo montador através dos comandos que identificam o ponto onde ela(s) começa(m) e
termina(m).
Esses comandos são, respectivamente, o MACRO (indica o início de uma macro-instrução) e o MEND (indica o
seu fim).
O statement que se segue ao MACRO identifica, entre outras coisas, o nome da macro que se está especificando.
Vejamos o aspecto geral de um programa onde se deseja especificar duas macro-instruções, chamadas CALCULA
e EXIBE.
MACRO
(símbolo) CALCULA (parâmetros)
.
especificação da macro
.
MEND
MACRO
(símbolo) EXIBE (parâmetros)
.
especificação da macro
.
MEND
PROGRAMA CSECT
.
.
programa
.
.
.
END
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
139
139
5-2. Símbolos variáveis e de sequência
Para que possamos explorar o universo das macro-instruções, dois conceitos se fazem necessários: SÍMBOLOS
VARIÁVEIS e SÍMBOLOS DE SEQÜÊNCIA, embora eles possam ser utilizados num programa,
independentemente da presença de macro-instruções.
Símbolos VARIÁVEIS são aqueles cujo primeiro caracter é o & (E comercial).
Eles permitem que se faça referência a uma variável, sendo, toda vez que são encontrados pelo montador,
substituídos pelo conteúdo da variável.
Vejamos, por exemplo, o símbolo variável &SYSDATE. Ele se refere a uma variável interna do montador
Assembler, cujo conteúdo é a data corrente, com 8 bytes; se utilizarmos o comando
MINEDATE DC
C'&SYSDATE'
o montador irá gerar
+MINEDATE DC
C'06/04/90'
Existem alguns símbolos variáveis já definidos pelo Assembler. São eles:
&SYSDATE = data (da montagem) no formato da data do sistema (dma ou mda);
se for dma o formato será 8 bytes com dd/mm/aa
&SYSTIME
= hora (da montagem) com 5 bytes no formato hh.mm
&SYSNDX
= contador de macro instruções chamadas. Vejamos este exemplo:
MACRO
MAK1
.
.
.
MEND
MACRO
MAK2
.
.
MAK1
.
.
MEND
.
.
MAK1
nesta chamada, &SYSNDX tem 1
.
MAK1
nesta chamada, &SYSNDX tem 2
.
MAK2
nesta chamada, dentro das instruções de MAK2
&SYSNDX tem 3 e dentro da MAK1 tem 4
.
&SYSNDX sai da chamada de MAK2 com 4
.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
&SYSPARM
140
140
= nele é colocado o conteúdo do SYSPARM (vindo via JCL), para ser
testado durante a montagem (não pode ser modificado).
&SYSLOC
= contém o nome do location counter em uso no momento.
&SYSECT
= tem o nome da seção (CSECT, DSECT ou START) ativa quando a macro
foi chamada. Exemplo:
MACRO
DEFDSEK
NOME
DSECT
A1
DS
CL4
A2
DS
CL4
A3
DS
CL4
&SYSECT CSECT
MEND
&SYSLIST
= recurso para referenciar um parâmetro posicional, sem o uso do
seu símbolo variável. Pode ser usado como &SYSLIST(n) ou como
&SYSLIST(n,m). Supondo a macro
MACRO
MAK
&P1,&P2,&P3
.
.
.
MEND
se nos referirmos a &SYSLIST(1) estaremos nos referenciando a &P1
&SYSLIST(2) refere-se a &P2 e &SYSLIST(3) refere-se a &P3.
Se a macro for chamada da seguinte forma:
MAK ALFA,BETA,GAMA
&SYSLIST(1) vale 'ALFA', &SYSLIST(2) vale 'BETA' e &SYSLIST(3)
vale 'GAMA'.
Pode-se também usar o conceito de sublista (subparâmetros).
Se a macro for chamada da seguinte forma:
MAK (AA,AB,AC),(BA,BB),CC
&SYSLIST(1,1) vale 'AA'
&SYSLIST(1,2) vale 'AB'
&SYSLIST(1,3) vale 'AC'
&SYSLIST(2,1) vale 'BA'
&SYSLIST(2,2) vale 'BB'
&SYSLIST(1) vale 'CC'
Se especificarmos n como zero, será pego o símbolo que tenha sido
colocado na chamada da macro.
Tanto
n quanto m podem ser expressões.
Pode-se referenciar o atributo N'&SYSLIST, que tem o número de
operandos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
141
141
Além desses símbolos variáveis, podemos criar outros, respeitando as seguintes regras:
- máximo 8 caracteres
- primeiro caracter deve ser &
- os demais podem ser letras (A até Z), algarismos decimais (0 até 9), ou então um dos caracteres: $ # @
Os símbolos variáveis definidos através de LCLC ou GBLC podem ser subscritos. Neste caso deve-se usar a forma
&simbolo(p,t) sendo p a primeira posição a ser considerada do string e t o tamanho com que o string deve ser
considerado.
Aos símbolos variáveis e aos ordinários estão associados atributos que descrevem algumas características dos
campos. Os principais atributos são:
L'campo = ATRIBUTO DE TAMANHO = indica o tamanho do campo
T'campo = ATRIBUTO DE TIPO = indica o tipo de campo. Pode ter, entre outros:
O = operando omitido
I = instrução de máquina
C = constante tipo C
P = constante tipo P
S'campo = ATRIBUTO DE ESCALA = pode ser usado para campos numéricos.
No caso de campos binários tem o valor do modificador de escala, e
no caso de campos decimais tem o número de dígitos especificados após o ponto decimal.
I'campo = ATRIBUTO DE INTEIRO = tem um valor que depende do tamanho e do atributo de escala do
campo
K'simbolovariável = ATRIBUTO DE CONTAGEM = tem um número que indica quantos caracteres tem um
operando de macro instrução ou quantos caracteres tem um campo do Assembler definido por SET
N'simbolovariável = ATRIBUTO DE NÚMERO = contém o número de sub-operandos de um operando de
uma macro instrução
D'simboloordinário = ATRIBUTO DE DEFINIÇÃO = indica se o símbolo referenciado foi definido antes
do statement onde o teste usando o D' é feito. Este atributo não tem conteúdo; simplesmente indica
uma condição (que pode ser falsa ou verdadeira) para uso no AIF.
Quanto aos SÍMBOLOS DE SEQUÊNCIA, eles são identificados pelo fato de o primeiro caracter ser um ponto (.).
Os restantes podem ser no máximo 7, e pode-se usar as letras, os algarismos decimais e os símbolos $ # e @.
Os símbolos de sequência são usados para identificar pontos do programa-fonte, de tal forma que possam ser
referenciados em comandos que efetuem desvios condicionais ou incondicionais a esses pontos. Observar que esses
símbolos não fazem parte da Tabela de Símbolos Ordinários, e servem somente para orientação do montador
Assembler, em tempo de montagem, portanto. Adiante veremos mais alguns detalhes.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
142
142
5-3. Expressões
Uma expressão é um conjunto de termos (1 a 19) e dos respectivos operadores aritméticos, que podem ser:
símbolos ordinários, símbolos variáveis, termos auto-definidos e referências a atributos. Na realidade são as
mesmas expressões vistas no item 2-4-2; elas podem ter como termos também os símbolos variáveis.
Uma expressão pode ser usada para especificar: um endereço, um tamanho, um modificador (num DC ou DS), um
fator de duplicação ou um operando.
As expressões podem ser absolutas (independem dos endereços dos símbolos) ou relocáveis (variam de acordo com
o endereço dos símbolos nela usados).
Uma expressão pode ter no máximo 6 níveis de parênteses.
Os operadores podem operar sobre um termo ou sobre dois termos. Ex:
+A opera sobre um termo (só pode ser soma (+) ou subtração (-)
A-B opera sobre dois termos; pode ser soma (+), subtração (-), divisão (/) ou multiplicação (*)
A resolução das expressões é efetuada seguindo-se as seguintes regras:
- cada termo é calculado individualmente
- se a expressão tiver parênteses, o Assembler calcula as expressões mais internas, considerando o seu resultado
como termo da expressão que tinha o parênteses, e assim por diante até a eliminação de todos os níveis de
parênteses
- as operações aritméticas são efetuadas da esquerda para a direita;
primeiro são resolvidas as operações de operadores de um termo,
depois as operações de multiplicação e divisão de operadores de 2 termos
e depois as de soma e subtração de operadores de 2 termos
- na divisão, o resultado considerado é o cociente inteiro, sendo o resto desprezado
- divisão por zero resulta zero
- um termo (ou valores intermediários) pode estar entre -231 e +231-1
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
143
143
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
LCLA
&VL1
&VLA2,&VLA3
LCLB
LCLB
&VLB1
&VLB2,&VLB3
LCLC
LCLC
&VLC1
&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
&VLB1
&VLC1
&VLA2
&VLB2
&VLC2
&VLA3
&VLB3
&VLC3
SETA
SETB
SETC
SETA
SETB
SETC
SETA
SETB
SETC
2
101
'GENTE'
2+&VLA1
1001+11
'ABCDEF'
2+L'CAMPO
1+11+111
'MUDOU'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
144
144
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
GBLA
&VGA1
&VGA2,&VGA3
GBLB
GBLB
&VGB1
&VGB2,&VGB3
GBGB
GBLC
&VGB1
&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
&VGB1
&VGC1
&VGA2
&VGB2
&VGC2
&VGA3
&VGB3
&VGC3
SETA
SETB
SETC
SETA
SETB
SETC
SETA
SETB
SETC
2
101
'GENTE'
2+&VLA1
1001+11
'ABCDEF'
2+L'CAMPO
1+11+111
'MUDOU'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
145
145
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:
.TESTE
MACRO
YYY
.
.
.
ANOP
.
.
.
MEND
MNOTE
O comando MNOTE tem por finalidade exibir uma mensagem de aviso ao programa. O aviso pode ser tanto um
comentário quanto uma mensagem de erro. Seu formato é o seguinte:
MNOTE
codigoseveridade,'mensagem'
O código de severidade pode ser * , o que indica simples comentário; a vantagem em relação ao * na posição 1 é
que o Assembler faz no MNOTE a substituição dos símbolos variáveis. Exemplo:
MACRO
QUALKER &PARAM
MNOTE *,'O PARAMETRO INFORMADO FOI &PARAM'
DC
C'&PARAM'
MEND
Uma chamada da macro desta forma:
+
+
QUALKER ALBERTO
ao ser expandida geraria:
*,O PARAMETRO INFORMADO FOI ALBERTO
DC
C'ALBERTO'
O código de severidade, quando diferente de * (um número de 0 a 255) indica um erro de montagem, e está
associado ao PARM do montador. Se o sub-parâmetro FLAG do PARM estiver com FLAG(0), que é o default, as
mensagens de erro dos MNOTE com código de severidade zero ou maior serão listadas como erro. FLAG(8) irá
suprimir mensagens de erro para as mensagens com código de severidade 0 a 7.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
146
146
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
simbolovariavel
simbolovariavel
AREAD
AREAD
AREAD
NOSTMT
NOPRINT
ou
ou
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
+
DC
MEXAR
+
DC
+
DC
END
C'PRIMEIRA LEITURA VIA AREAD DA PRIMEIRA CHAMADA DA MEXAR'
C'SEGUNDA LEITURA VIA AREAD DA PRIMEIRA CHAMADA DA MEXAR'
C'PRIMEIRA LEITURA DA SEGUNDA CHAMADA DA MEXAR '
C'SEGUNDA LEITURA DA SEGUNDA CHAMADA DA MEXAR'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
147
147
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
MHELP 1
MHELP 256+1
limita a &SYSNDX a 256
trace macro calls
limita &SYSNDX a 257 e faz trace dos macros calls
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
148
148
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:
.LUP
MACRO
XXXXX
LCLA &A
ACTR 1000
.
.
.
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
sequência)
AIF (expressão operador expressão)símbolodesequência
Vejamos alguns exemplos:
.TESTE
AIF (&A LT &B).AMENOR
AIF ('&PRM1' NE '').VEIOPR1
AIF (&VGA1+1 EQ 99).JAFEZ
Os operadores podem ser:
EQ
NE
LT
GT
LE
GE
(equal to - igual a)
(not equal to - diferente de)
(less than - menor que)
(greater than - maior que)
(less or equal to - menor ou igual)
(greater than or equal to - maior ou igual).
Dentro da especificação pode-se também utilizar os operadores lógicos AND ou OR, como por exemplo:
AIF (&A GT 5 OR &A LT 9).NAFAIXA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
149
149
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:
X
Y
Z
MACRO
MACPA1
DC
DC
DC
MEND
&P1,&P2,&P3
A(&P1)
A(&P2)
A(&P3)
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
então seria gerado:
MACPA1 FLD,,CPO
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
X
.NG1
Y
.NG2
Z
.NG3
MACRO
MACPA1
AIF
DC
AIF
DC
AIF
DC
ANOP
MEND
OU ENTÃO
&P1,&P2,&P3
('&P1' EQ '').NG1
A(&P1)
('&P2' EQ '').NG2
A(&P2)
('&P3' EQ '').NG3
A(&P3)
X
.NG1
Y
.NG2
Z
.NG3
MACRO
MACPA1
AIF
DC
AIF
DC
AIF
DC
ANOP
MEND
&P1,&P2,&P3
(T'&P1 EQ 'O').NG1
A(&P1)
(T'&P2 EQ 'O').NG2
A(&P2)
(T'&P3 EQ 'O').NG3
A(&P3)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
150
150
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:
X
Y
Z
MACRO
MACPA1
DC
DC
DC
MEND
&P2=,&P1=,&P3=
A(&P1)
A(&P2)
A(&P3)
Neste caso, nenhum dos parâmetros tem valor default, de forma que se fosse feita uma chamada da macro com
seria gerado:
MACPA1 P3=FLD,P2=FFF,P1=TT
DC
DC
DC
A(TT)
A(FFF)
A(FLD)
Mas, se a chamada fosse feita com
DC
DC
DC
MACPA1 P3=FLD,P1=TT
seria gerado:
A(TT)
A()
A(FLD)
Caso a macro tivesse sido definida assim:
X
Y
Z
MACRO
MACPA1
DC
DC
DC
MEND
e a sua chamada fosse
DC
DC
DC
&P2=KKK,&P1=WWW,&P3=YYY
A(&P1)
A(&P2)
A(&P3)
MACPA1 P3=FLD,P1=TT
seria gerado:
A(TT)
A(KKK)
A(FLD)
Portanto, se não houver valores default, e o conteúdo for necessário para efeito de sintaxe, cabe à macro testar se
o(s) parâmetro(s) foi(foram) informado(s) ou não, para gerar os statements adequadamente.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
151
151
5-9. Funcionamento das macros - exemplos
5-9-1 Macro sem símbolo e sem parâmetros
MACRO
SIMPLES
DC
C'CAMPO GERADO PELA MACRO SIMPLES'
MEND
EXMAC001 START
.
.
.
SIMPLES
+
DC
C'CAMPO GERADO PELA MACRO SIMPLES'
.
.
.
SIMPLES
+
DC
C'CAMPO GERADO PELA MACRO SIMPLES'
.
.
.
END
5-9-2 Macro com símbolo fixo e sem parâmetros
MACRO
MACSIM
NOME
DC
C'CAMPO GERADO PELA MACRO MACSIM'
MEND
EXMAC002 START
.
.
.
MACSIM
+NOME
DC
C'CAMPO GERADO PELA MACRO MACSIM'
.
.
.
MACSIM
+NOME
DC
C'CAMPO GERADO PELA MACRO MACSIM'
.
.
.
END
Observar que neste caso, haveria erro de montagem, à medida em que foi definido mais do que um campo com o
mesmo símbolo. Cabe ao programador, sabendo das convenções e limitações de uma macro em particular, não
transgredir essas normas, pois o erro não é, neste caso, da macro, e sim originário do fato de ela ter sido
impropriamente chamada duas vezes.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
MACTOK &VAL
DC
F'&VAL'
MEND
EXMAC004 START
.
.
CIDA
MACTOK 256
+CIDA
DC
F'256'
.
.
DIANA
MACTOK 100
+DIANA
DC
F'100'
.
.
ELISA
MACTOK
+ELISA
DC
F''
.
.
END
&JJJ
&JJJ
Esta chamada causaria erro de montagem
152
152
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
5-9-5 Macro com símbolo variável e com 2 parâmetros posicionais
MACRO
MACTIK &VALX,&VALY
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
+HEBE
DC
F'300,'
.
.
IEDA
MACTIK ,300
+IEDA
DC
F',300'
.
.
END
&KKK
&KKK
Esta chamada causaria erro de montagem
Esta chamada causaria erro de montagem
5-9-6 Macro com símbolo variável e com 1 parâmetro keyword (sem default)
MACRO
MACTAK &VAL=
DC
F'&VAL'
MEND
EXMAC006 START
.
.
JULIA
MACTAK VAL=256
+JULIA
DC
F'256'
.
.
.
MACTAK
.
END
&LL
&LL
Esta chamada causaria erro de montagem,, pois
não foi especificado o parâmetro
153
153
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
5-9-7 Macro com símbolo variável e com 1 parâmetro keyword (com default)
MACRO
MACTEK &VAL=06
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
&MVVB
&MVVB
5-9-8 Macro com símbolo variável e com 2 parâmetros keyword (sem default)
MACRO
MACTUK &VAL=,&NUM=
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
.
.
MACTUK VAL=99
.
.
MACTUK
.
.
END
&TA
&TA
Esta chamada causaria erro de montagem,
pois VAL não foi especificado
Esta chamada causaria erro de montagem,
pois NUM não foi especificado
Esta chamada causaria erro de montagem
pois não foram especificados parâmetros
154
154
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
5-9-9 Macro com símbolo variável e com 2 parâmetros keyword (com default)
MACRO
MACTOO &VAL=19,&NUM=54
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
&TOO
&TOO
155
155
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
A P E N D I C E S
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
APÊNDICE
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
-
INSTRUÇÕES DE MÁQUINA
TABELA DE POTÊNCIAS
TABELA DE CARACTERES EBCDIC
TABELA DE CARACTERES ASCII
CARACTERES DE CONTROLE (Impressão)
INTERRUPÇÕES POR ERRO DE PROGRAMA
TRUQUES ÚTEIS A PROGRAMAS ASSEMBLER
ALGUMAS MACROS MVS
EXEMPLO DE PROGRAMA EM MVS
ALGUMAS MACROS VSE
EXEMPLO DE PROGRAMA EM VSE
ALGUMAS MACROS VM
EXEMPLO DE PROGRAMA EM VM
MACROS XEGUEI E TCHAU
EXEMPLO 1 DE SUBROTINA
EXEMPLO 2 DE SUBROTINA
MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 1
MONTAGEM DE PROGRAMA DE DEMONSTRAÇÃO 2
156
156
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
157
157
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)
b)
c)
d)
e)
código mnemônico Assembler.
código de operação
tipo de instrução
posicionamento do Condition Code (se tiver S, a instrução o posiciona)
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
00
02
03
08
09
52
53
61
62
63
64
65
66
71
72
73
74
75
76
77
81
84
85
9C
9D
9E
9F
Tipo
CC
PF/IPQ
-------------------------------------------------------------------------------------------------------------
-
-------------------------------------------------------
Mnemônico
-----PR
UPT
----------SPM
BALR
BCTR
BCR
----------SVC
BSM
BASSM
BASR
MVCL
CLCL
LPR
LNR
LTR
LCR
NR
CLR
OR
XR
LR
CR
Cod.Instr
00
0101
0102
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
Tipo
----E
E
--------RR
RR
RR
RR
--------RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
CC
PF/IPQ
S
S
-
--Q
I
-----
-
-----
S
S
S
S
S
S
S
S
S
S
I
I
S
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
158
158
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Cod.Instr
A0
A1
A2
A3
A7
A8
A9
AA
AB
B0
B3
B4
B5
B8
B9
BC
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D8
E0
E1
E2
E3
E6
E7
E9
EA
EB
EC
ED
EE
EF
F4
Tipo
CC
PF/IPQ
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
-
-------------------------------------------------------------------------------------------------
Mnemônico
AR
SR
MR
DR
ALR
SLR
LPDR
LNDR
LTDR
LCDR
HDR
LRDR
MXR
MXDR
LDR
CDR
ADR
SDR
MDR
DDR
AWR
SWR
LPER
LNER
LTER
LCER
HER
LRER
AXR
SXR
LER
CER
AER
SER
MER
DER
AUR
SUR
STH
LA
STC
IC
EX
BAL
BCT
BC
LH
CH
Cod.Instr
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
Tipo
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RR
RX
RX
RX
RX
RX
RX
RX
RX
RX
RX
CC
PF/IPQ
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
PF
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
159
159
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
Cod.Instr
-------------------------A
AD
ADR
AE
AER
AH
AL
ALR
AP
AR
AU
AUR
AW
AWR
AXR
BAKR
BAL
BALR
BAS
BASR
BASSM
BC
BCR
BCT
BCTR
BSM
BXH
BXLE
C
CD
CDR
CDS
CE
CER
CFC
CH
CL
CLC
CLCL
CLI
CLM
CLR
CP
F5
F6
F7
FE
FF
5A
6A
2A
7A
3A
4A
5E
1E
FA
1A
7E
3E
6E
2E
36
B240
45
05
4D
0D
0C
47
07
46
06
0B
86
87
59
69
29
BB
79
39
B21A
49
55
D5
0F
95
BD
15
F9
Tipo
--------------------RX
RX
RR
RX
RR
RX
RX
RR
SSt1t2
RR
RX
RR
RX
RR
RR
RRE
RX
RR
RX
RR
RR
RX
RR
RX
RR
RR
RS
RS
RX
RX
RR
RS
RX
RR
S
RX
RX
SS/L
RR
SI
RS
RR
SSt1t2
CC
PF/IPQ
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
-----------
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PF
PF
PF
PF
PF
PF
PF
PF
PF
Q
PF
PF
PF
PF
Mnemônico
AH
SH
MH
BAS
CVD
CVB
ST
LAE
----------N
CL
O
X
L
C
A
S
M
D
AL
SL
STD
------------------------------MXD
LD
CD
AD
SD
MD
DD
AW
SW
STE
----------------------------------LE
CE
Cod.Instr
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
Tipo
RX
RX
RX
RX
RX
RX
RX
RX
--------RX
RX
RX
RX
RX
RX
RX
RX
RX
RX
RX
RX
RX
------------------------RX
RX
RX
RX
RX
RX
RX
RX
RX
RX
------------------------RX
RX
CC
PF/IPQ
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
---
-----
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
160
160
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
CPYA
CR
CS
CSCH
CVB
CVD
D
DD
DDR
DE
DER
Diagnose
DP
DR
DXR
EAR
ED
EDMK
EPAR
EREG
ESAR
ESTA
EX
HDR
HER
HSCH
IAC
IC
ICM
IPK
IPM
IPTE
ISKE
IVSK
L
LA
LAE
LAM
LASP
LCDR
LCER
LCR
LCTL
LD
LDR
LE
LER
LH
Cod.Instr
B24D
19
BA
B230
4F
4E
5D
6D
2D
7D
3D
83
FD
1D
B22D
B24F
DE
DF
B226
B249
B227
B24A
44
24
34
B231
B224
43
BF
B20B
B222
B221
B229
B223
58
41
51
9A
E500
23
33
13
B7
68
28
78
38
48
Tipo
RRE
RR
RS
S
RX
RX
RX
RX
RR
RX
RR
SSt1t2
RR
RRE
RRE
SS/L
SS/L
RRE
RRE
RRE
RRE
RX
RR
RR
S
RRE
RX
RS
S
RRE
RRE
RRE
RRE
RX
RX
RX
RS
SSE
RR
RR
RR
RS
RX
RR
RX
RR
RX
CC
S
S
S
(2)
PF/IPQ
P
PF
PF
PF
PF
PF
S
S
S
Q
Q
Q
Q
S
S
PF
PF
P
Q
S
Q
P
P
Q
S
S
S
S
P
PF
PF
P
PF
PF
PF
PF
Mnemônico
AE
SE
ME
DE
AU
SU
SSM
-----LPSW
Diagnose
----------BXH
BXLE
SRL
SLL
SRA
SLA
SRDL
SLDL
SRDA
SLDA
STM
TM
MVI
TS
NI
CLI
OI
XI
LM
TRACE
LAM
STAM
----------------------------------------VAE
VSE
VME
VDE
VMAE
VMSE
Cod.Instr
7A
7B
7C
7D
7E
7F
80
81
82
83
84
85
86
87
88
89
8A
8B
8C
8D
8E
8F
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
9D
9E
9F
A0
A1
A2
A3
A400
A401
A402
A403
A404
A405
Tipo
RX
RX
RX
RX
RX
RX
S
----S
--------RS
RS
RS
RS
RS
RS
RS
RS
RS
RS
RS
SI
SI
S
SI
SI
SI
SI
RS
RS
RS
RS
--------------------------------VST
VST
VST
VST
VST
VST
CC
S
S
S
S
(1)
(2)
-
S
S
PF/IPQ
PF
PF
PF
PF
PF
PF
P
--P
-----
P
S
S
S
S
S
S
S
S
P
-
-----------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
161
161
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO--------Mnemônico
Cod.Instr
LM
LNDR
LNER
LNR
LPDR
LPER
LPR
LPSW
LR
LRA
LRDR
LRER
LTDR
LTER
LTR
LURA
M
MC
MD
MDR
ME
MER
MH
MP
MR
MSCH
MSTA
MVC
MVCDK
MVCIN
MVCK
MVCL
MVCP
MVCS
MVCSK
MVI
MVN
MVO
MVZ
MXD
MXDR
MXR
N
NC
NI
NR
O
OC
98
21
31
11
20
30
10
82
18
B1
25
35
22
32
12
B24B
5C
AF
6C
2C
7C
3C
4C
FC
1C
B232
B247
D2
E50F
E8
D9
0E
DA
DB
E50E
92
D1
F1
D3
67
27
26
54
D4
94
14
56
D6
Tipo
RS
RR
RR
RR
RR
RR
RR
S
RR
RX
RR
RR
RR
RR
RR
RRE
RX
SI
RX
RR
RX
RR
RX
SSt1t2
RR
S
RRE
SS/L
SSE
SS/L
SSr1r2
RR
SSr1r2
SSr1r2
SSE
SI
SS/L
SSt1t2
SS/L
RX
RR
RR
RX
SS/L
SI
RR
RX
SS/L
CC
PF/IPQ
S
S
S
S
S
S
PF
PF
S
P
PF
PF
PF
PF
PF
PF
P
(1)
S
S
S
P
PF
PF
PF
PF
S
P
Q
Q
S
S
S
S
S
S
S
S
S
S
Q
I
Q
Q
Q
PF
PF
PF
Mnemônico
Cod.Instr
VMCE
VACE
VCE
VL
VLE
VLM
VLME
VLY
VLYE
VST
VSTE
VSTM
VSTME
VSTK
VSTKE
VAD
VSD
VMD
VDD
VMAD
VMSD
VMCD
VACD
VCD
VLD
VLMD
VLYD
VSTD
VSTMD
VSTKD
VA
VS
VM
VN
VO
VX
VC
VLH
VLINT
VSTH
VAES
VSES
VMES
VDES
VMAES
VMSES
VCES
VADS
A406
A407
A408
A409
A409
A40A
A40A
A40B
A40B
A40D
A40D
A40E
A40E
A40F
A40F
A410
A411
A412
A413
A414
A415
A416
A417
A418
A419
A41A
A41B
A41D
A41E
A41F
A420
A421
A422
A424
A425
A426
A428
A429
A42A
A42D
A480
A481
A482
A483
A484
A485
A488
A490
Tipo
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
QST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
VST
QST
QST
QST
QST
QST
QST
QST
QST
CC
PF/IPQ
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
162
162
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
OI
OR
PACK
PALB
PC
PR
PT
PTLB
RCHP
RRBE
RSCH
S
SAC
SAL
SAR
SCHM
SCK
SCKC
SD
SDR
SE
SER
SH
SIE
SIGP
SL
SLA
SLDA
SLDL
SLL
SLR
SP
SPKA
SPM
SPT
SPX
SR
SRA
SRDA
SRDL
SRL
SRP
SSAR
SSCH
SSKE
SSM
ST
STAM
Cod.Instr
96
16
F2
B248
B218
0101
B228
B20D
B23B
B22A
B238
5B
B219
B237
B24E
B23C
B204
B206
6B
2B
7B
3B
4B
B214
AE
5F
8B
8F
8D
89
1F
FB
B20A
04
B208
B210
1B
8A
8E
8C
88
F0
B225
B233
B22B
80
50
9B
Tipo
SI
RR
SSt1t2
RRE
S
E
RRE
S
S
RRE
S
RX
S
S
RRE
S
S
S
RX
RR
RX
RR
RX
S
RS
RX
RS
RS
RS
RS
RR
SSt1t2
S
RR
S
S
RR
RS
RS
RS
RS
SSt1i3
RRE
S
RRE
S
RX
RS
CC
PF/IPQ
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
P
Q
Q
Q
P
P
P
P
Q
P
P
P
P
PF
PF
PF
PF
IP
P
Q
P
P
P
Q
P
P
P
Mnemônico
Cod.Instr
VSDS
VMDS
VDDS
VMADS
VMSDS
VCDS
VAS
VSS
VMS
VNS
VOS
VXS
VCS
VAER
VSER
VMER
VDER
VMCER
VACER
VCER
VLER
VLR
VLMER
VLMR
VLZER
VLZR
VADR
VSDR
VMDR
VDDR
VMCDR
VACDR
VCDR
VLDR
VLMDR
VLZDR
VAR
VSR
VMR
VNR
VOR
VXR
VCR
VLPER
VLNER
VLCER
VLPDR
VLNDR
A491
A492
A493
A494
A495
A498
A4A0
A4A1
A4A2
A4A4
A4A5
A4A6
A4A8
A500
A501
A502
A503
A506
A507
A508
A509
A509
A50A
A50A
A50B
A50B
A510
A511
A512
A513
A516
A517
A518
A519
A51A
A51B
A520
A521
A522
A524
A525
A526
A528
A540
A541
A542
A550
A551
Tipo
QST
QST
QST
QST
QST
QST
QST
QST
QST
QST
QST
QST
QST
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
VV
CC
VV
PF/IPQ
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
163
163
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
Cod.Instr
STAP
STC
STCK
STCKC
STCM
STCPS
STCRW
STCTL
STD
STE
STH
STIDP
STM
STNSM
STOSM
STPT
STPX
STSCH
STURA
SU
SUR
SVC
SW
SWR
SXR
TAR
TB
TM
TPI
TPROT
TR
TRACE
TRT
TS
TSCH
UNPK
UPT
VA
VACD
VACDR
VACE
VACER
VACRS
VACSV
VAD
VADQ
VADR
VADS
B212
42
B205
B207
BE
B23A
B239
B6
60
70
40
B202
90
AC
AD
B209
B211
B234
B246
7F
3F
0A
6F
2F
37
B24C
B22C
91
B236
E501
DC
99
DD
93
B235
F3
0102
A420
A417
A517
A407
A507
A6CB
A6CA
A410
A590
A510
A490
Tipo
S
RX
S
S
RS
S
S
RS
RX
RX
RX
S
RS
S
S
S
S
S
RRE
RX
RR
RR
RX
RR
RR
RRE
RRE
SI
S
SSE
SS/L
RS
SS/L
S
S
SSt1t2
E
VST
VST
VV
VST
VV
S
S
VST
QV
VV
QST
CC
S
S
PF/IPQ
Mnemônico
Cod.Instr
P
VLCDR
VLPR
VLNR
VLCR
VAEQ
VSEQ
VMEQ
VDEQ
VMAEQ
VMSEQ
VCEQ
VLEQ
VLMEQ
VADQ
VSSDQ
VMDQ
VDDQ
VMADQ
VMSDQ
VCDQ
VLDQ
VLMDQ
VAQ
VSQ
VMQ
VNQ
VOQ
VXQ
VCQ
VLQ
VLMQ
VMXSE
VMNSE
VMXAE
VLELE
VXELE
VMXSD
VMNSD
VMXAD
VLELD
VXELD
VSPSD
VZPSD
VLEL
VXEL
VTVM
VCVM
VCZVM
A552
A560
A561
A562
A580
A581
A582
A583
A584
A585
A588
A589
A58A
A590
A591
A592
A593
A594
A595
A596
A599
A59A
A5A0
A5A1
A5A2
A5A4
A5A5
A5A6
A5A8
A5A9
A5AA
A600
A601
A602
A608
A609
A610
A611
A612
A618
A619
A61A
A61B
A628
A629
A640
A641
A642
P
P
P
P
PF
PF
P
S
S
S
S
S
S
S
S
S
S
S
S
S
S
P
P
P
P
P
P
PF
PF
PF
PF
PF
Q
P
P
P
P
P
S
P
P
Tipo
VV
VV
VV
VV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
QV
VR
VR
VR
VR
VR
VR
VR
VR
VR
VR
VR
VR
VR
VR
RRE
RRE
RRE
CC
S
PF/IPQ
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
164
164
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
Cod.Instr
VAE
VAEQ
VAER
VAES
VAQ
VAR
VAS
VC
VCD
VCDQ
VCDR
VCDS
VCE
VCEQ
VCER
VCES
VCOVM
VCQ
VCR
VCS
VCVM
VCZVM
VDD
VDDQ
VDDR
VDDS
VDE
VDEQ
VDER
VDES
VL
VLBIX
VLCDR
VLCER
VLCR
VLCVM
VLD
VLDQ
VLDR
VLE
VLEL
VLELD
VLELE
VLEQ
VLER
VLH
VLI
VLID
A400
A580
A500
A480
A5A0
A520
A4A0
A428
A418
A596
A518
A498
A408
A588
A508
A488
A643
A5A8
A528
A4A8
A641
A642
A413
A593
A513
A493
A403
A583
A503
A483
A409
E428
A552
A542
A562
A681
A419
A599
A519
A409
A628
A618
A608
A589
A509
A429
E400
E410
Tipo
VST
QV
VV
QST
QV
VV
QST
VST
VST
QV
VV
QST
VST
QV
VV
QST
RRE
QV
VV
QST
RRE
RRE
VST
QV
VV
QST
VST
QV
VV
QST
VST
RSE
VV
VV
VV
VS
VST
QV
VV
VST
VR
VR
VR
QV
VV
VST
RSE
RSE
CC
S
S
S
PF/IPQ
Mnemônico
VCOVM
VXVC
VLVCU
VXVMM
VRRS
VRSVC
VRSV
VLVM
VLCVM
VSTVM
VNVM
VOVM
VXVM
VSRSV
VMRSV
VSRRS
VMRRS
VLVCA
VRCL
VSVMM
VSTVP
VACSV
VACRS
-------------------------STNSM
STOSM
SIGP
MC
-----LRA
STIDP
SCK
STCK
SCKC
STCKC
SPT
STPT
SPKA
PK
PTLB
SPX
STPX
STAP
SIE
Cod.Instr
A643
A644
A645
A646
A648
A649
A64A
A680
A681
A682
A684
A685
A686
A6C0
A6C1
A6C2
A6C3
A6C4
A6C5
A6C6
A6C8
A6CA
A6CB
A7
A8
A9
AA
AB
AC
AD
AE
AF
B0
B1
B202
B204
B205
B206
B207
B208
B209
B20A
B20B
B20D
B210
B211
B212
B214
Tipo
RRE
RRE
RRE
RRE
RRE
RRE
RRE
VS
VS
VS
VS
VS
VS
S
S
S
S
S
S
S
S
S
S
--------------------SI
SI
RS
SI
----RX
S
S
S
S
S
S
S
S
S
S
S
S
S
S
CC
PF/IPQ
S
S
S
S
S
S
S
P
P
----------P
P
P
--P
P
P
P
P
P
P
Q
Q
P
P
P
P
IP
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
165
165
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
Cod.Instr
VLIE
VLINT
VLM
VLMD
VLMDQ
VLMDR
VLME
VLMEQ
VLMER
VLMQ
VLMR
VLNDR
VLNER
VLNR
VLPDR
VLPER
VLPR
VLQ
VLR
VLVCA
VLVCU
VLVM
VLY
VLYD
VLYE
VLZDR
VLZER
VLZR
VM
VMAD
VMADQ
VMADS
VMAE
VMAEQ
VMAES
VMCD
VMCDR
VMCE
VMCER
VMD
VMDQ
VMDR
VMDS
VME
VMEQ
VMER
VMES
VMNSD
E400
A42A
A40A
A41A
A59A
A51A
A40A
A58A
A50A
A5AA
A50A
A551
A541
A561
A550
A540
A560
A5A9
A509
A6C4
A645
A680
A40B
A41B
A40B
A51B
A50B
A50B
A422
A414
A594
A494
A404
A584
A484
A416
A516
A406
A506
A412
A592
A512
A492
A402
A582
A502
A482
A611
Tipo
RSE
VST
VST
VST
QV
VV
VST
QV
VV
QV
VV
VV
VV
VV
VV
VV
VV
QV
VV
S
RRE
VS
VST
VST
VST
VV
VV
VV
VST
VST
QV
QST
VST
QV
QST
QST
VV
VST
VV
VST
QV
VV
QST
VST
QV
VV
QST
VR
CC
S
S
PF/IPQ
Mnemônico
PC
SAC
CFC
IPTE
IPM
IVSK
IAC
SSAR
EPAR
ESAR
PT
ISKE
RRBE
SSKE
TB
DXR
CSCH
HSCH
MSCH
SSCH
STSCH
TSCH
TPI
SAL
RSCH
STCRW
STCPS
RCHP
SCHM
BAKR
STURA
MSTA
PALB
EREG
ESTA
LURA
TAR
CPYA
SAR
EAR
---------------STCTL
LCTL
----------CS
Cod.Instr
B218
B219
B21A
B221
B222
B223
B224
B225
B226
B227
B228
B229
B22A
B22B
B22C
B22D
B230
B231
B232
B233
B234
B235
B236
B237
B238
B239
B23A
B23B
B23C
B240
B246
B247
B248
B249
B24A
B24B
B24C
B24D
B24E
B24F
B3
B4
B5
B6
B7
B8
B9
BA
Tipo
S
S
S
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
S
S
S
S
S
S
S
S
S
S
S
S
S
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
RRE
------------RS
RS
--------RS
CC
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
S
PF/IPQ
Q
Q
I
P
Q
Q
Q
Q
Q
Q
P
P
P
P
PF
P
P
P
P
P
P
P
P
P
P
P
P
P
Q
P
Q
P
Q
Q
P
Q
------P
P
-----
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
166
166
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
Cod.Instr
VMNSE
VMQ
VMR
VMRRS
VMRSV
VMS
VMSD
VMSDQ
VMSDS
VMSE
VMSEQ
VMSES
VMXAD
VMXAE
VMXSD
VMXSE
VN
VNQ
VNR
VNS
VNVM
VO
VOQ
VOR
VOS
VOVM
VRCL
VRRS
VRSV
VRSVC
VS
VSD
VSDQ
VSDR
VSDS
VSE
VSEQ
VSER
VSES
VSLL
VSPSD
VSQ
VSR
VSRL
VSRRS
VSRSV
VSS
VST
A601
A5A2
A522
A6C3
A6C1
A4A2
A415
A595
A495
A405
A585
A485
A612
A602
A610
A600
A424
A5A4
A524
A4A4
A684
A425
A5A5
A525
A4A5
A685
A6C5
A648
A64A
A649
A421
A411
A591
A511
A491
A401
A581
A501
A481
E425
A61A
A5A1
A521
E424
A6C2
A6C0
A4A1
A40D
Tipo
VR
QV
VV
S
S
QST
VST
QV
QST
VST
QV
QST
VR
VR
VR
VR
VST
QV
VV
QST
VS
VST
QV
VV
QST
VS
S
RRE
RRE
RRE
VST
VST
QV
VV
QST
VST
QV
VV
QST
RSE
VR
QV
VV
RSE
S
S
QST
VST
CC
PF/IPQ
Mnemônico
CDS
-----CLM
STCM
ICM
-------------------------------------------------------------------------------------MVN
MVC
MVZ
NC
CLC
OC
XC
-----MVCK
MVCP
MVCS
TR
TRT
ED
EDMK
--------------------VLI
VLIE
VSTI
VSTIE
VLID
VSTID
VSRL
Cod.Instr
Tipo
BB
BC
BD
BE
BF
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E400
E400
E401
E401
E410
E411
E424
RS
----RS
RS
RS
--------------------------------------------------------------------SS/L
SS/L
SS/L
SS/L
SS/L
SS/L
SS/L
----SSr1r2
SSr1r2
SSr1r2
SS/L
SS/L
SS/L
SS/L
----------------RSE
RSE
RSE
RSE
RSE
RSE
RSE
CC
PF/IPQ
S
S
---
S
-
-----------------------------------
S
S
S
S
S
S
S
--Q
Q
Q
S
S
S
-
---------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
167
167
----- ORDEM ALFABÉTICA MNEMÔNICO -----*----- ORDEM CÓDIGO INSTRUÇÃO --------Mnemônico
Cod.Instr
VSTD
VSTE
VSTH
VSTI
VSTID
VSTIE
VSTK
VSTKD
VSTKE
VSTM
VSTMD
VSTME
VSTVM
VSTVP
VSVMM
VTVM
VX
VXEL
VXELD
VXELE
VXQ
VXR
VXS
VXVC
VXVM
VXVMM
VZPSD
X
XC
XI
XR
ZAP
A41D
A40D
A42D
E401
E411
E401
A40F
A41F
A40F
A40E
A41E
A40E
A682
A6C8
A6C6
A640
A426
A629
A619
A609
A5A6
A526
A4A6
A644
A686
A646
A61B
57
D7
97
17
F8
Tipo
VST
VST
VST
RSE
RSE
RSE
VST
VST
VST
VST
VST
VST
VS
S
S
RRE
VST
VR
VR
VR
QV
VV
QST
RRE
VS
RRE
VR
RX
SS/L
SI
RR
SSt1t2
CC
S
S
S
S
S
PF/IPQ
Mnemônico
VSLL
VLBIX
LASP
TPROT
MVCSK
MVCDK
----------MVCIN
-----------------------------------SRP
MVO
PACK
UNPK
--------------------ZAP
CP
AP
SP
MP
DP
-----------
Cod.Instr
Tipo
E425
E428
E500
E501
E50E
E50F
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
RSE
RSE
SSE
SSE
SSE
SSE
--------SS/L
----------------------------SSt1I3
SSt1t2
SSt1t2
SSt1t2
----------------SSt1t2
SSt1t2
SSt1t2
SSt1t2
SSt1t2
SSt1t2
---------
CC
S
S
S
-
PF/IPQ
P
P
Q
Q
-----
S
---------------
S
S
S
S
---------
-
-----
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
168
168
APÊNDICE B - Tabelas de potências de 2 e 16
POTÊNCIAS DE 2 E DE 16
16**00 = 2**00
2**01
2**02
2**03
16**01 = 2**04
2**05
2**06
2**07
16**02 = 2**08
2**09
2**10
2**11
16**03 = 2**12
2**13
2**14
2**15
16**04 = 2**16
2**17
2**18
2**19
16**05 = 2**20
2**21
2**22
2**23
16**06 = 2**24
2**25
2**26
2**27
16**07 = 2**28
2**29
2**30
2**31
1K = 1024
=
1
=
2
=
4
=
8
=
16
=
32
=
64
=
128
=
256
=
512
=
1.024
=
2.048
=
4.096
=
8.192
=
16.384
=
32.768
=
65.536
=
131.072
=
262.144
=
524.288
=
1.048.576
=
2.097.152
=
4.194.304
=
8.388.608
=
16.777.216
=
33.554.432
=
67.108.864
=
134.217.728
=
268.435.456
=
536.870.912
= 1.073.741.824
= 2.147.483.648
1M = 1.048.576
16**08 = 2**32
2**33
2**34
2**35
16**09 = 2**36
2**37
2**38
2**39
16**10 = 2**40
2**41
2**42
2**43
16**11 = 2**44
2**45
2**46
2**47
16**12 = 2**48
2**49
2**50
2**51
16**13 = 2**52
2**53
2**54
2**55
16**14 = 2**56
2**57
2**58
2**59
16**15 = 2**60
2**61
2**62
16**00 = 2**63
1G = 1.073.741.824
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
4.294.967.296
8.589.934.592
17.179.869.184
34.359.738.368
68.719.476.736
137.438.953.472
274.877.906.944
549.755.813.888
1.099.511.627.776
2.199.023.255.552
4.398.046.511.104
8.796.093.022.208
17.592.186.044.416
35.184.372.088.832
70.368.744.177.664
140.737.488.355.328
281.474.976.710.656
562.949.953.421.312
1.125.899.906.842.624
2.251.799.813.685.248
4.503.599.627.370.496
9.007.199.254.740.992
18.014.398.509.481.984
36.028.797.018.963.968
72.057.594.037.927.936
144.115.188.075.855.872
288.230.376.151.711.744
576.460.752.303.423.488
1.152.921.504.606.846.976
2.305.843.009.213.693.952
4.611.686.018.427.387.904
9.223.372.036.854.775.808
1T = 1.099.511.627.776
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
POTÊNCIAS DE 16 MULTIPLICADAS POR 0...15
POTÊNCIA 0
POTÊNCIA 1
POTÊNCIA 2
POTÊNCIA 3
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
16
32
48
64
80
96
112
128
144
160
176
192
208
224
240
0
256
512
768
1.024
1.280
1.536
1.792
2.048
2.304
2.560
2.816
3.072
3.328
3.584
3.840
0
4.096
8.192
12.288
16.384
20.480
24.576
28.672
32.768
36.864
40.960
45.056
49.152
53.248
57.344
61.440
POTÊNCIA 4
POTÊNCIA 5
POTÊNCIA 6
POTÊNCIA 7
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
00
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
0
65.536
131.072
196.608
262.144
327.680
393.216
458.752
524.288
589.824
655.360
720.896
786.432
851.968
917.504
983.040
0
1.048.576
2.097.152
3.145.728
4.194.304
5.242.880
6.291.456
7.340.032
8.388.608
9.437.184
10.485.760
11.534.336
12.582.912
13.631.488
14.680.064
15.728.640
0
16.777.216
33.554.432
50.331.648
67.108.864
83.886.080
100.663.296
117.440.512
134.217.728
150.994.944
167.772.160
184.549.376
201.326.592
218.103.808
234.881.024
251.658.240
0
268.435.456
536.870.912
805.306.368
1.073.741.824
1.342.177.280
1.610.612.736
1.879.048.192
2.147.483.648
2.415.919.104
2.684.354.560
2.952.790.016
3.221.225.472
3.489.660.928
3.758.096.384
4.026.531.840
169
169
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
170
170
APÊNDICE C - Caracteres EBCDIC
HEX
CARAC-
HEX
CARATER
HEX
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
50
51
52
53
54
55
56
57
58
59
5A
5B
5C
5D
5E
5F
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
Espaço
70
71
72
73
74
75
76
77
78
79
7A
. ponto
7B
< menor
7C
( abre arênteses 7D
+ mais
7E
| barra vertical
7F
& E comercial
80
81
82
83
84
85
86
87
88
89
! exclamação
8A
$ cifrão
8B
* asterisco
8C
) fecha parênteses 8D
; ponto e vírgula
8E

not
8F
CARATER
HEX
CARATER
HEX
CARATER
HEX
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
EA
EB
EC
ED
EE
EF
{ abre chave
A
B
C
D
E
F
G
H
I
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
TER
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
2A
2B
2C
2D
2E
2F
CARACTER
- hífen
/ barra
90
91
92
93
94
95
96
97
98
99
9A
, virgula
9B
% percentual 9C
_ underscore 9D
> maior
9E
? interrogação 9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
: 2 pontos
AA
# número
AB
@ arroba
AC
' apostrofe
AD
= igual
AE
" aspas
AF
B0
a
B1
b
B2
c
B3
d
B4
e
B5
f
B6
g
B7
h
B8
B9
BA
BB
BC
BD
BE
BF
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
} fecha chave
J
K
L
M
N
O
P
Q
R
\ barra invertida
S
T
U
V
W
X
Y
Z
0
1
2
3
4
5
6
7
8
9
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
171
171
APÊNDICE D - Caracteres ASCII
HEX
CARAC-TER
HEX
00
01
02
03
04
05
06
07
08
09
0A
0B
0C
0D
0E
0F
10
11
12
13
14
15
16
17
18
19
1A
1B
1C
1D
1E
1F
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
3A
3B
3C
3D
3E
3F
40
41
42
43
44
45
46
47
48
49
4A
4B
4C
4D
4E
4F
Espaço
50
! exclamação
51
" aspas
52
# número
53
$ cifrão
54
% percentual
55
& E comercial
56
' apostrofe
57
( abre arênteses 58
) fecha
59
parênteses
* asterisco
5A
+ mais
5B
, virgula
5C
- hífen
5D
. ponto
5E
/ barra
5F
CARATER
HEX
CARATER
HEX
0
1
2
3
4
5
6
7
8
9
60
61
62
63
64
65
66
67
68
69
6A
6B
6C
6D
6E
6F
70
71
72
73
74
75
76
77
78
79
7A
7B
7C
7D
7E
7F
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
9A
9B
9C
_ underscore 9D
> maior
9E
? interrogação 9F
A0
A1
A2
A3
A4
A5
A6
A7
A8
A9
: 2 pontos
AA
AB
@ arroba
AC
AD
= igual
AE
AF
B0
a
B1
b
B2
c
B3
d
B4
e
B5
f
B6
g
B7
h
B8
B9
8A
8B
8C
8D
8E
8F
BA
BB
BC
BD
BE
BF
CARATER
HEX
CARATER
HEX
C0
C1
C2
C3
C4
C5
C6
C7
C8
C9
CA
CB
CC
CD
CE
CF
D0
D1
D2
D3
D4
D5
D6
D7
D8
D9
DA
DB
DC
DD
DE
DF
E0
E1
E2
E3
E4
E5
E6
E7
E8
E9
{ abre chave
A
B
C
D
E
F
G
H
I
F0
F1
F2
F3
F4
F5
F6
F7
F8
F9
FA
FB
FC
FD
FE
FF
CARACTER
2A
2B
2C
2D
2E
2F
< menor
| barra vertical
; ponto e vírgula

not
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
EA
EB
EC
ED
EE
EF
} fecha chave
J
K
L
M
N
O
P
Q
R
\ barra invertida
S
T
U
V
W
X
Y
Z
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
172
172
APÊNDICE E – Caracteres de controle de impressão
HEXA---SIGNIFICADO------------------------------CARACTERES DE MÁQUINA-------01
09
11
19
89
91
99
A1
A9
B1
B9
C1
C9
D1
D9
E1
0B
13
1B
8B
93
9B
A3
AB
B3
BB
C3
CB
D3
DB
E3
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Imprime na linha em que
Salta 1 linha
Salta 2 linhas
Salta 3 linhas
Salta para o canal 1
Salta para o canal 2
Salta para o canal 3
Salta para o canal 4
Salta para o canal 5
Salta para o canal 6
Salta para o canal 7
Salta para o canal 8
Salta para o canal 9
Salta para o canal 10
Salta para o canal 11
Salta para o canal 12
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
estiver
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
posicionado,
e fica
depois
depois
depois
depois
depois
depois
depois
depois
depois
depois
depois
depois
depois
depois
depois
posicionado nela
salta 1 linha
salta 2 linhas
salta 3 linhas
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
salta para o canal
1
2
3
4
5
6
7
8
9
10
11
12
----HEXA----SIGNIFICADO-----------------------------CARACTERES ASA----------0
+
1
2
3
4
5
6
7
8
9
A
B
C
40
F0
60
4E
F1
F2
F3
F4
F5
F6
F7
F8
F9
C1
C2
C3
Salta 1 linha, imprime, e fica posicionado na linha impressa
Salta 2 linhas, imprime, e fica posicionado na linha impressa
Salta 3 linhas, imprime, e fica posicionado na linha impressa
Imprime na linha em que estiver posicionado e continua nela
Salta para o canal 1, imprime, e fica posicionado na linha impressa
Salta para o canal 2, imprime, e fica posicionado na linha impressa
Salta para o canal 3, imprime, e fica posicionado na linha impressa
Salta para o canal 4, imprime, e fica posicionado na linha impressa
Salta para o canal 5, imprime, e fica posicionado na linha impressa
Salta para o canal 6, imprime, e fica posicionado na linha impressa
Salta para o canal 7, imprime, e fica posicionado na linha impressa
Salta para o canal 8, imprime, e fica posicionado na linha impressa
Salta para o canal 9, imprime, e fica posicionado na linha impressa
Salta para o canal 10, imprime, e fica posicionado na linha impressa
Salta para o canal 11, imprime, e fica posicionado na linha impressa
Salta para o canal 12, imprime, e fica posicionado na linha impressa
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
173
173
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.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
174
174
APÊNDICE G - Truques úteis a programas Assembler
a) Para zerar o primeiro byte à esquerda de um registrador:
LA
LA
LA
5,0(5) ou
5,0(,5) ou
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
ZAP
CPO,CPO ou
CPO,=P'0'
e) Para multiplicar o número contido num registrador :
multiplicação por 2 :
multiplicação por 4 :
multiplicação por 8 :
etc ...
SLL
SLL
SLL
5,1
5,2
5,3
f) Para dividir o número contido num registrador :
divisão por 2 :
divisão por 4 :
divisão por 8 :
etc ...
SRL
SRL
SRL
5,1
5,2
5,3
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
XC
XC
A,B
B,A
A,B
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
175
175
i) Para movimentar um caracter qualquer para todas as posições de um campo:
MVI
MVC
CAMPO,C' '
CAMPO+1(L'CAMPO-1),CAMPO
j) Para transformar um NOP em branch:
ABC
NOP
OI
DESV
ABC+1,X'F0'
k) Para transformar um branch em NOP :
ABC
B
.
.
.
NI
DESV
ABC+1,X'0F'
l) Para subtrair 1 de um registrador :
BCTR
5,0
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
DDNAME=xxxxxxx
DSORG=PS
EODAD=simbolo
MACRF={PM/GM}
RECFM=FB[A/M]
DCB
Exemplos:
GET
PUT
OPEN
OPEN
OPEN
CLOSE
CLOSE
OPEN
CLOSE
DISCO,ARLEIT
DISKSAI,ARGRAV
(DISCO,(INPUT))
(DISCO)
(DISCO,,DISKSAI,(OUTPUT)
(DISCO)
(DISCO,,DISKSAI)
(RELAT,(OUTPUT)
(RELAT)
DISCO
DCB
DDNAME=DDENTRA,DSORG=PS,EODAD=FIMFILE,MACRF=(GM),RECFM=FB
DISKSAI DCB DDNAME=DDSAI,DSORG=PS,MACRF=(PM),RECFM=FB
RELAT
DCB DDNAME=DDREL,DSORG=PS,MACRF=(PM),RECFM=FBA
176
176
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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 PGM
MOVEPARM MVC
PARMTXT(0),2(1)
MOVE O PARM PARA AREA DO PGM
SAVE
DC
18F'0'
SAVE AREA DO PROGRAMA
PARMTXT DC
CL100' '
AREA PARA O PARM
PARMLEN DC
F'0'
FULL PARA TAMANHO PARM
*-------------------------------------------------------COMECAR EQU
*
OPEN (ENTRA,(INPUT),SAI,(OUTPUT))
LER
GET
ENTRA,WENTRA
MVC
WSAI,WENTRA
PUT
SAI,WSAI
B
LER
FIMINP
CLOSE (ENTRA,,SAI)
*-------------------------------------------------------TERMINAR EQU
*
SR
2,2
ZERA REG 2
L
13,SAVE+4
RESTAURA ENDERECO DA
*
SAVE AREA DO CHAMADOR
ST
2,16(13)
RETURN CODE NO LUGAR
*
DE ONDE SERA RESTAURADO O REG 15
LM
14,12,12(13)
RESTAURA REGISTRADORES
BR
14
VOLTA
*-------------------------------------------------------WENTRA
DS
CL50
WSAI
DS
CL50
ENTRA
DCB
DDNAME=DDENTRA,DSORG=PS,EODAD=FIMINP,MACRF=(GM),RECFM=FB
SAI
DCB
DDNAME=DDSAI,DSORG=PS,MACRF=(PM),RECFM=FB
END
177
177
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
178
178
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
PUT
OPEN
OPEN
CLOSE
CLOSE
OPEN
CLOSE
DISCO
DISCO,ARLEIT
DISKSAI,ARGRAV
DISCO
DISCO,DISKSAI
DISCO
DISCO,DISKSAI
RELAT
RELAT
DTFSD EOFADDR=FIMFILE,TYPEFLE=INPUT,RECFORM=FIXBLK,RECSIZE=50,
BLKSIZE=5000,IOAREA1=BUFIN,WORKA=YES
DISKSAI DTFSD TYPEFLE=OUTPUT,RECFORM=FIXBLK,RECSIZE=50,BLKSIZE=5000,
IOAREA1=BUFOUT,WORKA=YES
RELAT
DTFPR DEVADDR=SYSLST,RECFORM=FIXUNB,RECSIZE=133,BLKSIZE=133,
CTLCHR=ASA,IOAREA1=BUFPR,WORKA=YES
X
X
X
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
179
179
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,SAI
LER
GET
ENTRA,WENTRA
MVC
WSAI,WENTRA
PUT
SAI,WSAI
B
LER
FIMINP
CLOSE ENTRA,SAI
*-------------------------------------------------------TERMINAR EQU
*
EOJ
*-------------------------------------------------------WENTRA
DS
CL50
WSAI
DS
CL50
ENTRA
DTFSD EOFADDR=FIMINP,TYPEFLE=INPUT,RECFORM=FIXBLK,RECSIZE=50,
BLKSIZE=5000,IOAREA1=BUFIN,WORKA=YES
DISKSAI DTFSD TYPEFLE=OUTPUT,RECFORM=FIXBLK,RECSIZE=50,BLKSIZE=5000,
IOAREA1=BUFOUT,WORKA=YES
LTORG
BUFIN
DS
CL5000
BUFOUT
DS
CL5008
END
X
X
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
180
180
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
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
181
181
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,
BSIZE=50,FORM=E
MVC
WSAI,WENTRA
FSWRITE 'SAIDA DADOS A',BUFFER=WSAI,BSIZE=50,RECFM=F
B
LE
MAYBEFIM EQU
*
C
15,=F'12'
VE SE TEVE ERRO OU SE FOI FIM ARQ
BE
TERMINAR
SE FOI FIM DE ARQUIVO, DESVIA
WRTERM 'ERRO DE LEITURA DO ARQUIVO ENTRADA'
LA
2,4
RETURN CODE NO REG 2
B
FINAL
*-------------------------------------------------------TERMINAR EQU
*
SR
2,2
ZERA REG 2
FINAL
L
13,SAVE+4
RESTAURA ENDERECO DA
*
SAVE AREA DO CHAMADOR
ST
2,16(13)
RETURN CODE NO LUGAR
*
DE ONDE SERA RESTAURADO
*
O REG 15
LM
14,12,12(13)
RESTAURA REGISTRADORES
BR
14
VOLTA
*-------------------------------------------------------WENTRA
DS
CL50
WSAI
DS
CL50
SAVE
DC
18F'0'
END
X
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
0
R1
EQU
1
R2
EQU
2
R3
EQU
3
R4
EQU
4
R5
EQU
5
R6
EQU
6
R7
EQU
7
R8
EQU
8
R9
EQU
9
R10
EQU
10
R11
EQU
11
R12
EQU
12
R13
EQU
13
R14
EQU
14
R15
EQU
15
182
182
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
183
183
AIF
('&SISTOP' EQ 'MVS').MVS
.*----------------------------------------------------------.* GERA PARA O CASO DE VSE
.*----------------------------------------------------------.VSE
ANOP
&QUALSO SETC 'SISTEMAVSE'
*----------------------------------------------------------* ESTABELECE OS REGISTRADORES BASE EM TEMPO DE MONTAGEM
* E OS CARREGA EM TEMPO DE EXECUCAO
*----------------------------------------------------------USING *,3,4,5,6,7
INDICA REGISTRADORES BASE E SEU
*
CONTEUDO PRESUMIDO NA EXECUCAO
BALR 3,0
CARREGA PRIMEIRO REG BASE
BCTR 3,0
SUBTRAI 1
BCTR 3,0
SUBTRAI MAIS 1, E R3 = LOAD POINT
*
= ENTRY POINT
LA
4,1
COLOCA NRO 1 NO REG 4
LA
4,4095(3,4)
R4 = R3 + 4096
LA
5,1
COLOCA NRO 1 NO REG 5
LA
5,4095(4,5)
R5 = R4 + 4096
LA
6,1
COLOCA NRO 1 NO REG 6
LA
6,4095(5,6)
R6 = R5 + 4096
LA
7,1
COLOCA NRO 1 NO REG 7
LA
7,4095(6,7)
R7 = R6 + 4096
*----------------------------------------------------------EJECT
MEXIT
.*----------------------------------------------------------.* GERA PARA O CASO DE MVS
.*----------------------------------------------------------.MVS
ANOP
*----------------------------------------------------------* ESTABELECE OS REGISTRADORES BASE EM TEMPO DE MONTAGEM
* E OS CARREGA EM TEMPO DE EXECUCAO
*----------------------------------------------------------USING *,3,4,5,6,7
INDICA REGISTRADORES BASE E SEU
*
CONTEUDO PRESUMIDO NA EXECUCAO
STM
14,12,12(13)
SALVA REGISTRADORES NA SAVEAREA
*
DO CHAMADOR
LR
3,15
CARREGA ENTRY POINT/LOAD POINT NO R3
LA
4,1
COLOCA NRO 1 NO REG 4
LA
4,4095(3,4)
R4 = R3 + 4096
LA
5,1
COLOCA NRO 1 NO REG 5
LA
5,4095(4,5)
R5 = R4 + 4096
LA
6,1
COLOCA NRO 1 NO REG 6
LA
6,4095(5,6)
R6 = R5 + 4096
LA
7,1
COLOCA NRO 1 NO REG 7
LA
7,4095(6,7)
R7 = R6 + 4096
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
*----------------------------------------------------------* ACERTA POINTERS PARA SAVEAREAS
*----------------------------------------------------------ST
13,SAVEZZZZ+4
SALVA ENDERECO DA SAVEAREA DO
*
CHAMADOR NA MINHA SAVEAREA
LA
15,SAVEZZZZ
ENDERECO DA MINHA SAVEAREA NO 15
ST
15,8(13)
SALVA ENDERECO DA MINHA SAVEAREA
*
NA SAVEAREA DO CHAMADOR
LR
13,15
DEIXA ENDER DA MINHA SAVE NO 13
*----------------------------------------------------------* PEGA O PARM E O DEIXA EM PARMTEXT
*----------------------------------------------------------L
1,0(1)
ENDERECO DO PARM NO REG 1
MVC
PARMLEN@+2(2),0(1)
SALVA TAMANHO DO PARM
L
15,PARMLEN@
TAMANHO DO PARM NO 15
LTR
15,15
VE SE VEIO PARM
BZ
PARMLEN@+4
SE TAMANHO ZERO, NAO VEIO PARM
BCTR 15,0
SUBTRAI 1 DO 15
EX
15,*+4+4
SALVA PARM NA MINHA AREA
B
PARMLEN@+4
VAI EXECUTAR O PROGRAMA
MVC
PARMTEXT(0),2(1)
MOVE O PARM PARA MINHA AREA
*----------------------------------------------------------* DEFINE AS AREAS
*----------------------------------------------------------SAVEZZZZ DC
18F'0'
MINHA SAVEAREA
PARMTEXT DC
CL100' '
MINHA AREA PARA O PARM
PARMLEN@ DC
F'0'
TAMANHO DO PARM
*----------------------------------------------------------EJECT
&QUALSO SETC 'SISTEMAMVS'
MEND
***********************************************************************
*
MACRO TCHAU
***********************************************************************
MACRO
&SIMBALO TCHAU &RETCODE=
.*----------------------------------------------------------.* DEFINICAO DAS VARIAVEIS DE MONTAGEM
.*----------------------------------------------------------GBLA
&XEGAY
GBLC
&QUALSO
.*----------------------------------------------------------.* CONSISTENCIA DOS DADOS
.*----------------------------------------------------------AIF
(&XEGAY EQ 1).VEIOXEG
MNOTE 12,'MACRO TCHAU USADA SEM MACRO XEGUEI'
MEXIT
.VEIOXEG ANOP
AIF
('&QUALSO' EQ 'SISTEMAMVS').MVS
184
184
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
.*----------------------------------------------------------.* 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
185
185
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
SAIROT4
ISZONADO EQU
*
PACK 0(2,12),0(3,11)
PACK 1(2,12),2(3,11)
PACK W(2),4(3,11)
MVC
2(1,12),W
SAIROT
EQU
*
L
13,4(13)
LM
14,12,12(13)
SR
15,15
BR
14
SAIROT4 EQU
*
L
13,4(13)
LM
14,12,12(13)
LA
15,4
BR
14
TABNUM
DC
240X'FF',10X'00'6X'FF'
W
DS
CL2
SAVEROT DC
18F'0'
END
186
186
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
187
187
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
*
*
*
VOLTA
SAIROT
VOLTA4
VOLTA8
TABNUM
TOTDW
W
L
TM
BO
TRT
BNZ
PACK
AP
11,12(9)
12(9),X'80'
VOLTA
0(3,11),TABNUM
VOLTA4
W,0(3,11)
TOTDW,W
R11 = ENDERECO PARM 4
L
TM
BZ
TRT
BNZ
PACK
AP
11,16(9)
16(9),X'80'
VOLTA8
0(3,11),TABNUM
VOLTA4
W,0(3,11)
TOTDW,W
R11 = ENDERECO PARM 5
EQU
CVB
ST
MVC
EQU
L
LM
SR
BR
EQU
L
LM
LA
BR
EQU
L
LM
LA
BR
DC
DS
DS
END
*
8,TOTDW
8,TOTDW
0(4,11),TOTDW
*
13,4(13)
14,12,12(13)
15,15
14
*
13,4(13)
14,12,12(13)
15,4
14
*
13,4(13)
14,12,12(13)
15,8
14
240X'FF',10X'00'6X'FF'
D
CL3
ESTE E' O ULTIMO PARAMETRO
ESTE NAO E' O ULTIMO PARAMETRO
188
188
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
APÊNDICE Q - Montagem de programa de demonstração 1
SYMBOL
TYPE ID ADDR LENGTH LD ID FLAGS
PROGDEMO SD 0001 000000 000AF3
00
FORA
ER 0002
Z
LD
000844
0001
SUBROT
ER 0003
EXTERNAL SYMBOL DICTIONARY
189
189
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
000000
IEV147
IEV167
*** ERROR ***
*** ERROR ***
000000 C7C5D9C1C4D640D7
000011 C7C5D9C1C4D640D7
000022 C1D3C2C5D9E3D6
000029 C1D3C2C5D9E3D65C
000031 C1D3C2C5D9E3C9D5
190
190
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 *----------------------------------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
*
SYMBOL TOO LONG, OR 1ST CHARACTER NOT A LETTER -REQUIRED NAME MISSING
00000
29 SIMBOLOPODESTER63CARACTERES EQU *
30 *----------------------------------31 * PRINT GEN/NOGEN
32 *----------------------------------33 * ESTA' COM O DEFAULT PRINT GEN
34
MYMAK
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
41+
DC
C'GERADO PELA MYMAK'
42 *----------------------------------43 * PRINT DATA/NODATA
44 *----------------------------------45 * ESTA' COM O DEFAULT PRINT NODATA
46
DC
CL7'ALBERTO'
47
DC
CL8'ALBERTO*'
48
DC
CL10'ALBERTINHO'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
00003B
000042
00004A
000052
OBJECT CODE
ADDR1 ADDR2
C1D3C2C5D9E3D6
C1D3C2C5D9E3D65C
C1D3C2C5D9E3C9D5
C8D6
000054 C1D3C2C5D9E3D6
00005B C1D3C2C5D9E3D65C
000063 C1D3C2C5D9E3C9D5
000074
00001
00074
00074
00080
00004
000FF
000084 D203 A00B F007 0000B 00007
00084
00008A 5C5C5C5C5C5C5C5C
000092
00008C 00
00008D
000092 5C5C5C5C5C5C5C5C
00009A
000097 00
000098
0008C
00092
00097
0009A
191
191
STMT
SOURCE STATEMENT
49 * VOU MUDAR PARA PRINT DATA
50
PRINT DATA
51
DC
CL7'ALBERTO'
52
DC
CL8'ALBERTO*'
53
DC
CL10'ALBERTINHO'
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
* VOU RESTAURAR O DEFAULT
PRINT NODATA
DC
CL7'ALBERTO'
DC
CL8'ALBERTO*'
DC
CL10'ALBERTINHO'
*----------------------------------* PRINT ON/OFF
*----------------------------------* ESTA' COM O DEFAULT PRINT ON
*----------------------------------* ESTE STMT VAI SER IMPRESSO
* DEPOIS DO STMT *++++++++++
* VAI TER
*
UM
PRINT OFF
*
UM HIDE DS
CL1
*
UM
DC
A(HIDE)
* E UM
PRINT ON
*++++++++++
PRINT OFF
PRINT ON
*----------------------------------* EQUATES
*----------------------------------R1
EQU
1
LABEL
EQU
*
DIVDENDO DS
CL16
COCIENTE EQU
DIVDENDO,12
RESTO
EQU
DIVDENDO+12,4,C'P'
TAMRESTO EQU
L'RESTO
BYTEON
EQU
X'FF'
MOVTRECO MVC
11(4,10),7(15)
MOVCOISA EQU
MOVTRECO
*----------------------------------* ORG
*----------------------------------CAMPO
DC
8C'*'
ORG
CAMPO+2
DC
X'00'
ORG
*
.
.
OUTRORG DC
8C'*'
ORG
*-3
DC
X'00'
ORG
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
192
192
STMT
SOURCE STATEMENT
100 *
.
.
00009A 4040404040404040
101 TABELA
DC
CL256' '
00019A
0009A
102
ORG
TABELA +X'10'
00009A FF
103
DC
X'FF'
00009B
0015B
104
ORG
TABELA+C'A'
00015B FF
105
DC
X'FF'
00015C
00194
106
ORG
TABELA+256-X'6'
000194 FF
107
DC
X'FF'
000195
000A9
108
ORG
TABELA+B'1111'
0000A9 FF
109
DC
X'FF'
0000AA
0019A
110
ORG
111 *----------------------------------112 * OPSYN
113 *----------------------------------114 MOVER
OPSYN MVC
00019A D200 2000 4003 00000 00003
115
MOVER 0(1,2),3(4)
0001A0 D200 2000 4003 00000 00003
116
MVC
0(1,2),3(4)
117 MVC
OPSYN
0001A6 D200 2000 4003 00000 00003
118
MOVER 0(1,2),3(4)
119
MVC
0(1,2),3(4)
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
120 MOVER
OPSYSN
IEV057 *** ERROR *** UNDEFINED OP-CODE -- OPSYSN
0001AC D200 2000 4003 00000 00003
121
MOVER 0(1,2),3(4)
122
MVC
0(1,2),3(4)
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
123 MVC
OPSYN MVC
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
0001B2 D200 2000 4003 00000 00003
124
MOVER 0(1,2),3(4)
125
MVC
0(1,2),3(4)
IEV057 *** ERROR *** UNDEFINED OP-CODE -- MVC
126 *----------------------------------127 * CCW
128 *----------------------------------0001B8 090001C060000085
129 PGMCANAL CCW
X'09',ARIMP,X'60',133
0001C0 4040404040404040
130 ARIMP
DC
CL133' '
131 *----------------------------------132 * DC TIPO C
133 *----------------------------------000245
134 DCCC
DC
CL257'*'
IEV068 *** ERROR *** LENGTH ERROR -- L257'*'
000245 5C40404040404040
135 DCCC1
DC
CL256'*'
000345 5C4040
136 DCC2
DC
CL3'*'
000348 5C5C5C
137 DCC4
DC
3C'*'
00034B 7D50
138 DCC5
DC
C'''&&'
139 *----------------------------------140 * DC TIPO X
141 *----------------------------------00034D
142
DC
XL257'FF'
IEV068 *** ERROR *** LENGTH ERROR -- L257'FF'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
00034D
00044D
000450
OBJECT CODE
ADDR1 ADDR2
0000000000000000
0000FF
FFFFFF
000453
IEV068 *** ERROR ***
000453 0000000000000000
000553 000001
000556 010101
000559
IEV068 *** ERROR ***
000559 0000000000000001
000561 000000
000564 0000000000000001
00056C 0000000200000003
000574 0000000400000005
00057C 0000000600000007
000584 00000008
000588 000000090000000A
000590 0000000B0000000C
000598 0000000D0000000E
0005A0
IEV074 *** ERROR ***
0005A0 FFFFFFF9FFFFFFF8
0005A8 FFFFFFF7FFFFFFF6
0005B0 FFFFFFF5
0005B4
IEV068 *** ERROR ***
0005B4 000000000000000F
0005BC 0000000100020003
0005C4 0004000500060007
0005CC 0008
0005CE 0009000A000B000C
0005D6 000D000E
0005DA
IEV074 *** ERROR ***
0005DA FFF9FFF8FFF7FFF6
0005E2 FFF5
STMT
143
144
145
146
147
148
149
LENGTH ERROR
150
151
152
153
154
155
156
LENGTH ERROR
157
158
193
193
SOURCE STATEMENT
DC
XL256'FF'
DC
XL3'FF'
DC
3X'FF'
*----------------------------------* DC TIPO B
*----------------------------------DC
BL257'1'
-- L257'1'
DC
BL256'1'
DC
BL3'1'
DC
3B'1'
*----------------------------------* DC TIPO F
*----------------------------------DC
FL9'1'
-- L9'1'
DC
FL8'1'
PRINT DATA
159
DC
F'0,1,2,3,4,5,6,7,8'
160
DC
F'9,10,11,12,13,14'
161
DC
F'-1,-2,-3,-4,-5,-6,'
ILLEGAL SYNTAX IN EXPRESSION -- '
162
DC
F'-7,-8,-9,-10,-11'
163
164
165
166
167
LENGTH ERROR
168
169
170
171
PRINT NODATA
*----------------------------------* DC TIPO H
*----------------------------------DC
HL9'15'
-- L9'15'
DC
HL8'15'
PRINT DATA
DC
H'0,1,2,3,4,5,6,7,8'
DC
H'9,10,11,12,13,14'
172
DC
H'-1,-2,-3,-4,-5,-6,'
ILLEGAL SYNTAX IN EXPRESSION -- '
173
DC
H'-7,-8,-9,-10,-11'
174
PRINT NODATA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
0005E4 0000000041100000
0005EC 4120000041300000
0005F4 4140000041500000
0005FC 4160000041700000
000604 41800000
000608 4190000041A00000
000610 41B0000041C00000
000618 41D0000041E00000
000620
IEV074 *** ERROR ***
000620 C1700000C1800000
000628 C1900000C1A00000
000630 C1B00000
000634 00000000
000638 0000000000000000
000640 4110000000000000
000648 4120000000000000
000650 4130000000000000
000658 4140000000000000
000660 4150000000000000
000668 4160000000000000
000670 4170000000000000
000678 4180000000000000
000680 4190000000000000
000688 41A0000000000000
000690 41B0000000000000
000698 41C0000000000000
0006A0 41D0000000000000
0006A8 41E0000000000000
0006B0
IEV074 *** ERROR ***
0006B0 C170000000000000
0006B8 C180000000000000
0006C0 C190000000000000
0006C8 C1A0000000000000
0006D0 C1B0000000000000
194
194
STMT
SOURCE STATEMENT
175 *----------------------------------176 * DC TIPO E
177 *----------------------------------178
PRINT DATA
179
DC
E'0,1,2,3,4,5,6,7,8'
180
DC
E'9,10,11,12,13,14'
181
DC
E'-1,-2,-3,-4,-5,-6,'
ILLEGAL SYNTAX IN EXPRESSION -- '
182
DC
E'-7,-8,-9,-10,-11'
183
PRINT NODATA
184 *----------------------------------185 * DC TIPO D
186 *----------------------------------187
PRINT DATA
188
DC
D'0,1,2,3,4,5,6,7,8'
189
DC
D'9,10,11,12,13,14'
190
DC
D'-1,-2,-3,-4,-5,-6,'
ILLEGAL SYNTAX IN EXPRESSION -- '
191
DC
D'-7,-8,-9,-10,-11'
192
PRINT NODATA
193 *----------------------------------194 * DC TIPO L
195 *----------------------------------196
PRINT DATA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
195
195
LOC OBJECT CODE
ADDR1 ADDR2 STMT
SOURCE STATEMENT
0006D8 0000000000000000
197
DC
L'0,1,2,3,4,5,6,7,8'
0006E0 0000000000000000
0006E8 4110000000000000
0006F0 3300000000000000
0006F8 4120000000000000
000700 3300000000000000
000708 4130000000000000
000710 3300000000000000
000718 4140000000000000
000720 3300000000000000
000728 4150000000000000
000730 3300000000000000
000738 4160000000000000
000740 3300000000000000
000748 4170000000000000
000750 3300000000000000
000758 4180000000000000
000760 3300000000000000
000768 4190000000000000
198
DC
L'9,10,11,12,13,14'
000770 3300000000000000
000778 41A0000000000000
000780 3300000000000000
000788 41B0000000000000
000790 3300000000000000
000798 41C0000000000000
0007A0 3300000000000000
0007A8 41D0000000000000
0007B0 3300000000000000
0007B8 41E0000000000000
0007C0 3300000000000000
0007C8
199
DC
L'-1,-2,-3,-4,-5,-6,'
IEV074 *** ERROR *** ILLEGAL SYNTAX IN EXPRESSION -- '
0007C8 C170000000000000
200
DC
L'-7,-8,-9,-10,-11'
0007D0 B300000000000000
0007D8 C180000000000000
0007E0 B300000000000000
0007E8 C190000000000000
0007F0 B300000000000000
0007F8 C1A0000000000000
000800 B300000000000000
000808 C1B0000000000000
000810 B300000000000000
201
PRINT NODATA
202 *----------------------------------203 * DC TIPO P
204 *----------------------------------000818
205
DC
PL17'1'
IEV068 *** ERROR *** LENGTH ERROR -- L17'1'
000818 0000000000000000
206
DC
PL16'1'
000828 00009C
207
DC
PL3'9'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC OBJECT CODE
00082B 9C9C9C
ADDR1 ADDR2
00082E
IEV068 *** ERROR ***
00082E F0F0F0F0F0F0F0F0
00083E F0F0C9
000841 C9C9C9
000844
000848
00084C
000854
000858
00085C
000860
000864
000868
00086C
000870
000874
000878
000879
000881
000889
00088C
00000000
00000FFF00007D00
00001000
0000000F
00005C5C
0000085C
0000086C
0000084C
0000086C
00000004
8000084C
00
0001020304050607
FF00010203040506
000000
00000000
STMT
208
209
210
211
212
LENGTH ERROR
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
000890 00000000
000894
000894
000898
00089C
00089C
0008A0
47F0 389C
00000000
0089C
4110 38A4
47F0 38AC
008A4
008AC
008A4
0008A4 000008B2
0008A8 000008B5
0008AC 58F0 3898
0008B0 05EF
0008B2 00012C
0008B5
008AC
00898
196
196
SOURCE STATEMENT
DC
3P'9'
*----------------------------------* DC TIPO Z
*----------------------------------DC
ZL17'1'
-- L17'1'
DC
ZL16'1'
DC
ZL3'9'
DC
3Z'9'
*----------------------------------* DC TIPO A / DC TIPO V / ENTRY/EXTR
*----------------------------------Z
DS
CL4
A1
DC
A(0)
A2
DC
A(4095,32000)
A3
DC
A(X'1000')
A4
DC
A(B'1111')
A5
DC
A(C'**')
DC
A(A5)
DC
A(A5+16)
DC
A(A5-16)
DC
A(*)
DC
A(L'A1)
DC
A(A2+X'80000000')
A11
DC
AL1(*-A11)
A12
DC
8AL1(*-A12)
A13
DC
8AL1(255+*-A13)
234
DC
A(FORA)
235
EXTRN FORA
236
ENTRY Z
237
DC
V(SUBROT)
238
CALL SUBROT,(ENTRA,SAI)
239+
CNOP 0,4
240+
B
*+8
241+IHB0003B DC
V(SUBROT)
242+
CNOP 0,4
243+
LA
1,IHB0004
244+
B
IHB0004A
245+IHB0004 EQU
*
246+
DC
A(ENTRA)
P
247+
DC
A(SAI)
248+IHB0004A EQU
*
249+
L
15,IHB0003B
250+
BALR 14,15
251 ENTRA
DC
PL3'12'
252 SAI
DS
CL400
253 *----------------------------------254 * DC TIPO Y
255 *-----------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
197
197
LOC OBJECT CODE
ADDR1 ADDR2 STMT
SOURCE STATEMENT
000A45 00
000A46 00740074
256
DC
Y(LABEL,COCIENTE)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A4A 0FFF7D00
257 Y2
DC
Y(4095,32000)
000A4E 1000
258 Y3
DC
Y(X'1000')
000A50 000F
259 Y4
DC
Y(B'1111')
000A52 5C5C
260 Y5
DC
Y(C'**')
000A54 085C
261
DC
Y(A5)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A56 086C
262
DC
Y(A5+16)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A58 084C
263
DC
Y(A5-16)
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A5A 4FFF
264
DC
Y(PROGDEMO+X'4FFF')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A5C 5000
265
DC
Y(PROGDEMO+X'5000')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A5E 7FFF
266
DC
Y(PROGDEMO+X'7FFF')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
000A60 8000
267
DC
Y(PROGDEMO+X'8000')
IEV066 ** WARNING ** RELOCATABLE Y-TYPE CONSTANT
IEV072 *** ERROR *** DATA ITEM TOO LARGE
268 *----------------------------------269 * ALINHAMENTOS
270 *----------------------------------000A68
271
DS
0D
000A68
272 AAALIN
DS
C
000A6C
273
DS
0F
000A6C
274
DS
C
000A6D 000000
000A70
275
DC
0F'-1'
000A70
276
DS
C
000A71 00
000A72
277
DC
0H'-1'
000A72
278
DS
C
000A73 00
000A74
279
DC
0A(0)
000A74
280
DS
C
000A75 000000
000A78
281
DC
0D'0'
000A78
282
DS
C
000A79 00
000A7A
283
DC
0Y(0)
000A7A
284
DS
C
000A7B 00
000A7C
285
DC
0S(BYTE)
IEV044 *** ERROR *** UNDEFINED SYMBOL
000A7C
286
DS
C
000A7D 000000
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
000A80
000A84
000A85
000A86
000A88
000A89
000A8C
000A90
000A91
000A98
000AA0
000AA1
000AA2
000AA4
000AA5
000AA6
000AA8
000AB0
000AB0
000AB1
000AB2
000AB8
000AC1
000AC2
000AC4
000AC9
000ACA
000ACA
000AD1
000AD2
000AD6
000AD9
000ADA
000ADC
000AE1
000AE2
OBJECT CODE
FFFFFFFF
ADDR1 ADDR2
00
FFFF
000000
00000000
00000000000000
0000000000000000
00
0000
00
3A68
00
070007000700
00
0700
00
00
07000700
00
0700
00
000AE2
000AE2
000AE4
000AE6
000AE8
IEV068
000AE8
IEV043
000AEE
000AF0
*** ERROR ***
*** ERROR ***
STMT
287
288
198
198
SOURCE STATEMENT
DC
1F'-1'
DS
C
289
290
DC
DS
1H'-1'
C
291
292
DC
DS
1A(0)
C
293
294
DC
DS
1D'0'
C
295
296
DC
DS
1Y(0)
C
297
298
299 * CNOPS
300
301
DC
DS
1S(AAALIN)
C
DS
DS
0D
C
302
303
CNOP
DS
0,8
CL9
304
305
CNOP
DS
4,8
CL5
306
307
CNOP
DS
2,8
CL7
308
309
CNOP
DS
6,8
CL3
310
311
CNOP
DS
0,4
CL5
312
CNOP 2,4
313 *----------------------------------314 * DS
315 *----------------------------------316 DATA
DS
0CL6
317 DIA
DS
CL2
318 MES
DS
CL2
319 ANO
DS
CL2
320
DS
CL300000
LENGTH ERROR -- L300000
321 CAMPO
DS
3CL2
PREVIOUSLY DEFINED SYMBOL -- CAMPO
322
DS
C,P
323
DS
X'0A0B0C'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
199
199
LOC OBJECT CODE
ADDR1 ADDR2 STMT
SOURCE STATEMENT
000AF3
324
DS
CL300000
IEV068 *** ERROR *** LENGTH ERROR -- L300000
325 *----------------------------------326
END
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - POS.ID
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
REL.ID
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0001
0002
0003
0003
FLAGS
0C
08
0C
0C
0C
0C
0C
0C
0C
04
04
04
04
04
04
04
04
04
0C
1C
1C
ADDRESS
000070
0001B9
000860
000864
000868
00086C
000874
0008A4
0008A8
000A46
000A48
000A54
000A56
000A58
000A5A
000A5C
000A5E
000A60
00088C
000890
000898
RELOCATION DICTIONARY
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
SYMBOL
LEN
VALUE DEFN
AAALIN
00001
000A68 0272
ANO
00002
000AE6 0319
ARIMP
00133
0001C0 0130
A1
00004
000848 0220
A11
00001
000878 0231
A12
00001
000879 0232
A13
00001
000881 0233
A2
00004
00084C 0221
A3
00004
000854 0222
A4
00004
000858 0223
A5
00004
00085C 0224
BYTE
****UNDEFINED****
BYTEON
00001 000000FF 0085
CAMPO
00001
00008A 0091
CAMPO
00001 00000000 0321
COCIENTE 00012 00000074 0082
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
ENTRA
00003
0008B2 0251
FORA
00001 00000000 0235
HIDE
00001
00006D 0073
IHB0003B 00004
000898 0241
IHB0004 00001 000008A4 0245
IHB0004A 00001 000008AC 0248
LABEL
00001 00000074 0080
MES
00002
000AE4 0318
MOVCOISA 00006 00000084 0087
MOVTRECO 00006
000084 0086
OUTRORG 00001
000092 0096
PGMCANAL 00008
0001B8 0129
PROGDEMO 00001 00000000 0013
RESTO
00004 00000080 0083
R1
00001 00000001 0079
SAI
00400
0008B5 0252
SIMBOLOPODESTER63CARACTERES
00001 00000000 0029
TABELA
00256
00009A 0101
TAMRESTO 00001 00000004 0084
Y2
00002
000A4A 0257
Y3
00002
000A4E 0258
Y4
00002
000A50 0259
Y5
00002
000A52 0260
Z
00004
000844 0219
REFERENCES
0297
CROSS REFERENCE
0129
0229
0231
0232
0233
0230
0225 0226 0227 0261 0262 0263
0285
0092
****DUPLICATE****
0256
0082 0083
0246
0234
0074
0249
0243
0244
0256
0087
0264 0265 0266 0267
0084
0247
0102 0104 0106 0108
0236
200
200
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
201
201
DIAGNOSTIC CROSS REFERENCE AND ASSEMBLER S
THE FOLLOWING STATEMENTS WERE FLAGGED
000028 000119 000120 000122 000123 000125 000134 000142 000149 000156 000
000205 000212 000256 000261 000262 000263 000264 000265 000266 000267 000
30 STATEMENTS FLAGGED IN THIS ASSEMBLY
12 WAS HIGHEST SEVERITY CO
OVERRIDING PARAMETERS- LINECOUNT(50),XREF(FULL)
OPTIONS FOR THIS ASSEMBLY
DECK, NOOBJECT, LIST, XREF(FULL), NORENT, NOTEST, NOBATCH, ALIGN, ESD, R
FLAG(0), SYSPARM()
NO OVERRIDING DD NAMES
312 CARDS FROM SYSIN
216 CARDS FROM SYSLIB
572 LINES OUTPUT
73 CARDS OUTPUT
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
APÊNDICE R - Montagem de programa de demonstração 2
SYMBOL
TYPE ID ADDR LENGTH
REGSBASE SD 0001 000000 0050D5
LD ID FLAGS
00
EXTERNAL SYMBOL DICTIONARY
202
202
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
000000
00000
00000
00000
000000
001000
000000
000400
000410
00000
000420
000422
000424
00042C
3400
3410
400040165000502C
6000604270007058
000434
00043A
000440
000446
00044C
D20F
D215
D22B
D241
D257
3400
4000
5000
6000
7000
3410
4016
502C
6042
7058
00400
01000
02000
03000
04000
00410
01016
0202C
03042
04058
STMT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
203
203
SOURCE STATEMENT
*----------------------------------*
1
2
3
*23456789012345678901234567890123456
*----------------------------------*----------------------------------* ESTE PROGRAMA NAO PODE SER
* EXECUTADO POIS NAO FUNCIONA.
* SEU OBJETIVO E' DEMONSTRAR O FUN* CIONAMENTO DE REGISTRADORES BASE
*----------------------------------REGSBASE START 0
USING *,3,4,5,6,7
*
* AVISA QUE OS REGISTRADORES BASE
* SERAO O 3, 4, 5, 6 E 7
* E QUE SEUS CONTEUDOS PRESUMIDOS
* EM TEMPO DE EXECUCAO SERAO
* R3 = 000000
* R4 = 001000
* R5 = 002000
* R6 = 003000
* R7 = 004000
*----------------------------------USING DSEQUIT,11
*
* AVISA QUE OS CAMPOS DA DSECT TERAO
* O REGISTRADOR 11 COMO BASE
*----------------------------------*----------------------------------* ESTE PRIMEIRO BLOCO E SERVIDO PELO
* REGISTRADOR BASE 3. ESTE BLOCO VAI
* DO ENDERECO 000000 ATE O 000FFF
*----------------------------------BLOCO1
EQU
*
DS
CL4096
ORG
BLOCO1
DS
CL1024
A
DS
CL16
B
DS
CL16
*
.
.
DC
S(A)
DC
S(B)
DC
S(C,D,E,F)
DC
S(G,H,I,J)
*
.
.
MVC
A,B
MVC
C,D
MVC
E,F
MVC
G,H
MVC
I,J
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
204
204
STMT
SOURCE STATEMENT
51 *
.
.
000452 D20F 3400 7058 00400 04058
52
MVC
A,J
000458 D257 7000 3410 04000 00410
53
MVC
I,B
00045E D215 4000 6000 01000 03000
54
MVC
C,G
000464 D24C 6042 4016 03042 01016
55
MVC
H,D
56 *
.
.
00046A D20F 3400 B000 00400 00000
57
MVC
A,DSEKCPO1
000470 D215 4000 B00B 01000 0000B
58
MVC
C,DSEKCPO2
000476 0000 0000 0000 00000 00000
59
MVC
E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
00047C D241 6000 B021 03000 00021
60
MVC
G,DSEKCPO4
000482 D257 7000 B02C 04000 0002C
61
MVC
I,DSEKCPO5
000488 D20A B037 B042 00037 00042
62
MVC
DSEKCPO6,DSEKCPO7
63 *
.
.
00048E 41C0 7FFF
04FFF
64
LA
12,Z-1
000492 0000 0000
00000
65
LA
12,Z+1
IEV034 *** ERROR *** ADDRESSABILITY ERROR
000496 0000 0000
00000
66
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
00049A 58C0 34A8
004A8
67
L
12,=A(Z)
00049E D20F 3400 34AC 00400 004AC
68
MVC
A,=C'*'
69 *
.
.
0004A8
70
LTORG ,
0004A8 00005000
71
=A(Z)
0004AC 5C
72
=C'*'
73 *
.
.
0004AD 00
0004AE D20F 3400 40E4 00400 010E4
74
MVC
A,=C'*'
0004B4 0000 0000
00000
75
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0004B8 58C0 40E0
010E0
76
L
12,=A(Z)
77 *
.
.
0004BC
01000
78
ORG
,
79 *----------------------------------80 * ESTE SEGUNDO BLOCO E SERVIDO PELO
81 * REGISTRADOR BASE 4. ESTE BLOCO VAI
82 * DO ENDERECO 001000 ATE O 001FFF
83 *----------------------------------01000
84 BLOCO2
EQU
*
001000
85
DS
CL4096
002000
01000
86
ORG
BLOCO2
001000
87 C
DS
CL22
001016
88 D
DS
CL33
89 *
.
.
001037 00
001038 D20F 3400 3410 00400 00410
90
MVC
A,B
00103E D215 4000 4016 01000 01016
91
MVC
C,D
001044 D22B 5000 502C 02000 0202C
92
MVC
E,F
00104A D241 6000 6042 03000 03042
93
MVC
G,H
001050 D257 7000 7058 04000 04058
94
MVC
I,J
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
205
205
STMT
SOURCE STATEMENT
95 *
.
.
001056 D20F 3400 7058 00400 04058
96
MVC
A,J
00105C D257 7000 3410 04000 00410
97
MVC
I,B
001062 D215 4000 6000 01000 03000
98
MVC
C,G
001068 D24C 6042 4016 03042 01016
99
MVC
H,D
100 *
.
.
101 * VOU TIRAR O 5 DA TABELA DE BASES
102 *
.
.
103
DROP 5
00106E D20F 3400 3410 00400 00410
104
MVC
A,B
001074 D215 4000 4016 01000 01016
105
MVC
C,D
00107A 0000 0000 0000 00000 00000
106
MVC
E,F
IEV034 *** ERROR *** ADDRESSABILITY ERROR
IEV034 *** ERROR *** ADDRESSABILITY ERROR
001080 D241 6000 6042 03000 03042
107
MVC
G,H
001086 D257 7000 7058 04000 04058
108
MVC
I,J
109 *
.
.
110 * VOU FAZER O 5 VOLTAR 'A TABELA DE
111 * BASES, COM O MESMO CONTEUDO
112 *
.
.
02000
113
USING REGSBASE+X'2000',5
00108C D20F 3400 3410 00400 00410
114
MVC
A,B
001092 D215 4000 4016 01000 01016
115
MVC
C,D
001098 D22B 5000 502C 02000 0202C
116
MVC
E,F
00109E D241 6000 6042 03000 03042
117
MVC
G,H
0010A4 D257 7000 7058 04000 04058
118
MVC
I,J
119 *
.
.
0010AA D20F 3400 B000 00400 00000
120
MVC
A,DSEKCPO1
0010B0 D215 4000 B00B 01000 0000B
121
MVC
C,DSEKCPO2
0010B6 0000 0000 0000 00000 00000
122
MVC
E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
0010BC D241 6000 B021 03000 00021
123
MVC
G,DSEKCPO4
0010C2 D257 7000 B02C 04000 0002C
124
MVC
I,DSEKCPO5
0010C8 D20A B037 B042 00037 00042
125
MVC
DSEKCPO6,DSEKCPO7
126 *
.
.
0010CE 0000 0000
00000
127
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0010D2 58C0 40E0
010E0
128
L
12,=A(Z)
0010D6 D20F 3400 40E4 00400 010E4
129
MVC
A,=C'*'
130 *
.
.
0010E0
131
LTORG ,
0010E0 00005000
132
=A(Z)
0010E4 5C
133
=C'*'
134 *
.
.
0010E5 00
0010E6 D20F 3400 50D4 00400 020D4
135
MVC
A,=C'*'
0010EC 0000 0000
00000
136
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0010F0 58C0 50D0
020D0
137
L
12,=A(Z)
138 *
.
.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC OBJECT CODE
0010F4
ADDR1 ADDR2
02000
02000
002000
003000
002000
00202C
002063
002064
00206A
002070
002076
00207C
02000
00
D20F
D215
D22B
D241
D257
3400
4000
5000
6000
7000
3410
4016
502C
6042
7058
00400
01000
02000
03000
04000
00410
01016
0202C
03042
04058
STMT
139
140
141
142
143
144
145
146
147
148
149
150
206
206
SOURCE STATEMENT
ORG
,
*----------------------------------* ESTE TERCEIRO BLOCO E SERVIDO PELO
* REGISTRADOR BASE 5. ESTE BLOCO VAI
* DO ENDERECO 002000 ATE O 002FFF
*----------------------------------BLOCO3
EQU
*
DS
CL4096
ORG
BLOCO3
E
DS
CL44
F
DS
CL55
*
.
.
151
MVC
A,B
152
MVC
C,D
153
MVC
E,F
154
MVC
G,H
155
MVC
I,J
156 *
.
.
002082 D20F 3400 7058 00400 04058
157
MVC
A,J
002088 D257 7000 3410 04000 00410
158
MVC
I,B
00208E D215 4000 6000 01000 03000
159
MVC
C,G
002094 D24C 6042 4016 03042 01016
160
MVC
H,D
161 *
.
.
00209A D20F 3400 B000 00400 00000
162
MVC
A,DSEKCPO1
0020A0 D215 4000 B00B 01000 0000B
163
MVC
C,DSEKCPO2
0020A6 0000 0000 0000 00000 00000
164
MVC
E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
0020AC D241 6000 B021 03000 00021
165
MVC
G,DSEKCPO4
0020B2 D257 7000 B02C 04000 0002C
166
MVC
I,DSEKCPO5
0020B8 D20A B037 B042 00037 00042
167
MVC
DSEKCPO6,DSEKCPO7
168 *
.
.
0020BE 0000 0000
00000
169
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0020C2 58C0 50D0
020D0
170
L
12,=A(Z)
0020C6 D20F 3400 50D4 00400 020D4
171
MVC
A,=C'*'
172 *
.
.
0020D0
173
LTORG ,
0020D0 00005000
174
=A(Z)
0020D4 5C
175
=C'*'
176 *
.
.
0020D5 00
0020D6 D20F 3400 60FC 00400 030FC
177
MVC
A,=C'*'
0020DC 0000 0000
00000
178
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0020E0 58C0 60F8
030F8
179
L
12,=A(Z)
180 *
.
.
0020E4
03000
181
ORG
,
182 *----------------------------------183 * ESTE QUARTO
BLOCO E SERVIDO PELO
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
ADDR1 ADDR2
03000
003000
004000
003000
003042
00308F
003090
003096
00309C
0030A2
0030A8
03000
00
D20F
D215
D22B
D241
D257
3400
4000
5000
6000
7000
3410
4016
502C
6042
7058
00400
01000
02000
03000
04000
00410
01016
0202C
03042
04058
STMT
184
185
186
187
188
189
190
191
192
207
207
SOURCE STATEMENT
* REGISTRADOR BASE 6. ESTE BLOCO VAI
* DO ENDERECO 003000 ATE O 003FFF
*----------------------------------BLOCO4
EQU
*
DS
CL4096
ORG
BLOCO4
G
DS
CL66
H
DS
CL77
*
.
.
193
MVC
A,B
194
MVC
C,D
195
MVC
E,F
196
MVC
G,H
197
MVC
I,J
198 *
.
.
0030AE D20F 3400 7058 00400 04058
199
MVC
A,J
0030B4 D257 7000 3410 04000 00410
200
MVC
I,B
0030BA D215 4000 6000 01000 03000
201
MVC
C,G
0030C0 D24C 6042 4016 03042 01016
202
MVC
H,D
203 *
.
.
0030C6 D20F 3400 B000 00400 00000
204
MVC
A,DSEKCPO1
0030CC D215 4000 B00B 01000 0000B
205
MVC
C,DSEKCPO2
0030D2 0000 0000 0000 00000 00000
206
MVC
E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
0030D8 D241 6000 B021 03000 00021
207
MVC
G,DSEKCPO4
0030DE D257 7000 B02C 04000 0002C
208
MVC
I,DSEKCPO5
0030E4 D20A B037 B042 00037 00042
209
MVC
DSEKCPO6,DSEKCPO7
210 *
.
.
0030EA 0000 0000
00000
211
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0030EE 58C0 60F8
030F8
212
L
12,=A(Z)
0030F2 D20F 3400 60FC 00400 030FC
213
MVC
A,=C'*'
214 *
.
.
0030F8
215
LTORG ,
0030F8 00005000
216
=A(Z)
0030FC 5C
217
=C'*'
218 *
.
.
0030FD 00
0030FE D20F 3400 712C 00400 0412C
219
MVC
A,=C'*'
003104 0000 0000
00000
220
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
003108 58C0 7128
04128
221
L
12,=A(Z)
222 *
.
.
00310C
04000
223
ORG
,
224 *----------------------------------225 * ESTE QUINTO
BLOCO E SERVIDO PELO
226 * REGISTRADOR BASE 7. ESTE BLOCO VAI
227 * DO ENDERECO 004000 ATE O 004FFF
228 *-----------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC
OBJECT CODE
004000
005000
004000
004058
0040BB
0040BC
0040C2
0040C8
0040CE
0040D4
ADDR1 ADDR2
04000
04000
00
D20F
D215
D22B
D241
D257
3400
4000
5000
6000
7000
3410
4016
502C
6042
7058
00400
01000
02000
03000
04000
00410
01016
0202C
03042
04058
STMT
229
230
231
232
233
234
208
208
SOURCE STATEMENT
BLOCO5
EQU
*
DS
CL4096
ORG
BLOCO5
I
DS
CL88
J
DS
CL99
*
.
.
235
MVC
A,B
236
MVC
C,D
237
MVC
E,F
238
MVC
G,H
239
MVC
I,J
240 *
.
.
0040DA D20F 3400 7058 00400 04058
241
MVC
A,J
0040E0 D257 7000 3410 04000 00410
242
MVC
I,B
0040E6 D215 4000 6000 01000 03000
243
MVC
C,G
0040EC D24C 6042 4016 03042 01016
244
MVC
H,D
245 *
.
.
0040F2 D20F 3400 B000 00400 00000
246
MVC
A,DSEKCPO1
0040F8 D215 4000 B00B 01000 0000B
247
MVC
C,DSEKCPO2
0040FE 0000 0000 0000 00000 00000
248
MVC
E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
004104 D241 6000 B021 03000 00021
249
MVC
G,DSEKCPO4
00410A D257 7000 B02C 04000 0002C
250
MVC
I,DSEKCPO5
004110 D20A B037 B042 00037 00042
251
MVC
DSEKCPO6,DSEKCPO7
252 *
.
.
004116 0000 0000
00000
253
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
00411A 58C0 7128
04128
254
L
12,=A(Z)
00411E D20F 3400 712C 00400 0412C
255
MVC
A,=C'*'
256 *
.
.
004128
257
LTORG ,
004128 00005000
258
=A(Z)
00412C 5C
259
=C'*'
260 *
.
.
00412D 00
00412E 0000 0000 0000 00000 00000
261
MVC
A,=C'*'
IEV034 *** ERROR *** ADDRESSABILITY ERROR
004134 0000 0000
00000
262
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
004138 0000 0000
00000
263
L
12,=A(Z)
IEV034 *** ERROR *** ADDRESSABILITY ERROR
264 *
.
.
00413C
05000
265
ORG
,
266 *----------------------------------267 * ESTE SEXTO BLOCO NAO TEM BASE QUE
268 * O ATENDA. TODOS OS SEUS ENDERECOS
269 * NAO PODEM SER CONVERTIDOS EM
270 * BASE+DESLOCAMENTO
271 *-----------------------------------
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC OBJECT CODE
005000
ADDR1 ADDR2
209
209
STMT
SOURCE STATEMENT
272 Z
DS
CL80
273 *
.
.
005050 D20F 3400 3410 00400 00410
274
MVC
A,B
005056 D215 4000 4016 01000 01016
275
MVC
C,D
00505C D22B 5000 502C 02000 0202C
276
MVC
E,F
005062 D241 6000 6042 03000 03042
277
MVC
G,H
005068 D257 7000 7058 04000 04058
278
MVC
I,J
279 *
.
.
00506E D20F 3400 7058 00400 04058
280
MVC
A,J
005074 D257 7000 3410 04000 00410
281
MVC
I,B
00507A D215 4000 6000 01000 03000
282
MVC
C,G
005080 D24C 6042 4016 03042 01016
283
MVC
H,D
284 *
.
.
005086 D20F 3400 B000 00400 00000
285
MVC
A,DSEKCPO1
00508C D215 4000 B00B 01000 0000B
286
MVC
C,DSEKCPO2
005092 0000 0000 0000 00000 00000
287
MVC
E,DSEKCOP3
IEV044 *** ERROR *** UNDEFINED SYMBOL
005098 D241 6000 B021 03000 00021
288
MVC
G,DSEKCPO4
00509E D257 7000 B02C 04000 0002C
289
MVC
I,DSEKCPO5
0050A4 D20A B037 B042 00037 00042
290
MVC
DSEKCPO6,DSEKCPO7
291 *
.
.
0050AA 0000 0000
00000
292
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050AE 0000 0000
00000
293
L
12,=A(Z)
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050B2 0000 0000 0000 00000 00000
294
MVC
A,=C'*'
IEV034 *** ERROR *** ADDRESSABILITY ERROR
295 *
.
.
0050B8
296
LTORG ,
0050B8 00005000
297
=A(Z)
0050BC 5C
298
=C'*'
299 *
.
.
0050BD 00
0050BE 0000 0000 0000 00000 00000
300
MVC
A,=C'*'
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050C4 0000 0000
00000
301
LA
12,Z
IEV034 *** ERROR *** ADDRESSABILITY ERROR
0050C8 0000 0000
00000
302
L
12,=A(Z)
IEV034 *** ERROR *** ADDRESSABILITY ERROR
303 *----------------------------------304 * ESTA E' A DSECT DSEQUIT.
305 * OS SEUS CAMPOS SERAO ENDERECADOS
306 * PELO REGISTRADOR 11
307 *----------------------------------000000
308 DSEQUIT DSECT
000000
309 DSEKCPO1 DS
CL11
00000B
310 DSEKCPO2 DS
CL11
000016
311 DSEKCPO3 DS
CL11
000021
312 DSEKCPO4 DS
CL11
00002C
313 DSEKCPO5 DS
CL11
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
LOC OBJECT CODE
000037
000042
ADDR1 ADDR2
0050CC
0050D0 00005000
0050D4 5C
STMT
314
315
316
317
318
319
320
321
322
210
210
SOURCE STATEMENT
DSEKCPO6 DS
CL11
DSEKCPO7 DS
CL11
*----------------------------------* VOLTO PARA A CSECT DO PROGRAMA
*----------------------------------REGSBASE CSECT ,
END
,
=A(Z)
=C'*'
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - POS.ID
0001
0001
0001
0001
0001
0001
0001
REL.ID
0001
0001
0001
0001
0001
0001
0001
FLAGS
0C
0C
0C
0C
0C
0C
0C
ADDRESS
0004A8
0010E0
0020D0
0030F8
004128
0050B8
0050D0
RELOCATION DICTIONARY
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
SYMBOL
A
LEN
00016
VALUE DEFN
000400 0038
B
BLOCO1
BLOCO2
BLOCO3
BLOCO4
BLOCO5
C
00016
00001
00001
00001
00001
00001
00022
D
DSEKCOP3
DSEKCPO1
DSEKCPO2
DSEKCPO3
DSEKCPO4
DSEKCPO5
DSEKCPO6
DSEKCPO7
DSEQUIT
E
F
G
00033
001016 0088
****UNDEFINED****
00011
000000 0309
00011
00000B 0310
00011
000016 0311
00011
000021 0312
00011
00002C 0313
00011
000037 0314
00011
000042 0315
00001 00000000 0308
00044
002000 0148
00055
00202C 0149
00066
003000 0190
H
I
00077
00088
000410
00000000
00001000
00002000
00003000
00004000
001000
0039
0034
0084
0145
0187
0229
0087
003042 0191
004000 0232
J
00099
004058 0233
REGSBASE 00001 00000000 0011
Z
00080
005000 0272
=A(Z)
=A(Z)
=A(Z)
=A(Z)
=A(Z)
=A(Z)
=A(Z)
=C'*'
=C'*'
=C'*'
=C'*'
=C'*'
=C'*'
=C'*'
00004
00004
00004
00004
00004
00004
00004
00001
00001
00001
00001
00001
00001
00001
0004A8
0010E0
0020D0
0030F8
004128
0050B8
0050D0
0004AC
0010E4
0020D4
0030FC
00412C
0050BC
0050D4
0071
0132
0174
0216
0258
0297
0321
0072
0133
0175
0217
0259
0298
0322
REFERENCES
0041 0046 0052
0193 0199 0204
0042 0046 0053
0036
0086
0147
0189
0231
0043 0047 0054
0275 0282 0286
0043 0047 0055
0059 0122 0164
0057 0120 0162
0058 0121 0163
0060
0061
0062
0062
0024
0043
0043
0044
0277
0044
0044
0278
0044
0113
0064
0297
0067
0076
0137
0179
0221
0263
0302
0068
0074
0135
0177
0219
0261
0300
211
211
CROSS REFERENCE
0057 0068 0074 0090 0096 0104 0
0213 0219 0235 0241 0246 0255 0
0090 0097 0104 0114 0151 0158 0
0058 0091 0098 0105 0115 0121 0
0091
0206
0204
0205
0099
0248
0246
0247
0105 0115 0152 0160 0
0287
0285
0286
0249
0250
0251
0251
0288
0289
0290
0290
0123
0124
0125
0125
0165
0166
0167
0167
0207
0208
0209
0209
0048
0048
0049
0282
0049
0050
0281
0050
0319
0065
0301
0059
0092
0054
0288
0055
0053
0289
0052
0092 0106 0116 0122 0153 0164 0
0106 0116 0153 0195 0237 0276
0060 0093 0098 0107 0117 0123 0
0128
0170
0212
0254
0293
0129
0171
0213
0255
0294
0093 0099 0107 0117 0154 0160 0
0061 0094 0097 0108 0118 0124 0
0094 0096 0108 0118 0155 0157 0
0066 0071 0075 0127 0132 0136 0169 0
0321
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
212
212
DIAGNOSTIC CROSS REFERENCE AND ASSEMBLER S
THE FOLLOWING STATEMENTS WERE FLAGGED
000059 000065 000066 000075 000106 000122 000127 000136 000164 000169 000
000261 000262 000263 000287 000292 000293 000294 000300 000301 000302
26 STATEMENTS FLAGGED IN THIS ASSEMBLY
8 WAS HIGHEST SEVERITY CO
OVERRIDING PARAMETERS- LINECOUNT(50),XREF(FULL)
OPTIONS FOR THIS ASSEMBLY
DECK, NOOBJECT, LIST, XREF(FULL), NORENT, NOTEST, NOBATCH, ALIGN, ESD, R
FLAG(0), SYSPARM()
NO OVERRIDING DD NAMES
308 CARDS FROM SYSIN
0 CARDS FROM SYSLIB
452 LINES OUTPUT
24 CARDS OUTPUT
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
213
213
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
R01=00000100
R02=00000200
R03=00000300
R04=00000400
R05=00000500
R06=00000600
R07=00000700
R08=00000800
R09=00000900
R10=00000A00
R11=00000B00
R12=00000C00
R13=00000D00
R14=00000E00
R15=00000F00
Instruções a decodificar:
1ABB41278CF00A13980F334445E00CB490EC0D00FA82305448CCD28233445566
EP302
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (ZIG). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
6
16
31
Informação
Informação
Informação
Informação
5
15
30
50
5
10
15
20
X
X
X
X
ALFA
BETA
GAMA
DELTA
Exemplo:
12345678901234567890123456789012345678901234567890 ("régua")
AAAAABBBBBBBBBBCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDD
11111222222222233333333333333344444444444444444444
-----**********&&&&&&&&&&&&&&&====================
--------------------------------------------------------------------------SAIDA
: Arquivo em disco sequencial (ZAG). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
16
21
41
Informação
Informação
Informação
Informação
15
20
40
50
15
5
20
10
X
X
X
X
GAMA
ALFA
DELTA
BETA
Exemplo:
12345678901234567890123456789012345678901234567890 ("régua")
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
214
214
CCCCCCCCCCCCCCCAAAAADDDDDDDDDDDDDDDDDDDDBBBBBBBBBB
33333333333333311111444444444444444444442222222222
&&&&&&&&&&&&&&&-----====================**********
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de ZIG lido, gravar um registro de ZAG.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
215
215
EP303
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (TIC).
Tem no máximo 10 registros. Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
9
13
17
21
25
29
33
37
Informação
Informação
Informação
Informação
Informação
Informação
Informação
Informação
Informação
Informação
4
8
12
16
20
24
28
32
36
40
4
4
4
4
4
4
4
4
4
4
X
X
X
X
X
X
X
X
X
X
a
b
c
d
e
f
g
h
i
j
Exemplo:
1234567890123456789012345678901234567890 ("régua")
AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJ
1111222233334444555566667777888899990000
LLLLMMMMOOOOPPPPQQQQRRRRSSSSTTTTUUUUXXXX
--------------------------------------------------------------------------SAIDA
: Arquivo em disco sequencial (TAC). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
9
Número registro
Informação n
zeros binários
4
8
20
4
4
12
B
X
X
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
00000001C1C1C1C1000000000000000000000000
00000002F2F2F2F2000000000000000000000000
00000003D6D6D6D6000000000000000000000000
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de TIC lido, gravar um registro de TAC, onde a informação
n corresponde ao n-ésimo campo do registro de entrada, sendo n = número do
registro. Por exemplo, o registro 1 vai ter a informação
a
gravada; o
registro 2 vai ter a informação b; e assim por diante.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
216
216
EP304
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (ENTRA). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
Informação qualquer
50
50
X
Exemplo:
1234567890123456789012345678901234567890 ("régua")
TEXTO LIVRE PARA DAR ASAS A IMAGINACAO
MOVE SPACES TO LINHA-DE-IMPRESSAO
OKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOKOK
--------------------------------------------------------------------------SAIDA
: Arquivo em disco sequencial (SAI). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
9
13
Número registro
quantos brancos
quantos não brancos
X'FF' em todos bytes
4
8
12
20
4
4
4
8
B
B
B
X
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
00000001000000080000002AFFFFFFFFFFFFFFFF
000000020000000A00000028FFFFFFFFFFFFFFFF
000000030000003200000000FFFFFFFFFFFFFFFF
000000040000000000000032FFFFFFFFFFFFFFFF
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de ENTRA lido, considerá-lo como uma tabela de
elementos de 1 byte cada; pesquisar cada byte para saber se ele está
branco (X'40') ou não, e ir acumulando em dois acumuladores a quantidade
bytes brancos e não-brancos detectada. Após "varrer" o registro inteiro
suas 50 posições, gravar um registro de SAI.
50
em
de
em
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
217
217
EP305
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (TOP). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
9
13
Número a
Número b
Número c
brancos
4
8
12
20
4
4
4
8
B
B
B
X
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
0000000100000002000000034040404040404040
0000000700000006000000054040404040404040
000000090000000A000000024040404040404040
--------------------------------------------------------------------------SAIDA
: Arquivo em disco sequencial (DOWN). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
9
13
Número registro
menor número
maior número
X'FF' em todos bytes
4
8
12
20
4
4
4
8
B
B
B
X
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
000000010000000100000003FFFFFFFFFFFFFFFF
000000020000000500000007FFFFFFFFFFFFFFFF
00000003000000020000000AFFFFFFFFFFFFFFFF
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de TOP lido, determinar dos 3 números fornecidos (a, b, c)
qual deles é o menor e qual deles é o maior; gravar, então, um registro de
DOWN.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
218
218
EP306
--------------------------------------------------------------------------ENTRADA 1 : Arquivo em disco sequencial (EU)
Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
9
13
Número a
Número b
Número c
Filler
4
8
12
20
4
4
4
8
B
P
Z
C
Exemplo:
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")
000000010000123CF0F0F1F10000000000000000
000000020000124CF0F0F1F20000000000000000
000000030000125CF0F0F1F30000000000000000
--------------------------------------------------------------------------SAIDA
: Arquivo sequencial em disco (ELA). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
15
Número do registro
Média ponderada
Filler
4
14
20
4
10
6
B
Z
C
Exemplo:
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 ("régua")
00000001F0F0F0F0F0F0F0F0F4F5000000000000
00000002F0F0F0F0F0F0F0F0F4F6000000000000
00000003F0F0F0F0F0F0F0F0F4F7000000000000
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro lido em EU calcular a média ponderada (MP):
MP = ( (a.7) + (b.8) + (c.9) ) / 24
e gravar um registro de ELA.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
219
219
EP307
--------------------------------------------------------------------------ENTRADA 1 : Arquivo em disco sequencial (VEMTAB)
Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
6
Código cidade
Nome cidade
5
30
5
25
C
C
Exemplo:
123456789012345678901234567890 ("régua")
00003BOM JESUS DE PIRAPORA
00001SAO PAULO
00002SAO JOAO DO CAIUA
--------------------------------------------------------------------------ENTRADA 2 : Arquivo em disco sequencial (VEMMAIS)
Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
6
Código cidade
Nome prefeito
5
30
5
25
C
C
Exemplo:
123456789012345678901234567890 ("régua")
00001PREFEITO DA CIDADE 00001
00002ALBERTO ROMANO SCHIESARI
00003QUITERIA SILVEIRA
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
220
220
--------------------------------------------------------------------------SAIDA
: Relatório (VAI). Lay-out:
123456789012345678901234567890123456789012345678901234567890 ("régua")
xxxxx xxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx
cod
nome cidade
nome prefeito
cid
Exemplo:
123456789012345678901234567890123456789012345678901234567890 ("régua")
00001 SAO PAULO
00002 SAO JOAO DO CAIUA
00003 BOM JESUS DE PIRAPORA
PREFEITO DA CIDADE 00001
ALBERTO ROMANO SCHIESARI
QUITERIA SILVEIRA
--------------------------------------------------------------------------PROCESSAMENTO
Numa primeira fase, o programa deve ler o arquivo VEMTAB e montar uma tabela
em memória com o código da cidade e o nome da cidade, onde cada elemento é
oriundo de um registro lido. O arquivo VEMTAB pode ter no máximo 6000
registros; testar a quantidade, para, no caso de ela exceder os 6000,
cancelar o programa.
Terminada essa fase, iniciar a segunda fase, na qual deve-se ler VEMMAIS e,
para cada registro lido, imprimir uma linha de VAI, onde o nome da cidade
deve ser obtido através de pesquisa sequencial na tabela montada durante a
primeira fase do programa.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
221
221
EP308
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (PAZ). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
Informação qualquer
Brancos
4
20
4
16
B
C
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
C1F200AA40404040404040404040404040404040
5C614EFF40404040404040404040404040404040
--------------------------------------------------------------------------SAIDA
: Relatório (AMOR). Lay-out:
123456789012345678901234567890123456789012345678901234567890 ("régua")
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
"dump" (em EBCDIC) do conteúdo dos
4 bytes iniciais do registro de PAZ
Exemplo:
123456789012345678901234567890123456789012345678901234567890 ("régua")
11000001111100100000000010101010
01011100011000010100111011111111
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de PAZ lido, determinar, para cada um dos bits dos 4
primeiros bytes do registros, se eles estão ligados ou desligados. Cada um
que estiver ligado, deve ser representado na posição respectiva da linha de
impressão com 1; e, se estiver desligado, deve ser representado com 0.
Observar que a representação na linha de impressão, para que possa ser
visualizada, deve ser feita em EBCDIC: se for 0, o conteúdo do byte na linha
de impressão deve ser X'F0'; se for 1, o conteúdo deverá ser X'F1'.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
222
222
EP309
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (ROMEU). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
5
10
13
Número a
Número b
Número c
Brancos
4
9
12
20
4
5
3
8
B
Z
P
C
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
0000000AF1F2F3F4D501234C4040404040404040
00000011F0F0F1F9F900002D4040404040404040
--------------------------------------------------------------------------SAIDA
: Relatório (JULIETA). Lay-out:
123456789012345678901234567890123456789012345678901234567890 ("régua")
RELATORIO DE CALCULOS
xxxxxxxxxx NEGATIVO ou
POSITIVO ou
ZERO
resultado result1
PAG xxx
xxxxxxxxxx NEGATIVO ou
POSITIVO ou
ZERO
resto
Exemplo:
123456789012345678901234567890123456789012345678901234567890 ("régua")
RELATORIO DE CALCULOS
0000062909 NEGATIVO
0000001082 POSITIVO
PAG 001
0000000001 NEGATIVO
0000000000 ZERO
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de ROMEU lido, efetuar o seguinte cálculo:
RESULT1 = ((a+b)*5)-c
Calcular, em seguida, o resto da divisão RESULT1/2.
Imprimir uma linha de JULIETA de acordo com o lay-out, controlando fim de
folha através de contador de linhas (máximo 10 linhas de detalhe por página).
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
223
223
EP310
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (TRISTAO). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
1
3
5
7
Data na forma DDMMAA
Dia
Mes
Ano
Brancos
6
2
4
6
20
6
2
2
2
14
Z
Z
Z
Z
C
Exemplo:
12345678901234567890
("régua")
280288
311290
121091
--------------------------------------------------------------------------SAIDA
: Relatório (ISOLDA). Lay-out:
123456789012345678901234567890123456789012345678901234567890 ("régua")
ddmmaa
data fornecida
ddmmaa
data calculada
Exemplo:
123456789012345678901234567890123456789012345678901234567890 ("régua")
280288
311290
121091
010388
010191
131091
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de TRISTAO lido, calcular, com base na data fornecida, a
data correspondente ao dia seguinte; respeitar os meses com 30 ou 31 dias, e
no caso de fevereiro, considerar os anos bissextos ou não, para efeito do
número máximo de dias (29 ou 28).
Imprimir uma linha de ISOLDA de acordo com o lay-out.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
224
224
EP311
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (JOHN). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
Informação qualquer
20
20
C
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
F1C34E000102030405060708090A0B0C0D0E0F1E
61506B1112131415161718191A1B1C1D1E1F2021
A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3
--------------------------------------------------------------------------SAIDA
: Relatório (LENNON). Lay-out:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
... dump em hexa do registro de john ...
xxxxxxxxxxxxxxxxxxxx
.... dump em carater
Exemplo:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
F1C34E000102030405060708090A0B0C0D0E0F1E
61506B1112131415161718191A1B1C1D1E1F2021
A0A1A2A3A4A5A6A7A8A9AAABACADAEAFB0B1B2B3
1C+.................
/&,.................
....................
--------------------------------------------------------------------------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, observandose que os caracteres não imprimíveis devem aparecer como um ponto.
Considerar como caracteres imprimíveis os algarismos decimais, as letras
maiúsculas, e os caracteres especiais . , + - / ? & $ * ( )
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
225
225
EP312
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (MICRO). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
Informação qualquer
20
20
C
Exemplo: (em hexadecimal)
1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0
("régua")
8182838485868788894040404040404040404040
9192939495969798994040404040404040404040
A2A3A4A5A6A7A8A9404040404040404040404040
--------------------------------------------------------------------------SAIDA
: Relatório (MACRO). Lay-out:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
xxxxxxxxxxxxxxxxxxxx
dump em carater do registro de micro
Exemplo:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
ABCDEFGHI
JKLMNOPQR
STUVWXYZ
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de MICRO lido, exibir uma linha de MACRO onde apareça o
dump em carater dos dados lidos em JOHN, e transformados. Considerar que
MICRO tenha em seu conteúdo somente letras minúsculas e brancos, e a
transformação deve consistir na conversão das letras minúsculas em
maiúsculas, deixando os brancos inalterados.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
226
226
EP313
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (HONEY). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
7
Data na forma DDMMAA
Brancos
6
20
6
14
Z
C
Exemplo:
12345678901234567890
("régua")
130190
150291
300392
--------------------------------------------------------------------------SAIDA
: Relatório (MOON). Lay-out:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
ddmmaa
data gregoriana
yyddd
data juliana
Exemplo:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
130190
90013
150291
91046
300392
92090
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de HONEY lido, exibir uma linha de MOON, onde a data
juliana tenha sido obtida através de uma sub-rotina externa que converterá a
data gregoriana em juliana. Deve-se fornecer como parâmetros da sub-rotina 2
campos: o que tem a data gregoriana e o que terá a data juliana. A data
gregoriana deverá ser consistida:
- deve ser numérica
- mes não pode ser menor que 1 nem maior que 12
- dia deve ser compatível com o mes, considerando-se o caso dos anos
bissextos.
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
227
227
EP314
--------------------------------------------------------------------------ENTRADA : Arquivo em disco sequencial (FREE). Lay-out:
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
Texto livre
60
60
C
Exemplo:
123456789012345678901234567890123456789012345678901234567890
("régua")
ESTOU APRENDENDO ASSEMBLER E JA SEI QUASE TUDO 123 $ &&&
WORD
LOTUS
DOS
MVS 123 ***** LASTLA
A 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
nro registro
qq
quantidade de strings
Exemplo:
12345678901234567890123456789012345678901234567890123456789012 ("régua")
REGISTRO
REGISTRO
REGISTRO
REGISTRO
1
2
3
4
11
7
30
30
--------------------------------------------------------------------------PROCESSAMENTO
Para cada registro de FREE lido, exibir uma linha de WAY, onde apareça a
quantidade de strings existentes no registro de entrada. Considerar como
string um conjunto de caracteres não brancos que terminem com um branco (ou
no fim do registro).
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
228
228
EXERCÍCIOS RESOLVIDOS
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
1 : (987654)10 = (1111 0001 0010 0000 0110)2
2 : (4095)10 = (1111 1111 1111)2
3 : (7)10 = (111)2
4 : (1023)10 = (11 1111 1111)2
5 : (4096)10 = (1 0000 0000 0000)2
6 : (255)10 = (1111 1111)2
7 : (1024)10 = (100 0000 0000)2
8 : (10010001)10 = (1001 1000 1011 1101 1001 0001)2
9 : (256)10 = (1 0000 0000)2
10 : (1025)10 = (100 0000 0001)2
11 : (999888)10 = (1111 0100 0001 1101 0000)2
12 : (65432)10 = (1111 1111 1001 1000)2
13 : (987654)10 = (F1206)16
14 : (4095)10 = (FFF)16
15 : (7)10 = (7)16
16 : (1023)10 = (3FF)16
17 : (4096)10 = (1000)16
18 : (255)10 = (FF)16
19 : (1024)10 = (400)16
20 : (10010001)10 = (98BD91)16
21 : (256)10 = (100)16
22 : (1025)10 = (401)16
23 : (999888)10 = (F41D0)16
24 : (65432)10 = (FF98)16
25 : (11111000111010100100001 )2 = (7C7521)16
26 : (1000000111000111111110000011111110)2 = (2071FE0FE)16
27 : (1100)2 = (C)16
28 : (11111110001)2 = (7F1)16
29 : (1010101010101000110011000111)2 = (AAA8CC7)16
30 : (110011001100110011001)2 = (199999)16
31 : (1000000000000001)2 = (8001)16
32 : (1000000001)2 = (201)16
33 : (111111100000001111111)2 = (1FC07F)16
34 : (1)2 = (1)16
35 : (1100101011111110)2 = (CAFE)16
36 : (101011010111000111000000001111110001111)2 = (56B8E01F8F)16
37 : (CAFE)16 = (1100101011111110)2
38 : (CDF)16 = (110011011111)2
39 : (1AB4D)16 = (11010101101001101)2
40 : (15)16 = (10101)2
41 : (F)16 = (1111)2
42 : (87B54)16 = (10000111101101010100)2
43 : (1001)16 = (1000000000001)2
44 : (234)16 = (1000110100)2
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
:
229
229
(CAD)16 = (110010101101)2
(7F7)16 = (11111110111)2
(1990)16 = (1100110010000)2
(33)16 = (110011)2
(11)2 = (3)10
(100001111111)2 = (2175)10
(101010010101)2 = (2709)10
(110000001111111)2 = (24703)10
(11111110000011)2 = (16259)10
(11110000111000)2 = (15416)10
(11)2 = (3)10
(111111110)2 = (510)10
(1111100001111000111001101)2 = (32567757)10
(1000000000000)2 = (4096)10
(11111001)2 = (249)10
(1000000000000001)2 = (32769)10
(11)16 = (17)10
(AAF45)16 = (?)10
(1B567)16 = (111975)10
(100)16 = (256)10
(1000)16 = (4096)10
(FF)16 = (255)10
(FFF)16 = (4095)10
(CDF)16 = (3295)10
(CAFE)16 = (51966)10
(FACA)16 = (64202)10
(DAD0)16 = (56016)10
(F1E2D3C4)16 = (4058174404)10
(11001100)2 + (10101010)2 = (1 0111 0110)2
(1111001111)2 + (1001111001)2 = (110 0100 1000)2
(1111)2 + (1)2 = (10000)2
(1111)2 + (111)2 = (10110)2
(100001)2 + (11110)2 = (111111)2
(1011110011)2 + (111101111)2 = (100 1110 0010)2
(110011001100)2 + (101011110000)2 = (1 0111 1011 1100)2
(1111100001111000)2 + (101111)2 = (1111 1000 1010 0111)2
(111)2 + (1111)2 + (100)2 = (11010)2
(11)2 + (111)2 + (1111)2 + (11111)2 = (111000)2
(1111)2 + (1001)2 + (111)2 + (101)2 + (11)2 + (1)2 = (101000)2
(111)2 + (1000)2 + (1)2 + (1100)2 = (11100)2
(11001100)2 - (1010101)2 = (111 0111)2
(1111001111)2 - (1111001)2 = (11 0101 0110)2
(1111)2 - (1)2 = (1110)2
(1111)2 - (111)2 = (1000)2
(100001)2 - (11110)2 = (11)2
(1011110011)2 - (111101111)2 = (1 0000 0100)2
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
Exercício
91 : (11001100)2 - (111011110000)2 = (...1111 1111 1100 1101)2
92 : (1111000)2 - (101010111)2 = (... 1111 1111 0010 0001)2
93 : (111)2 - (1111)2 = (... 1111 1111 1111 1000)2
94 : (10001)2 - (111111)2 = (... 1111 1111 1101 0010)2
95 : (0)2 - (1)2 = (... 1111 1111 1111 1111)2
96 : (0)2 - (10)2 = (... 1111 1111 1111 1110)2
97 : (F12B)16 + (321)16 = (F44C)16
98 : (1100)16 + (111)2 = (1211)16
99 : (1000F)16 + (F0001)16 = (100010)16
100 : (A9B8C7)16 + (D6E5F4)16 = (1809EBB)16
101 : (CAFE)16 + (CDF)16 = (D7DD)16
102 : (B001)16 + (FD)16 = (B0FE)16
103 : (999)16 + (111)16 = (AAA)16
104 : (123456)16 + (789ABC)16 = (19BBF12)16
105 : (FFF)16 + (EEE)16 = (1EED)16
106 : (DDD)16 + (333)16 = (1110)16
107 : (987AED)16 + (CF01)16 = (9949EE)16
108 : (FACA)16 + (CAFE)16 = (1C5C8)16
109 : (F1C5)16 - (101)16 = (F0C4)16
110 : (1AD87C)16 - (FDE9)2 = (19DA93)16
111 : (112233)16 - (44556)16 = (CDCDD)16
112 : (AABBCC)16 - (DDEEF)16 = (9CDCDD)16
113 : (F1E2D3)16 - (C4B5A6)16 = (2D2D2D)16
114 : (FF00001)16 - (10000F)16 = (FDFFFF2)16
115 : (CAFE)16 - (FACA)16 = (...FFFFD034)16
116 : (CDF)16 - (FDC)16 = (...FFFFFD03)16
117 : (10001)16 - (20001)16 = (...FFFF0000)16
118 : (10000)16 - (FFFE)16 = (2)16
119 : (0)16 - (9)16 = (...FFFFFFF7)16
120 : (0)16 - (1A)16 = (...FFFFFFE6)16
121 : (1)10 = (0000 0000 0000 0001)2 = (0001)16
= (0000 0000 0000 0000 0000 0000 0000 0001)2
= (00000001)16
122 : (-1)10 = (1111 1111 1111 1111)2 = (FFFF)16
= (1111 1111 1111 1111 1111 1111 1111 1111)2
= (FFFFFFFF)16
123 : (10)10 = (0000 0000 0000 1010)2 = (000A)16
= (0000 0000 0000 0000 0000 0000 0000 1010)2
= (0000000A)16
124 : (-10)10 = (1111 1111 1111 0110)2 = (FFF6)16
= (1111 1111 1111 1111 1111 1111 1111 0110)2
= (FFFFFFF6)16
125 : (17)10 = (0000 0000 0001 0001)2 = (0011)16
= (0000 0000 0000 0000 0000 0000 0001 0001)2
= (00000011)16
126 : (-17)10 = (1111 1111 1110 1111)2 = (FFEF)16
230
230
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
Exercício 127 :
Exercício 128 :
Exercício 129 :
Exercício 130 :
Exercício 131 :
Exercício 132 :
Exercício 133 :
Exercício 134 :
Exercício 135 :
Exercício 136 :
Exercício 137 :
Exercício 138 :
= (1111 1111 1111 1111 1111 1111 1110 1111)2
= (FFFFFFEF)16
(254)10 = (0000 0000 1111 1110)2
= (00FE)16
= (0000 0000 0000 0000 0000 0000 1111 1110)2
= (000000FE)16
(-254)10 = (1111 1111 0000 0010)2
= (FF02)16
= (1111 1111 1111 1111 1111 1111 0000 0010)2
= (FFFFFF02)16
(100000)10 = (imposível representar em 2 bytes)
= (0000 0000 0000 0001 1000 0110 1010 0000)2
= (000186A0)16
(-100000)10 = (imposível representar em 2 bytes)
= (1111 1111 1111 1110 0111 1001 0110 0000)2
= (FFFE7960)16
(32000)10 = (0111 1101 0000 0000)2
= (7D00)16
= (0000 0000 0000 0000 0111 1101 0000 0000)2
= (00007D00)16
(-32000)10 = (1000 0011 0000 0000)2
= (8300)16
= (1111 1111 1111 1111 1000 0011 0000 0000)2
= (FFFF8300)16
(63000)10 = (imposível representar em 2 bytes)
= (1111 1111 1111 1111 1111 0110 0001 1000 )2
= (FFFFF618)16
(-63000)10 = (imposível representar em 2 bytes)
= (1111 1111 1111 1111 0000 1001 1110 1000)2
= (FFFF09E8)16
(1010)10 = (0000 0011 1111 0010)2
= (03F2)16
= (0000 0000 0000 0000 0000 0011 1111 0010)2
= (000003F2)16
(-1010)10 = (1111 1100 0000 1110)2
= (FC0E)16
= (1111 1111 1111 1111 1111 1100 0000 1110)2
= (FFFFFC0E)16
(4095)10 = (0000 1111 1111 1111)2
= (0FFF)16
= (0000 0000 0000 0000 0000 1111 1111 1111)2
= (00000FFF)16
(-4095)10 = (1111 0000 0000 0001)2
= (F001)16
= (1111 1111 1111 1111 1111 0000 0000 0001)2
= (FFFFF001)16
231
231
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
232
232
Exercício 139 : (4097)10 = (0001 0000 0000 0001)2
= (1001)16
= (0000 0000 0000 0000 0001 0000 0000 0001)2
= (00001001)16
Exercício 140 : (-4097)10 = (1110 1111 1111 1111)2
= (EFFF)16
= (1111 1111 1111 1111 1110 1111 1111 1111)2
= (FFFFEFFF)16
Exercí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 ]
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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 ]
233
233
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
234
234
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.
*
EP195:
EP196:
EP197:
EP198:
EP199:
EP200:
EP201:
EP202:
EP203:
EP204:
EP205:
EP206:
EP207:
EP208:
EP209:
EP210:
EP211:
EP212:
EP213:
EP214:
EP215:
EP216:
EP217:
EP218:
EP219:
EP220:
EP221:
EP222:
EP223:
EP224:
EP225:
EP226:
EP227:
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
C'123'
C'+123'
C'-123'
C'12.3'
C'1AB8'
C'01101'
C'A+B=C'
CL4'A'
CL4'ABCDEF'
3CL2'A'
2CL3'A,B'
C'ME&&YOU'
C'''S MUSIC'
C'@@OI'
CL3'*'
3C'*'
X'123'
X'-123'
X'1AB2C3'
X'1AB2F4G3'
XL3'12D'
XL3'AABBCCDDEE'
X'1,22,333,4444'
XL2'1,22,333'
2X'1,22,333'
2XL2'1,22'
B'01010101'
B'1'
BL2'1111'
B'1,1111111111'
BL2'1,1111111111'
2B'1000'
2BL2'1000'
EP228:
EP229:
EP230:
EP230:
EP231:
EP232:
DC
DC
DC
DC
DC
DC
F'10'
F'+10'
F'-10'
F'-15,+16'
2F'22'
2F'33,44'
EP233:
EP234:
DC
DC
FL3'258'
2FL1'255'
EP235:
EP236:
EP237:
EP238:
EP239:
EP240:
EP241:
EP242:
EP243:
DC
DC
DC
DC
DC
DC
DC
DC
DC
F'128000'
H'10'
H'+10'
H'-10'
H'-15,+16'
2H'22'
2H'33,44'
HL3'258'
2HL1'255'
EP244:
EP245:
EP246:
EP247:
EP248:
EP249:
DC
DC
DC
DC
DC
DC
H'128000'
P'123'
P'+123'
P'-123'
PL4'456'
PL1'789'
Endereço Conteúdo
0000 F1.F2.F3
0003 4E.F1.F2.F3
0007 60.F1.F2.F3
000B F1.F2.4B.F3
000F F1.C1.C2.F8
0013 F0.F1.F1.F0.F1
0018 C1.4E.C2.7E.C3
001D C1.40.40.40
0021 C1.C2.C3.C4
0025 C1.40.C1.40.C1.40
002B C1.6B.C2.C1.6B.C2
0031 D4.C5.50.E8.D6.E4
0037 7D.E2.40.D4.E4.E2.C9.C3
003F 7C.7C.D6.C9
0043 5C.40.40
0046 5C.5C.5C
0049 01.23
*** erro ***
004B 1A.B2.C3
*** erro ***
004E 00.01.2D
0051 CC.DD.EE
0054 01.22.03.33.44.44
005A 00.01.00.22.03.33
0060 01.22.03.33.01.22.03.33
0068 00.01.00.22.00.01.00.22
0070 55
0071 01
0072 00.0F
0074 01.03.FF
0077 00.01.03.FF
007B 08.08
007D 00.08.00.08
0081 00.00.00 (align)
0084 00.00.00.0A
0088 00.00.00.0A
008C FF.FF.FF.F6
0090 FF.FF.FF.F1.00.00.00.10
0098 00.00.00.16.00.00.00.16
00A0 00.00.00.21.00.00.00.2C
00.00.00.21.00.00.00.2C
00B0 00.01.02
00B3 FF.FF
00B5 00.00.00 (align)
00B8 00.01.F4.00
00BC 00.0A
00BE 00.0A
00C0 FF.F6
00C2 FF.F1.00.10
00C6 00.16.00.16
00CA 00.21.00.2C.00.21.00.2C
00D2 00.01.02
00D5 FF.FF
00D7 00 (align)
00D8 F4.00
00DA 12.3C
00DC 12.3C
00DE 12.3D
00E0 00.00.45.6C
00E4 9C
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
EP250:
EP251:
EP252:
EP253:
EP254:
EP255:
DC
DC
DC
DC
DC
DC
P'1,-22,333,-4444'
PL2'1,-22,333,-4444'
3P'0'
PL3'0'
2P'1,22,333'
2PL2'1,22,333'
00E5
00ED
00F5
00F8
00FB
0105
EP256:
EP257:
EP258:
EP259:
EP260:
EP261:
EP262:
DC
DC
DC
DC
DC
DC
DC
Z'123'
Z'+123'
Z'-123'
ZL4'456'
ZL1'789'
Z'1,-22,333,-4444'
ZL3'1,-22,333,-4444'
0111
0114
0117
011A
011E
011F
0129
EP263:
EP264:
EP265:
DC
DC
DC
3Z'0'
ZL3'0'
2Z'1,22,333'
0135
0138
013B
EP266:
DC
2ZL3'1,22,333'
0147
EP267:
EP268:
EP269:
EP270:
EP271:
EP272:
EP273:
SIMBZZ
SIMBAA
SIMBBB
SIMBCC
SIMBDD
SIMBEE
SIMBFF
DC
DC
DC
DC
DC
DC
DS
A(0)
A(127)
A(X'8000')
A(B'1111')
A(C'*')
A(*)
CL17
015C
0160
0164
0168
016C
0170
0174
EP274:
EP275:
EP276:
EP277:
EP278:
EP279:
EP280:
EP281:
EP282:
EP283:
SIMBGG
SIMBHH
SIMBII
SIMBJJ
SIMBKK
SIMBLL
SIMBMM
SIMBNN
SIMBOO
SIMBPP
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
A(*)
A(SIMBGG)
A(SIMBAA+12)
A(SIMBII-SIMBBB)
AL1(*-SIMBKK)
5AL1(*-SIMBLL)
AL2(3,5,7)
A(SIMBII+5*2)
A(SIMBNN+X'80000000')
4AL2(*-SIMBPP)
0185
0188
018C
0190
0194
0198
0199
019E
01A4
01A8
01AC
EP284: SIMBQQ DC
EP285: SIMBRR DC
A(SIMBVV)
A(SIMBKK,SIMBJJ)
01B4
01B8
EP286: SIMBSS DC
EP287: SIMBTT DC
A(SIMBTT+40)
A(SIMBUU,*,80)
01C0
01C4
EP288: SIMBUU DC
2A(*-SIMBUU)
01D0
EP289:
EP290:
EP291:
EP292:
EP293:
EP294:
EP295:
EP296:
EP297:
A(C'AMO')
A(X'7FFFFFFF')
Y(SIMBWW)
Y(10)
Y(L'YY2)
S(SIMBAA)
S(SS1)
S(10)
S(*)
SIMBVV
SIMBWW
YY1
YY2
YY3
SS1
SS2
SS3
SS4
EP298: SS5
DC
DC
DC
DC
DC
DC
DC
DC
DC
DC
01D8
01DC
01E0
01E2
01E4
01E6
01E8
01EA
01EC
01EE
A(125),F'33',C'*',2H'6,18' 01F0
1C.02.2D.33.3C.04.44.4D
00.1C.02.2D.33.3C.44.4D
0C.0C.0C
00.00.0C
1C.02.2C.33.3C.1C.02.2C.33.3C
00.1C.02.2C.33.3C
00.1C.02.2C.33.3C
F1.F2.C3
F1.F2.C3
F1.F2.D3
F0.F4.F5.C6
C9
F1.F2.D2.F3.F3.C3.F4.F4.F4.D4
F0.F0.C1.F0.F2.D2.F3.F3.C3
F4.F4.F4.D4
C0.C0.C0
F0.F0.F0
C1.F2.C2.F3.F3.C3
C1.F2.C2.F3.F3.C3
F0.F0.C1.F0.F2.C2.F3.F3.C3
F0.F0.C1.F0.F2.C2.F3.F3.C3
00.00.00.00
00.00.00.7F
00.00.80.00
00.00.00.0F
00.00.00.5C
00.00.01.70
??.??.??.??.??.??.??.??.??
??.??.??.??.??.??.??.??
00.00.00 (align)
00.00.01.88
00.00.01.88
00.00.01.6C
00.00.00.2C
00
00.01.02.03.04
00.03.00.05.00.07
00.00.01.9A
80.00.01.A4
00.00.00.02.00.04
00.06
00.00.01.D8
00.00.01.98
00.00.01.94
00.00.01.EC
00.00.01.D0
00.00.01.C8
00.00.00.50
00.00.00.00
00.00.00.04
00.C1.D4.D6
7F.FF.FF.FF
01.DC
00.0A
00.02
91.60
91.E6
00.0A
91.EC
00.00 (align)
00.00.00.7D
00.00.00.21
5C
00 (align)
00.06.00.12
235
235
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
EP299: SS6
DC
X'1,1',B'1,1',C'1,1'
EP300:
*
Endereço
LAST DC 256AL1(255+LAST-*) 0209
*
0219
*
0229
*
0239
*
0249
*
0259
*
0269
*
0279
*
0289
*
0299
*
02A9
*
02B9
*
02C9
*
02D9
*
02E9
*
02F9
00.06.00.12
0202 01.01.01.01
F1.6B.F1
Conteúdo
FF.FE.FD.FC.FB.FA.F9.F8.F7.F6.F5.F4.F3.F2.F1.F0
EF.EE.ED.EC.EB.EA.E9.E8.E7.E6.E5.E4.E3.E2.E1.E0
DF.DE.DD.DC.DB.DA.D9.D8.D7.D6.D5.D4.D3.D2.D1.D0
CF.CE.CD.CC.CB.CA.C9.C8.C7.C6.C5.C4.C3.C2.C1.C0
BF.BE.BD.BC.BB.BA.B9.B8.B7.B6.B5.B4.B3.B2.B1.B0
AF.AE.AD.AC.AB.AA.A9.A8.A7.A6.A5.A4.A3.A2.A1.A0
9F.9E.9D.9C.9B.9A.99.98.97.96.95.94.93.92.91.90
8F.8E.8D.8C.8B.8A.89.88.87.86.85.84.83.82.81.80
7F.7E.7D.7C.7B.7A.79.78.77.76.75.74.73.72.71.70
6F.6E.6D.6C.6B.6A.69.68.67.66.65.64.63.62.61.60
5F.5E.5D.5C.5B.5A.59.58.57.56.55.54.53.52.51.50
4F.4E.4D.4C.4B.4A.49.48.47.46.45.44.43.42.41.40
3F.3E.3D.3C.3B.3A.39.38.37.36.35.34.33.32.31.30
2F.2E.2D.2C.2B.2A.29.28.27.26.25.24.23.22.21.20
1F.1E.1D.1C.1B.1A.19.18.17.16.15.14.13.12.11.10
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=00000C00
R01=00000100
R05=00000500
R09=00000900
R13=00000D00
R02=00000200
R06=00000600
R10=00000A00
R14=00000E00
R03=00000300
R07=00000700
R11=00000B00
R15=00000F00
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
236
236
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
237
237
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’
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
238
238
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:
FULL
AREA
TAB
ST
UNPK
TR
MVI
12,FULL
AREA+10(9),FULL(5)
AREA+10(8),TAB
AREA+18,C' '
DS
DC
DC
ORG
DC
ORG
F
CL80' '
256X'00'
TAB+C'0'
C'0123456789ABCDEF'
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
239
239
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
VOLTA
ACHOU
FIM
ARG
RESULT
TABELA
XEGUEI
.
. ...montagem da TABELA e de ARG...
.
LA
6,=A(TABELA)+1000*8
LA
5,=A(TABELA)
CLC
0(5,5),ARG
BE
ACHOU
LA
5,8(5)
CR
5,6
BH
FIM
B
VOLTA
LA
5,5(5)
MVC
RESULT,0(3,5)
TCHAU
DC
CL5'0'
DC
CL3'0'
LTORG
LTORG
DS
1000CL8
END
PRG3
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
240
240
ER03 - Considerar em um programa os seguintes campos:
VINIC (VALOR INICIAL)
VINCR (INCREMENTO)
VMAX (VALOR MAXIMO)
Eles já estão inicializados com números compactados positivos.
Montar uma tabela de 5000 elementos, cada qual com 5 bytes, que deverão conter números compactados, a saber:
ELEMENTO1 = VINIC
ELEMENTO2 = VINIC + VINCR
ELEMENTO3 = VINIC + ELEMENTO2
.
.
.
ELEMENTOn = VINIC + ELEMENTO n-1
sendo n=5000, ou aquele que tiver valor igual ou menor mais próximo de VMAX.
Depois de montada a tabela, varre-la (somente os elementos preenchidos), acumulando os valores dos campos, do
último para o primeiro.
SOLUÇÃO:
PRG6
XEGUEI
.
. ...inicializacao dos campos...
.
L
6,=A(TABELA)
MVC
VATUAL,VINIC
VOLTO
C
6,=A(TABELA+5000*5)
BNL
FASE2
CP
VATUAL,VMAX
BH
FASE2
MVC
0(5,6),VATUAL+3
A
6,=F'5'
AP
VATUAL,VINCR
B
VOLTO
FASE2
S
6,=F'5'
C
6,=A(TABELA)
BL
FIM
AP
VTOT,0(5,6)
B
FASE2
FIM
TCHAU
*------------------------------ DEFINICAO DAS AREAS AUXILIARES
VTOT
DC
PL8'0'
VATUAL
DC
PL8'0'
VINIC
DC
PL8'0'
VINCR
DC
PL8'0'
VMAX
DC
PL8'0'
LTORG
LTORG
TABELA
DS
5000PL5
END
PRG6
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
241
241
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 ForInicial Final
(bytes) mato
Dado
1
51
71
121
201
221
Informação
Informação
Informação
Informação
Informação
Informação
50
70
120
200
220
256
50
20
50
80
20
36
C
C
C
C
C
C
ALFA
BETA
GAMA
DELTA
PI
OMEGA
Lay-out de AL
Posição Posição Tamanho ForInicial Final
(bytes) mato
Dado
1
21
71
107
157
177
Informação
Informação
Informação
Informação
Informação
Informação
20
70
106
156
176
256
20
50
36
50
20
80
C
C
C
C
C
C
PI
GAMA
OMEGA
ALFA
BETA
DELTA
SOLUÇÃO:
TR
AG,AL
*----------------------------------------------------------*
DEFINICAO DAS AREAS AL E AG
*
*----------------------------------------------------------AL
AG
AG1
AG2
AG3
AG4
AG5
AG6
DS
DS
DC
DC
DC
DC
DC
DC
CL256
0CL256
20AL1(*-AG1+200)
50AL1(*-AG2+70)
36AL1(*-AG3+220)
50AL1(*-AG4+0)
20AL1(*-AG5+50)
80AL1(*-AG6+120)
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
ER05
- Exemplo pgm assembler que le um arquivo e imprime um relatorio
Se o arquivo de entrada (80 posições, formato livre) tiver o seguinte conteúdo :
REGISTRO 1 ....................................................................*
REGISTRO 2 ...+....2....+....3....+....4....+....5....+....6....+....7....+....0
REGISTRO 3
!
I'M COMIN' HOME, I'VE DONE MY TIME
NOW I'VE GOT TO KNOW WHAT IS AND ISN'T MINE
IF YOU RECEIVED MY LETTER TELLING YOU I'D SOON BE FREE
THEN YOU'LL KNOW JUST WHAT TO DO
IF YOU STILL WANT ME
IF YOU STILL WANT ME
WHOA, TIE A YELLOW RIBBON 'ROUND THE OLD OAK TREE
IT'S BEEN THREE LONG YEARS
DO YA STILL WANT ME?
IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
I'LL STAY ON THE BUS
FORGET ABOUT US
PUT THE BLAME ON ME
IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
BUS DRIVER, PLEASE LOOK FOR ME
'CAUSE I COULDN'T BEAR TO SEE WHAT I MIGHT SEE
I'M REALLY STILL IN PRISON
AND MY LOVE, SHE HOLDS THE KEY
A SIMPLE YELLOW RIBBON'S WHAT I NEED TO SET ME FREE
I WROTE AND TOLD HER PLEASE
HOA, TIE A YELLOW RIBBON ROUND THE OLD OAK TREE
IT'S BEEN THREE LONG YEARS
DO YA STILL WANT ME?
IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
I'LL STAY ON THE BUS
FORGET ABOUT US
PUT THE BLAME ON ME
IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
NOW THE WHOLE DAMNED BUS IS CHEERIN'
AND I CAN'T BELIEVE I SEE
A HUNDRED YELLOW RIBBONS ROUND THE OLD OAK TREE
*** ULTIMO REGISTRO !!! ***
E o programa for o seguinte :
PGMASM
*
*
*
*
CSECT
PRINT DATA
USING *,3,4
STM
14,12,12(13)
LR
LA
LA
LA
ST
3,15
3,0(3)
4,1
4,4095(3,4)
13,MYSAVE+4
LA
ST
15,MYSAVE
15,8(13)
LR
EQU
OPEN
OPEN
LEDENOVO BAL
CLI
ABRIR
13,15
*
(ENTRA,INPUT)
(RELAT,OUTPUT)
14,LERENTRA
FIMENTRA,C'S'
ESTABELECE REGISTRADORES 3 E 4
COMO BASE
SALVA REGISTRADORES NA SAVEAREA
DO CHAMADOR (SIST OPERACIONAL)
SALVA ENDERECO PONTO DE CARGA
ZERA PRIM BYTE A ESQUERDA
CARREGA NRO 1
DEIXA O 4 COM 4096 A + QUE O 3
SALVA O 13 (ENDER SAVEAREA DO
CHAMADOR) NA SAVEAREA+4
CARREGA ENDER SAVEAREA DO PROG
SALVA END SAVEAREA DO PROG
NA SAVEAREA+8 DO CHAMADOR
ENDER SAVEAREA DO PROG NO 13
ABRE ARQUIVO ENTRADA
ABRE ARQUIVO RELATORIO
EXECUTA ROTINA LEITURA
VERIFICA SE EOF
242
242
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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
243
243
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
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 :
244
244
ASSEMBLER - PROF. ALBERTO ROMANO SCHIESARI
PAG.
1
REG.# --------------------*
CONTEUDO DO REG LIDO
*------------------------ -------------------------------------------------------------------------------00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
REGISTRO 1 ....................................................................*
REGISTRO 2 ...+....2....+....3....+....4....+....5....+....6....+....7....+....0
REGISTRO 3
!
I'M COMIN' HOME, I'VE DONE MY TIME
NOW I'VE GOT TO KNOW WHAT IS AND ISN'T MINE
IF YOU RECEIVED MY LETTER TELLING YOU I'D SOON BE FREE
THEN YOU'LL KNOW JUST WHAT TO DO
IF YOU STILL WANT ME
IF YOU STILL WANT ME
WHOA, TIE A YELLOW RIBBON 'ROUND THE OLD OAK TREE
IT'S BEEN THREE LONG YEARS
DO YA STILL WANT ME?
IF I DON'T SEE A RIBBON ROUND THE OLD OAK TREE
I'LL STAY ON THE BUS
FORGET ABOUT US
PUT THE BLAME ON ME
IF I DON'T SEE A YELLOW RIBBON ROUND THE OLD OAK TREE
BUS DRIVER, PLEASE LOOK FOR ME
'CAUSE I COULDN'T BEAR TO SEE WHAT I MIGHT SEE
I'M REALLY STILL IN PRISON
AND MY LOVE, SHE HOLDS THE KEY
PAG.
2
REG.# --------------------*
CONTEUDO DO REG LIDO
*------------------------ -------------------------------------------------------------------------------00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
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 !!! ***
245
245
Download

ASSEMBLER para Mainframes IBM