; helder.correia@fe.up.pt ; -------== Ex7 ==------- ; Suponha já existente a rotina Upcase que converte para maiúscula a letra ; minúscula cujo código ASCII está no acumulador, devolvendo o resultado ; da conversão também no acumulador. ; a) Escreva um programa que, recorrendo a essa rotina, converta para ; maiúsculas um texto em MDI com início apontado por R0 e cujo fim ; é indicado pelo código 0. cseg at 0 next: mov a,@r0 ; guarda no acc o valor do vector na posição v[i] acall Upcase ; transforma em maiuscula esse valor mov @r0,a ; actualiza o valor de v[i] para maiuscula inc r0 ; próxima posição no vector (v[i+1]) cjne @r0,#0,next ; equanto o valor nao for 0 continua (fim do texto) sjmp $ ; b) Escreva a rotina Upcase Upcase: subb a,#20h ; subtrai 20h do codigo ASCII (ver tabela ascii) ret end ; ====================================================================== ; Exemplo: transforma "assembly" em "ASSEMBLY" a começar no endereço 30h ; ====================================================================== ; alternativamente na linha de comandos do dScope: ; > e 30h=61h; e 31h=73h; e 32h=73h; e 33h=65h; e 34h=6Dh; e 35h=62h; e 36h=6Ch; e 37h=79h ; > e r0=30h ; ====================================================================== dseg at 30h char: ds 1 cseg at 0 mov char,#61h ; inicialização mov char+1,#73h ; da palavra mov char+2,#73h ; "assembly" mov char+3,#65h ; em código mov char+4,#6Dh ; hexadecimal mov char+5,#62h ; no vector mov char+6,#6Ch ; char mov char+7,#79h mov r0,#char ; inicializa R0 com o endereço de char[0] next: mov a,@r0 acall Upcase mov @r0,a inc r0 cjne @r0,#0,next sjmp $ Upcase: subb a,#20h ret end