<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content=text/html;charset=iso-8859-1>
<META content="MSHTML 6.00.6000.16609" name=GENERATOR></HEAD>
<BODY id=MailContainerBody 
style="PADDING-RIGHT: 10px; PADDING-LEFT: 10px; PADDING-TOP: 15px" 
bgColor=#ffffff leftMargin=0 topMargin=0 CanvasTabStop="true" 
name="Compose message area">
<DIV><FONT size=2>Bonjour, je dois utiliser NASM pour créer mon bootsecteur de 
OS, et j'ai tenté de copier le code suivant:</FONT></DIV>
<DIV><FONT size=2>[BITS 16]<BR>[ORG 0]<BR>%define BOOT_SEG 7c0h<BR>%define 
BOOT_SIZE 512<BR>%define BOOT_STACK_SIZE 4000h<BR>%define BOOT_ADRESS 
7c00h<BR>%define BOOT_SEG 7c0h<BR>%define COPY_ADRESS 9f000h<BR>%define COPY_SEG 
9f00h<BR>%define LOAD_ADRESS 1000h<BR>%define LOAD_SEG 100h<BR>%define 
FINAL_ADDRESS 200000h<BR>%define MAX_KERN_LEN 9e000h<BR>%define CYLS 
80<BR>%define HEADS 1<BR>%define SECTS 18<BR>global 
_bsect<BR>_bsect:<BR>&nbsp;mov ax, BOOT_SEG<BR>&nbsp;mov ds, ax<BR>&nbsp;xor 
si,si<BR>&nbsp;xor di,di<BR>&nbsp;mov cx, (BOOT_SIZE&gt;&gt;1)<BR>&nbsp;mov ax, 
COPY_SEG<BR>&nbsp;mov es,ax<BR>&nbsp;cld<BR>&nbsp;rep movsw<BR>&nbsp;jmp 
COPY_SEG:here<BR>here:<BR>&nbsp;mov ds,ax<BR>&nbsp;mov ss,ax<BR>&nbsp;mov sp, 
(LOAD_ADRESS-10h)<BR>&nbsp;xor ah,ah<BR>&nbsp;mov al,3h<BR>&nbsp;int 
10h<BR>&nbsp;mov si, kld<BR>&nbsp;call message<BR>copykernel:<BR>&nbsp;xor 
dl,dl<BR>&nbsp;mov ax, LOAD_SEG<BR>&nbsp;mov es,ax<BR>&nbsp;xor 
bx,bx<BR>&nbsp;xor dx,dx<BR>&nbsp;mov cx,1<BR>.nextsector:<BR>&nbsp;inc 
cl<BR>&nbsp;cmp cl, SECTS<BR>&nbsp;jbe .sector<BR>&nbsp;mov cl,1<BR>&nbsp;inc 
dh<BR>&nbsp;cmp dh,1<BR>&nbsp;je .sector<BR>&nbsp;xor dh,dh<BR>&nbsp;inc 
ch<BR>.sector:<BR>&nbsp;push es<BR>&nbsp;mov ax,0201h<BR>&nbsp;int 
13h<BR>&nbsp;jc halt<BR>&nbsp;pop ax<BR>&nbsp;add ax,32<BR>&nbsp;mov 
es,ax<BR>&nbsp;mov ax,(0x0E*256+'.')<BR>&nbsp;int 10h<BR>&nbsp;dec word 
[ldsz]<BR>&nbsp;jnz .nextsector<BR>after:<BR>&nbsp;mov dx,03f2h<BR>&nbsp;in 
al,dx<BR>&nbsp;and al,0fh<BR>&nbsp;out 
dx,al<BR>&nbsp;cli<BR>fincopie:<BR>&nbsp;push cs<BR>&nbsp;pop ds<BR>&nbsp;call 
waitkb<BR>&nbsp;mov al,0d1h<BR>&nbsp;out 64h,al<BR>&nbsp;call 
waitkb<BR>&nbsp;mov al,0dfh<BR>&nbsp;out 60h, al<BR>&nbsp;mov 
si,kld2<BR>&nbsp;call message<BR>InitGDT:<BR>&nbsp;lgdt 
[ds:gdtr]<BR>GoPMode:<BR>&nbsp;mov eax,cr0<BR>&nbsp;or al,1<BR>&nbsp;mov 
cr0,eax<BR>&nbsp;mov ax,10h<BR>&nbsp;mov ds,ax<BR>&nbsp;mov es,ax<BR>&nbsp;mov 
fs,ax<BR>&nbsp;mov gs,ax<BR>[BITS 32]<BR>JumpToHere32:<BR>&nbsp;db 
66h<BR>&nbsp;jmp 8h: (COPY_ADRESS+Here32)<BR>halt:<BR>&nbsp;jmp 
$<BR>Here32:<BR>MoveKernelToFinalAddr:<BR>&nbsp;mov eax, 10h<BR>&nbsp;mov ds, 
eax<BR>&nbsp;mov es, eax<BR>&nbsp;cld<BR>&nbsp;mov esi, LOAD_ADRESS<BR>&nbsp;mov 
edi, FINAL_ADDRESS<BR>&nbsp;mov ecx, MAX_KERN_LEN<BR>&nbsp;shr ecx, 
2<BR>&nbsp;rep movsd<BR>LaunchKernel:<BR>&nbsp;mov ss,eax<BR>&nbsp;mov ebp, 
9e000h<BR>&nbsp;mov esi, FINAL_ADDRESS+200h<BR>&nbsp;mov esp, ebp <BR>&nbsp;jmp 
esi</FONT></DIV><FONT size=2>
<DIV><BR>;dummy utilities for 32bit<BR>;Halt method 1: Instant 
jump<BR>haltP:<BR>&nbsp;jmp $<BR>;Halt method 2: infine loop of 
HLT.<BR>haltS:<BR>&nbsp;hlt<BR>&nbsp;jmp haltS<BR>;Clears the screen in 
black<BR>cls:<BR>&nbsp;xor eax,eax<BR>&nbsp;mov edi, 0b8000h<BR>&nbsp;mov ecx, 
1000<BR>&nbsp;rep stosd<BR>&nbsp;ret<BR>;Write AL value in HEX on the screen, 
with a trailing space<BR>writemsg:<BR>&nbsp;mov ah, 30<BR>&nbsp;mov al, 
dl<BR>&nbsp;shr al,4<BR>&nbsp;call .subwrite<BR>&nbsp;mov al,dl<BR>&nbsp;and al, 
0Fh<BR>&nbsp;call .subwrite<BR>&nbsp;mov al, ' 
'<BR>&nbsp;stosw<BR>&nbsp;ret<BR>.subwrite<BR>&nbsp;cmp al,10<BR>&nbsp;jb 
.case2<BR>.case1:<BR>&nbsp;add al, 55<BR>&nbsp;jmp 
.after<BR>.case2:<BR>&nbsp;add al, 
48<BR>.after:<BR>&nbsp;stosw<BR>&nbsp;ret<BR>[BITS 
16]<BR>message:<BR>&nbsp;lodsb<BR>&nbsp;or al,al<BR>&nbsp;jz 
.endmsg<BR>&nbsp;mov ah,0eh<BR>&nbsp;mov bx,07h<BR>&nbsp;int 10h<BR>&nbsp;jmp 
message<BR>.endmsg<BR>&nbsp;ret<BR>waitkb:<BR>&nbsp;dw 0ebh<BR>&nbsp;dw 
0ebh<BR>&nbsp;in al,64h<BR>&nbsp;and al,02h<BR>&nbsp;jnz 
waitkb<BR>&nbsp;ret<BR>;PMODE switch &amp; GDT 
init.<BR>gdt:<BR>gdtr:<BR>NULL_desc:<BR>&nbsp;dw EndGDT-gdt-1<BR>&nbsp;dd 
gdt+COPY_ADRESS<BR>unused:<BR>&nbsp;dw 0<BR>CS_Desc:<BR>&nbsp;dw 0FFFFh, 
0<BR>&nbsp;db 0,9Bh, 0CFh, 0<BR>DS_Desc:<BR>&nbsp;dw 0FFFFh, 0<BR>&nbsp;db 0, 
93h, 0CFh, 0<BR>EndGDT:<BR>kld db "Loading...",0<BR>kld2 db "OK!",0<BR>khlt db 
"Halt!",0<BR>ldsz dw MAX_KERN_LEN&gt;&gt;9<BR>times 510-($-$$) db 0<BR>db 
0x55<BR>db 0xAA</DIV>
<DIV>&nbsp;</DIV>
<DIV>Je tente de faire un OS en utilisant Visual Studio, et cela semble vouloir 
fonctionner, sauf que je me bute à un problème car le linker VS ne reconnait pas 
le code 16 bit (d'où mon utilisation de NASM). Je génère un fichier binaire pur 
contenant à la chaîne le bootsecteur et un code en C qui efface l'ecran (une 
fonction assembleur comme cls dans le code ci dessus (fonctionnel)).</DIV>
<DIV>&nbsp;</DIV>
<DIV>D'après mes analyses, le&nbsp;passage en mode protégé semble fonctionner, 
le code 32 bit s'éxécute parfaitement et l'écran&nbsp;est&nbsp;effacé si 
j'appelle la fonction cls.&nbsp;</DIV>
<DIV>Par contre, la copie ne semble pas fonctionner. Le saut s'exécute .... puis 
rien ne se passe.</DIV>
<DIV>&nbsp;</DIV>
<DIV>Merci d,avance !</FONT></DIV></BODY></HTML>