Ir ao conteúdo

Posts recomendados

Postado

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 1
  • Amei 1
Postado

@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 1

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades 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

×
×
  • Criar novo...

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!