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

jony17

Duvida Assembly

5 mensagens neste tópico

Boa noite!

Tenho amanha exame que vai ter 1 parte de assembly e tenho 2 duvidas que gostava que me audassem a esclarecer, sei que já 1 bocado em cima da hora mas só agora me lembrei (já desesperado) de vir aqui colocar a questão. :)

Aqui vao as duvidas que tive nos exercicios de outros teste:

1-O array lei tem 101 elementos do tipo “struct pt”. Escreva, em assembly Y86, o código que atribui os

valores 29 e 8 a lei[5].y e a lei[99].x, respectivamente, admitindo que lei começa no endereço de memória 0x1D.

struct pt {

int x;

int y;

} lei[101];

Ja procurei mas nao encontrei nada de como definir structs :S

2-O que é o activation record  ?

Muito obrigado

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

"O contexto de cada função, definido como o conjunto de dados e informação de controlo usado pela função, é armazenado na stack, numa estrutura designada por stack frame ou activation record."

in PDF das Teóricas. ;)

Quanto à pergunta 1, sabes que o array começa no endereço 0x1D e que cada elemento do array é uma struct de 2 inteiros. Se cada inteiro são 4 bytes, então cada elemento do array são 8 bytes. Então basta andares 0x1D+5*8 (endereço base + índice*factor de escala) para acederes a lei[5]. Depois, nessa posição, tens ainda de andar mais 4 bytes para aceder ao endereço do y e colocar lá o valor 29. O raciocínio é idêntico para o lei[99].x, apenas não tens de andar aqueles 4 bytes extra no fim porque o endereço calculado já te permite o acesso directo ao x. Tens alguns exemplos (em IA32) no pdf das variáveis estruturadas.

Tenho aqui também um exemplo +/- parecido:

"Inserir os valores 15 e 0 nos campos sv1.xx e sv1.yy, respectivamente. sv1 tem o endereço 9030"

irmovl 9030, %ebx
irmovl $15, %eax
irmovl $0, %ecx
rrmovl %eax, (%ebx)
rrmovl %ecx, 4(%ebx)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Gostava de saber porque ao colocar este código no http://flatassembler.net/ não funciona.

variable:
   .message   db   "Olá Mundo!$"
code:
   mov  ah,9
   mov  dx,offset .message
   int  0x21
   ret


no entanto este código funciona:


;fasm example of writing 16-bit COM program

org 100h; code starts at offset 100h
use16; use 16-bit code

display_text = 9

mov ah,display_text
mov dx,hello
int 21h

int 20h

hello db 'Hello world!',24h

:hmm:

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não conheço flat assembler, mas vê lá se não estás a tentar aceder a uma label local (as que começam com um .), fora de onde a definiste.

Neste caso o .message.

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