Ir ao conteúdo
  • Cadastre-se
Guilherme Quinquinel

C++ Sistema operacional em C++

Recommended Posts

Boa tarde pessoal!

 

Eu estou com um projeto meio enrolado, e preciso de ajuda. Estou montando um SO e já estou com um boot em Assembly pronto. Mas agora quero terminar o resto em C++. Ele irá ser algo simples, como uma linha de comando, e pretendo usar o C++ para monta-lo, eu estou testando em máquinas virtuais mas já tenho uma maquina e um CD para testa-lo em ISO.

 

O que tenho é somente o Boot em Assembly escrito.

 

[ORG 0x7C00]

	mov 	ah,2	;Le disco que originou boot
	mov 	al,1	;Total de setores lidos
	mov 	ch,0	;Numero de cilindros
	mov 	cl,2	;Numero setor Inicial
	mov 	dh,1	;Numero da cabeça a ser lida
	mov		es,[Print]
	mov		bx,0
	int		13h
	jmp		Print
	
	IniStr	db "SO 1.1",13,10,0
	
times 510 - ($-$$) db 0
db 0x55
db 0xAA

Print:
	xor ax,ax	;Zera o acumulador
	mov ds,ax
	mov si,IniStr
	
CHAR_LOOP: lodsb
	or al,al	;Checa dif 0
	jz WAI
	
	mov ah,0x0E
	int 0x10
	jmp CHAR_LOOP
	
WAI:
jmp WAI

Ele fica em LOOP com a mensagem na tela "SO 1.1".

 

Como faço para dar continuidade no SO mas em C++. Como seria os parâmetros para habilitar somente o teclado (pois será só linha de comando, sem gráficos)?

 

Esse Assembly esta em .bin e usei o UltraISO para criar um disco de inicialização, creio que agora devo acrescentar o C++ dentro do ISO.

 

Se alguém puder me mandar o código fonte em C++ mais o formato .bin . Eu  serei grato! Obrigado pela atenção!

  • Curtir 2
  • Amei 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Guilherme Quinquinel @Guilherme Quinquinel     qual compilador você está usando ?    testei aqui no codeblocks mas não funcionou , nem compilou ,       estou querendo aprender assembly mas tenho pouco conhecimento pois ainda estou estudando lógica de programação aqui no senac  .  tenho esse código em assembly que funciona no codeblocks e ele serve para somar e multiplicar dois números e imprimir o resultado  :

#include <iostream>
int main(){
    //    Em C, seria:
    //    bar = foo * 2 + foo;
    int bar,foo=25;
    asm volatile (
                  "movl $2   , %%eax ;"  // registrador eax = 2
                  "movl $25  , %%ebx ;"  /* registrador ebx = 25 */
                  "imul %%ebx, %%eax ;"  /* eax * ebx */
                  "addl %%ebx, %%eax ;"  // eax + ebx/*para multiplicar use -> imul */
                  "movl %%eax, %0    ;"  // faz bar igual ao resultado.
                  :"=q" (bar)            // variáveis de saída
                  :"c"  (foo)            // variáveis de entrada (ebx = foo)
                  );
    printf("bar= %d   foo= %d\n\n",bar,foo);
}

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×