Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #57 da revista programar. Faz já o download aqui!

Copa_7

Duvidas em assembly

Mensagens Recomendadas

Copa_7    0
Copa_7

Boas... É assim, sabendo que CX = 2A02h e no data segment no endereço 246Bh = FFh por exemplo...

Sabem me explicar qual a diferença de MOV CX, 246Bh e MOV CX, [246Bh]... Alguem me consegue explicar qual a diferença destas instruções?

Cumps...

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
_deXter    0
_deXter

Se a minha memória não me atraiçoa e salvo algum pormenor que me pode escapar, ao utilizar os parêntesis rectos estás a "dizer" que o que queres colocar no registo CX é o conteúdo guardado no endereço 246Bh.

Por outro lado, se não utilizares parêntesis rectos, estás a colocar no registo CX o valor 246Bh que poderá muito bem ser um apontador para memória ou ser simplesmente um valor numérico.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
_deXter    0
_deXter

Visto que estás a trabalhar trabalhar com operandos de diferentes tamanhos, o primeiro não é válido sequer, o outro talvez seja aceite, não tenho a certeza.

De qualquer maneira, caso fosse MOV AX, [bX], estarias a copiar o conteúdo apontado por BX para AX. Ou seja, o BX estará a servir de apontador para um endereço de memória, e por isso utilizas os [ ] para ir buscar o seu conteúdo.

No segundo caso, estás a copiar o registo AL e a colocá-lo no conteúdo de um endereço de memória apontado por BX.

Se a memória não me falha, é isto. Atenção ao tamanho dos operandos. Regra geral devem ter o mesmo tamanho.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Triton    12
Triton

Sempre que fazes [qq_coisa] está a aceder ao conteúdo da memória apontado por qq_coisa.

Logo, se fazes mov [qq_coisa], 10, estás a meter o valor 10 na posição de memória apontada por qq_coisa.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Copa_7    0
Copa_7

Boas... Tou com outro problema... Agora é a experimentar memerio de video! Isto é so um programa teste e é para escrever 25*80 asteriscos no ecran todos com diferentes cores... o problema é que depois de o compilar, ao executar o codigo nao aparece nada no ecran, podem me ajudar? o codigo é o seguinte

.8086
.model small
.stack 2048
cseg segment para public 'code'
assume cs:cseg

Main proc
mov ax,0b800h
mov es,ax
mov al,0h
mov ah,'*'
mov bx,0
mov cx,25*80
ciclo: 
mov es:[bx],ah
mov es:[bx+1],al
inc bx
inc bx
inc al
loop ciclo

FIM:	
mov ah,4CH
INT 21H
Main endp
cseg ends
end Main

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita a nossa Política de Privacidade