Exercícios Resolvidos de Assembly: Registradores, Endereçamento e Lógica
Exercícios Resolvidos de Assembly: Registradores, Endereçamento e Lógica
1- Faça a simulação e informe os valores nos registradores e posições de memória utilizados no programa.
.MODEL SMALL
.STACK 100h
.CODE
START:
MOV AX, 084AH
MOV AH, 80H
MOV DX, AX
MOV BX, 0002H
MOV [BX], DX
MOV CX, 309FH
AND AX, CX
XCHG AX, CX
END START
Resposta:
Registrador AX = 084A ¨ 804A ¨ 000A ¨ 309F
Registrador BX = 0002
Registrador CX = 309F ¨ 000A
Registrador DX = 804A
Endereço DS:0002 = 804A
2- Dado o programa abaixo, comente a função de cada linha e o tipo de endereçamento utilizado.
.MODEL SMALL
.STACK 100h
.CODE
START:
MOV AX, 983AH
MOV AL, 05H
MOV CX, AX
MOV BX, 0001H
MOV AX, [BX]
MOV [BX], CX
MOV CX, [DS:0003h]
MOV CX, [BX+0009H]
MOV DX, [0010H+SI]
END START
Resposta:
.MODEL SMALL ;Diretiva assembly. Indica o modelo de memória.
.STACK 100h ;Diretiva assembly. Indica o espaço de memória para instruções
;do programa na pilha.
.CODE ;Diretiva assembly. Instruções do programa.
START: ;Etiqueta associada à posição de memória da instrução seguinte. Indica
;onde deve ser iniciada a execução do programa.
MOV AX, 983AH ;Endereçamento Imediato. Insere o valor 983Ah em AX.
MOV AL, 05H ;Endereçamento Imediato. Insere o valor 05H em AL.
MOV CX, AX ;Endereçamento por registro. Move o valor de AX para CX.
MOV BX, 0001H ;Endereçamento Imediato. Insere o valor 0001h em BX.
MOV AX, [BX] ;Endereçamento Indireto por Registro (DS:BX). Move o valor do endereço
;DS:0001h para AX.
MOV [BX], CX ;Endereçamento Indireto por Registro (DS:BX). Move o valor de CX para
;o endereço DS:0001h.
MOV CX, [DS:0003h] ;Endereçamento Direto. Move o valor do endereço DS:0003h para CX.
MOV CX, [BX+0009H] ;Endereçamento por Base. Move o valor do endereço DS:000Ah para CX.
MOV DX, [0010H+SI] ;Endereçamento Direto Indexado. Move o valor do endereço 00010h+SI
;para DX.
END START ;Diretiva assembly. Finaliza o código do programa e indica que o início do
;programa deve ser a etiqueta START.
3- Faça a simulação e informe os valores nos registradores e posições de memória utilizados no programa.
.MODEL SMALL
.STACK 100h
.CODE
START:
MOV BX, 0004H
MOV AX, 4059H
INC AX
DEC AH
INC AL
MOV [BX], AX
MOV CX, 0004H
XPTO: INC BX
LOOP XPTO
XCHG BX, CX
END START
Resposta:
Registrador AX = 4059 ¨ 405A ¨ 3F5A ¨ 3F5B
Registrador BX = 0004 ¨ 0005 ¨ 0006 ¨ 0007 ¨ 0008 ¨ 0000
Registrador CX = 0004 ¨ 0003 ¨ 0002 ¨ 0001 ¨ 0000 ¨ 0008
Endereço DS:0004 = 3F5B
3
4- Desenvolva um programa com as seguintes etapas:
a) Inserir o valor 0003h em AX.
b) Inserir o valor 0002h em BX.
c) Comparar AX com BX.
d) Utilize uma estrutura SE-ENTÃO-SENÃO em que, se AX for maior (acima) que BX, então se deve inserir o valor 3333h no registrador CX. Caso contrário, colocar o valor 4444h no registrador CX.
e) Inserir o valor 1234h em AX.
f) Fim do programa.
Resposta:
.MODEL SMALL
.STACK 100h
.CODE
START:
MOV AX, 0003H
MOV BX, 0002H
CMP AX, BX
JA ENTAO
JMP SENAO
ENTAO: MOV CX, 3333H
JMP FIM_SE
SENAO: MOV CX, 4444H
FIM_SE: MOV AX, 1234H
END START
5- Desenvolva um programa com as seguintes etapas:
a) Inserir o valor BC04h em DX.
b) Inserir o valor 0220h em CX.
c) Utilize uma estrutura FOR (PARA) que inicialize o registrador AX com o valor 0000h e incremente o valor de DX cinco vezes.
d) Efetuar lógica Ou-Exclusivo entre CX e DX.
e) Fim do programa.
Resposta:
.MODEL SMALL
.STACK 100h
.CODE
START:
MOV DX, 0BC04H
MOV CX, 0220H
MOV AX, 0000H
PARA: INC DX
INC AX
CMP AX, 0005H
JE FIM_PARA
JMP PARA
FIM_PARA: XOR CX, DX
END START
6- Desenvolva um programa que mostre na tela os 256 caracteres ASCII, utilizando uma estrutura FOR (PARA) com a instrução LOOP. Utilize a interrupção 21h com a função 02h para a exibição dos caracteres e a função 4Ch para finalizar o programa.
Resposta:
.MODEL SMALL
.STACK 100h
.CODE
main:
;inicializacao de alguns registradores
MOV AH, 2 ;funcao DOS para exibicao de caracter
MOV CX, 256 ;contador com o numero total de caracteres
MOV DL, 00h ;DL inicializado com o primeiro ASCII
;definicao de um processo repetitivo de 256 vezes
REPETE: INT 21h ;exibir caracter na tela
INC DL ;incrementa o caracter ASCII
LOOP REPETE ;continua exibindo enquanto CX nao for 0
;quando CX = 0, o programa quebra a sequencia do loop
;saida para o DOS
MOV AH,4Ch
INT 21h
END main
7- Dado o programa, explique o que as instruções indicadas fazem.
.MODEL SMALL
.STACK 100h
.CODE
INIT:
MOV AX, 6CA2H ;O que esta instrução faz?
TEST AX, 0009H ;O que esta instrução faz?
TEST AX, 000BH ;O que esta instrução faz?
END INIT
Resposta:
MOV AX, 6CA2H ;Move para AX o valor 6CA2H = 0110 1100 1010 0010B
TEST AX, 0009H ;Verifica os bits 0 e 3 de AX, pois 0009H = 0000 0000 0000 1001B
;Como resultado ZF = 1, pois todos os bits testados valem 0
TEST AX, 000BH ;Verifica os bits 0, 1 e 3 de AX, pois 000BH = 0000 0000 0000 1011B
;Como resultado ZF = 0, pois um ou mais dos bits testados valem 1
8- Faça a simulação e informe os valores nos registradores e posições de memória utilizados no programa.
.MODEL SMALL
.STACK 100h
.CODE
INIT:
MOV BX, 409AH
DEC BX
MOV [DS:0010H], BX
MOV CX, 9090H
XCHG BX, CX
NEG CX
ROL CX, 1
MOV AX,CX
ROR CX, 2
MOV [BX], CX
END INIT
Resposta:
MOV BX, 409AH ; BX = 409AH
DEC BX ; BX = 4099H
MOV [DS:0010H], BX ; DS:0010H = 4099H
MOV CX, 9090H ; CX = 9090H
XCHG BX, CX ; BX = 9090H ; CX = 4099H
NEG CX ; CX = 4099H = 0100 0000 1001 1001B
; Complemento de 2 = 1011 1111 0110 0111B. Logo CX = BF67H
ROL CX, 1 ; CX = BF67H = 1011 1111 0110 0111B
; Rodar a esquerda em 1 bit: 0111 1110 1100 1111B. Logo CX = 7ECFH
MOV AX, CX ; AX = 7ECFH
ROR CX, 2 ; CX = 7ECFH = 0111 1110 1100 1111B
; Rodar a direita em 2 bits: 1101 1111 1011 0011B. Logo CX = DFB3H
MOV [BX], CX ; DS:9090H = DFB3H
Registrador AX = 7ECF
Registrador BX = 409A ¨ 4099 ¨ 9090
Registrador CX = 9090 ¨ 4099 ¨ BF67 ¨ 7ECFH ¨ BF67 ¨ DFB3
Endereço DS:0010H = 4099
Endereço DS:9090H = DFB3