• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Copa_7

Duvidas em assembly

7 mensagens neste tópico

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...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ah pois é isso...

Entao e neste caso... MOV AL, [bX] e MOV [bX], AL?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao mas nao é o mesmo que fazer MOV AX, BX sem os parentesis rectos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

0

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