Atividade 1 -    Programa que tira um "auto-retrato de si mesmo"

Importante: além do funcionamento correto, a qualidade da documentação e apresentação dos seus programas terão um peso grande na atribuição da nota.

Faça duas versões (1.1 e 1.2, abaixo) de um programa que exibe no vídeo as suas próprias instruções (mas não seus dados) no formato ascii-hexadecimal de acordo com as especificações abaixo. Verifique a correção do programa comparando a saída no vídeo com a do comando d do debug:

debug seuprograma.com

- d100 140

1.1 V. deve converter as instruções do programa para ascii-hexadecimal usando um vetor para armazenar o programa convertido. Dimensionar corretamente o vetor é uma dificuldade facilmente resolvida com ajuda do assembler: defina um rótulo, digamos, start antes da primeira instrução e outro, digamos, fim, imediatamente após a última instrução. O vetor pode então ser dimensionado pela diretiva:

prog:    resb 2*(fim-start)        ; cada byte do programa ocupará dois caracteres ascii !

V. precisará escrever uma pequena rotina para converter um inteiro de 4 bits em um caracter ascii-hexadecimal ('0'...'9', 'A'...'F').
Uma forma simples é usar esse inteiro como índice do vetor:

binascii: db    '0123456789ABCDEF'

Outra forma é observar que na sequencia de caracteres ASCII há 7 caracteres após o '9' (39h) e antes do 'A' (41h) e fazer as contas de acordo.

Para exibir o vetor convertido no vídeo use a função de saída de uma cadeia Ascii, do DOS, int 21h, ah=09.

Apresente uma impressão do programa montado (.lst)  no formato landscape para caber na página, junto com uma demonstração no laboratório. (Para ativar a criação dos arquivos .lst ative no nasmide sob Options >> assembler, Create listing file )

1.2 Nesta versão, o seu programa não pode usar nenhuma área de dados, enviando para a tela cada byte convertido, usando a função int 21h, ah=02,  do DOS, que exibe na tela um caracter ascii armazenado em dl.  V. deve usar, portanto,  o 2º método citado acima para converter um inteiro de 4 bits para ASCII.
Apresente uma impressão do programa montado (.lst)  no formato landscape para caber na página, junto com uma demonstração no laboratório.

1.3 Escreva um programa que calcula a soma parcial dos elementos de um vetor Fonte (contendo inteiros sem sinal de 16 bits), num vetor não inicializado Destino. O final do vetor Fonte é demarcado pelo valor 0ffffh; o mesmo deverá ocorrer com o vetor Destino.
Exemplo:

Fonte:   dw 12h, 38h, 15h, 98h, 42h, 68h 0ffffh
Destino: resw ($-Fonte)/2
No final da execução, Destino deverá conter os valores: 12h, 4Ah, 5Fh, F7h, 139h, 1A1h, FFFFh.
Inicialize o vetor Fonte com pares de dígitos extraídos dos RGs do seu grupo, considerados como valores hexadecimais. No exemplo acima, os RGs hipotéticos seriam: 123815 e 984268. V. não deve supor no seu programa que os vetores têm um tamanho conhecido. Use o Turbo Debugger ou o debug do DOS para demonstrar a correção do seu programa, pois o mesmo não precisa fazer nenhuma entrada ou saída.