Пишу МиниОС на asm, не работает int 13h? Пишу Мини-Программу для запуска с биоса Все работает есть загрузчик, ядро Хотелось бы загрузить 6 сектор( дискеты ) уже из под ядра которое на дискете и пригнуть на код который загрузил вот тут то и проблема, читает делает прыжок зависаетorg 500h use16 push dx mov [n],dl mov ax,0000h mov es,ax mov bx,test1 mov ch,0 mov dh,0 mov cl,02h mov dl,80h mov al,01h mov ah,03h int 13h
jmp start e: ret endl: mov ah,14 xor bl,bl mov bx,nl call puts jmp e buff_out: mov ah,14 xor bl,bl mov bx,buff call puts jmp e del: mov [buff+si],al dec si mov ah,0x0E mov bh,0 mov al,8 int 10h mov ah,0x0E mov bh,0 mov al,0 int 10h mov ah,0x0E mov bh,0 mov al,8 int 10h jmp com2_1
start: mov ah,14 xor bl,bl mov bx,clr call puts mov ah,14 xor bl,bl mov bx,list call puts p0: mov ah,0 int 16h cmp al,'1' jz com1 cmp al,'2' jz com2 cmp al,'3' jz com3 cmp al,'4' jz com4 cmp al,'5' jz com5 cmp al,'6' jz com6 cmp al,'7' jz com7 cmp al,'8' jz com8 cmp al,'0' jz com0 jmp start ret ;; Data segment nl db 0Ah,0Dh,0 clr db 0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0Ah,0Dh,0 list db 0Ah,0Dh,'1) Clear Screen',0Ah,0Dh,'2) Text Editor',0Ah,0Dh,'3) HDD clr',0Ah,0Dh,'4) Delete OS',0Ah,0Dh,'5) Boot HDD',0Ah,0Dh,'6) Creators',0Ah,0Dh,'7) File List',0Ah,0Dh,'8) Reboot WinCleaner2017',0Ah,0Dh,0 creat db 0Ah,0Dh,'ASMcoder | NovaK',0Ah,0Dh,0 HD db 0Ah,0Dh,'HDD 30 sectors cleared',0Ah,0Dh,0 OSdel db 0Ah,0Dh,'OS was deleted',0Ah,0Dh,0 textE db 0Ah,0Dh,0Ah,0Dh,'1) Print',0Ah,0Dh,'2) Load',0Ah,0Dh,'3) Save',0Ah,0Dh,'4) View',0Ah,0Dh,'5) Clear',0Ah,0Dh,0 test1 db 'test',0 buff db 255 n db 0 Вот такое вот ядро, и отдельно код который не особо работает по моему ошибка мелочная но найти ее... Тоесть там код такое если нажал 1 то читать сектор 6 из дискеты, строго не судите код я так ассемблер учу ( ОС писанием ) Вот это не работает com7_2_1: mov al,'>' mov ah,0x0e int 10h pop dx call conv mov al,'>' mov ah,0x0e int 10h mov dl,[n] mov ax,0000h mov es,ax mov bx,700h mov ch,0 mov dh,0 mov al,01h mov ah,02h int 13h jmp 0000:0700h
Проблема в том, что после вызова int 13h вы используете инструкцию jmp 0000:0700h, но вам нужно сначала загрузить сектор с дискеты в память по адресу 700h, а потом делать переход на это место. Попробуйте изменить ваш код следующим образом:
com7_2_1: mov al,'>' mov ah,0x0e int 10h pop dx call conv mov al,'>' mov ah,0x0e int 10h mov dl,[n] mov ax,0000h mov es,ax mov bx,700h mov ch,0 mov dh,0 mov cl,06h mov al,01h mov ah,02h int 13h jmp 0000:700h
Также убедитесь, что данные успешно загружаются в память по адресу 700h перед вызовом jmp 0000:700h. Надеюсь, это поможет вам решить проблему. Если у вас остались вопросы, не стесняйтесь задавать.
Проблема в том, что после вызова int 13h вы используете инструкцию jmp 0000:0700h, но вам нужно сначала загрузить сектор с дискеты в память по адресу 700h, а потом делать переход на это место. Попробуйте изменить ваш код следующим образом:
com7_2_1:mov al,'>'
mov ah,0x0e
int 10h
pop dx
call conv
mov al,'>'
mov ah,0x0e
int 10h
mov dl,[n]
mov ax,0000h
mov es,ax
mov bx,700h
mov ch,0
mov dh,0
mov cl,06h
mov al,01h
mov ah,02h
int 13h
jmp 0000:700h
Также убедитесь, что данные успешно загружаются в память по адресу 700h перед вызовом jmp 0000:700h. Надеюсь, это поможет вам решить проблему. Если у вас остались вопросы, не стесняйтесь задавать.