Copa_7 Posted August 26, 2009 at 04:46 PM Report #284639 Posted August 26, 2009 at 04:46 PM 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...
_deXter Posted August 26, 2009 at 09:37 PM Report #284671 Posted August 26, 2009 at 09:37 PM 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.
Copa_7 Posted August 26, 2009 at 10:54 PM Author Report #284683 Posted August 26, 2009 at 10:54 PM Ah pois é isso... Entao e neste caso... MOV AL, [bX] e MOV [bX], AL?
_deXter Posted August 26, 2009 at 11:11 PM Report #284684 Posted August 26, 2009 at 11:11 PM 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.
Copa_7 Posted August 27, 2009 at 12:30 AM Author Report #284689 Posted August 27, 2009 at 12:30 AM Entao mas nao é o mesmo que fazer MOV AX, BX sem os parentesis rectos?
Triton Posted August 27, 2009 at 03:32 AM Report #284701 Posted August 27, 2009 at 03:32 AM 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. <3 life
Copa_7 Posted September 3, 2009 at 07:04 PM Author Report #285558 Posted September 3, 2009 at 07:04 PM 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
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now