jump to navigation

Instruções de um processador Fevereiro 20, 2009

Posted by daniellapa in microprocessadores.
trackback

A Execução de programas pode ser dividida em várias camadas que são:

  • High Level – é o codigo programado exemplo: C e C++;
  • Assembly – ser de intermediário entre o código e a linguagem máquina;
    • Exemplos de programas em c para codigo Assembly:
      • Exemplo 1:
      • Em c :
#include<stdio.h>
int main(){
	printf("Ola");
	return 0;
}
      • Através do comando cc -S nomedoficheiro.c e o código c e convertido para assembly;
      • Em Assembly:
	.file	"1.c"
	.section	.rodata
.LC0:
	.string	"Ola"
	.text
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	subl	$4, %esp
	movl	$.LC0, (%esp)
	call	printf
	movl	$0, %eax
	addl	$4, %esp
	popl	%ecx
	popl	%econvertbp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
      • Exemplo 2:
#include <stdio.h>
void main(){
	int i=0;
	while(i++<10)
		printf("Ola");
}
      • Em Assembly:
	.file	"2.c"
	.section	.rodata
.LC0:
	.string	"Ola"
	.text
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	subl	$20, %esp
	movl	$0, -8(%ebp)
	jmp	.L2
.L3:
	movl	$.LC0, (%esp)
	call	printf
.L2:
	cmpl	$9, -8(%ebp)
	setle	%al
	addl	$1, -8(%ebp)
	testb	%al, %al
	jne	.L3
	addl	$20, %esp
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
  • Exemplo 3:
#include<stdio.h>
void main(){
	int i=0, j;
	scanf("%d",&j);
	while(i++<j)
		if(i%2)
			printf("%d",i);
}
      • Em Assembly:
		.file	"3.c"
	.section	.rodata
.LC0:
	.string	"%d"
	.text
.globl main
	.type	main, @function
main:
	leal	4(%esp), %ecx
	andl	$-16, %esp
	pushl	-4(%ecx)
	pushl	%ebp
	movl	%esp, %ebp
	pushl	%ecx
	subl	$36, %esp
	movl	$0, -8(%ebp)
	leal	-12(%ebp), %eax
	movl	%eax, 4(%esp)
	movl	$.LC0, (%esp)
	call	scanf
	jmp	.L2
.L3:
	movl	-8(%ebp), %eax
	andl	$1, %eax
	testb	%al, %al
	je	.L2
	movl	-8(%ebp), %eax
	movl	%eax, 4(%esp)
	movl	$.LC0, (%esp)
	call	printf
.L2:
	movl	-12(%ebp), %eax
	cmpl	%eax, -8(%ebp)
	setl	%al
	addl	$1, -8(%ebp)
	testb	%al, %al
	jne	.L3
	addl	$36, %esp
	popl	%ecx
	popl	%ebp
	leal	-4(%ecx), %esp
	ret
	.size	main, .-main
  • Das linhas 23 a 43 corresponde á condição if , das linhas 23 a 30 é a condição se for verdadeira, das linhas 32 a 43 é a condição de for falsa.
  • Machine – é a linguagem em que o computador funciona;
  • Register Tranfer – executa instruções no CPU;
  • Gate -
  • Circuit -

A memória retem corrente para guardar o valor 1 e 0.

Existem varios tipos de registos entre os quais:

  • Contador do programa -
  • Registo de endereçamento da memória – serve como meio de comunicação entre o processador e o barramento.
  • Registos de dados – reserva-nos uma área de armazenamento temporário de todos os dados que passam do CPU para a memória.
  • Registos de instruções – guarda o código da operação da instrução no ciclo da máquina.
  • Palavra de estado do programa – guarda informação sobre o programa que esta a executar e esta encarregue também de tratar das interrupções.

A sequência de passos de execução de instruções num CPU são:

  • Instruções aritméticas e lógicas – esta encarregue de realizar as operações binárias num resultado único.
  • Instruções de movimento de dados – efectua uma cópia dos dados de umalocalização para a outra.
    • De um modo geral os dados podem mover-se de:
      • Registo a registo
      • Registo a memória.
      • Memória a registo.
      • Memória a memória.
  • Operações de dados em blocos
  • Instruções de controlo do programa
  • Instruções de Entrada – Saída

Comentários»

No comments yet — be the first.