Могу ли я угадать, что мой usb не работает, если мой загрузчик не работает?

Я нахожусь на Ubuntu, и я сделал простой загрузчик, который просто печатает символ.

Хорошо работает на qemu-system-i386

Это выглядит так:

start:
    mov ah, 0x0e
    mov al, '~'
    int 0x10
    jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa

И я строю с

fasm loader.asm img.bin

затем проверьте, доступен ли мой usb:

lsblk

после проверки, что мой USB доступен в /dev/sdc, я запустил

sudo dd if=img.bin of=/dev/sdc 
sync

И, наконец, проверьте, хорошо ли написал дд:

dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f

выше ndisasm печать:

00000000  B40E              mov ah,0xe
00000002  B07E              mov al,0x7e
00000004  CD10              int 0x10
00000006  EBFE              jmp short 0x6
00000008  0000              add [bx+si],al
0000000A  0000              add [bx+si],al
repeats 0000...
000001FE  55                push bp
000001FF  AA                stosb

Теперь я подключил этот usb к реальному ноутбуку с 32-битным процессором (Pentium M).

но он перезагружается снова и снова.

Итак, мой вопрос: могу ли я угадать мой USB сломан?

Я не знаю, связано ли это с моей проблемой, но... вот еще одна вещь: когда я запускаю, следуйте командам без вставленного USB,

dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f

выше ndisasm печать:

00000000  B40E              mov ah,0xe
00000002  B07E              mov al,0x7e
00000004  CD10              int 0x10
00000006  EBFE              jmp short 0x6
00000008  0000              add [bx+si],al
0000000A  0000              add [bx+si],al
repeats 0000...
000001FE  55                push bp
000001FF  AA                stosb

как будто я вставил карту памяти USB.

Вы дадите мне несколько советов?

Благодарю. (Я очень старался сформулировать четкий и полезный вопрос. Если это не так, пожалуйста, дайте мне знать.)

РЕДАКТИРОВАТЬ: я проверил с BPB. Исходный код выглядит следующим образом (добавлен nop):

jmp start
nop
bpbOEM          db "TEST    "
bpbBytesPerSector:      DW 512
bpbSectorsPerCluster:   DB 1
bpbReservedSectors:     DW 1
bpbNumberOfFATs:    DB 2
bpbRootEntries:     DW 224
bpbTotalSectors:    DW 2880
bpbMedia:           DB 0xF0
bpbSectorsPerFAT:   DW 9
bpbSectorsPerTrack:     DW 18
bpbHeadsPerCylinder:    DW 2
bpbHiddenSectors:   DD 0
bpbTotalSectorsBig:     DD 0
bsDriveNumber:          DB 0
bsUnused:           DB 0
bsExtBootSignature:     DB 0x00
bsSerialNumber:         DD 0x00000000
bsVolumeLabel:          DB "           "
bsFileSystem:           DB "        "
start:
    mov ah, 0x0e
    mov al, '~'
    int 0x10
    jmp $
times 510-($-$$) db 0
db 0x55
db 0xaa

Я побежал:

fasm loader.asm img.bin
lsblk
sudo dd if=img.bin of=/dev/sdc 
sync
dd if=/dev/sdc bs=512 count=1 > f
ndisasm -b 16 f

и это печатает:

00000000  EB3B              jmp short 0x3d
00000002  54                push sp
00000003  45                inc bp
00000004  53                push bx
00000005  54                push sp
00000006  2020              and [bx+si],ah
00000008  2020              and [bx+si],ah
0000000A  0002              add [bp+si],al
0000000C  0101              add [bx+di],ax
0000000E  0002              add [bp+si],al
00000010  E000              loopne 0x12
00000012  40                inc ax
00000013  0BF0              or si,ax
00000015  0900              or [bx+si],ax
00000017  1200              adc al,[bx+si]
00000019  0200              add al,[bx+si]
0000001B  0000              add [bx+si],al
0000001D  0000              add [bx+si],al
0000001F  0000              add [bx+si],al
00000021  0000              add [bx+si],al
00000023  0000              add [bx+si],al
00000025  0000              add [bx+si],al
00000027  0000              add [bx+si],al
00000029  0020              add [bx+si],ah
0000002B  2020              and [bx+si],ah
0000002D  2020              and [bx+si],ah
0000002F  2020              and [bx+si],ah
00000031  2020              and [bx+si],ah
00000033  2020              and [bx+si],ah
00000035  2020              and [bx+si],ah
00000037  2020              and [bx+si],ah
00000039  2020              and [bx+si],ah
0000003B  2020              and [bx+si],ah
0000003D  B40E              mov ah,0xe
0000003F  B07E              mov al,0x7e
00000041  CD10              int 0x10
00000043  EBFE              jmp short 0x43
repeats 0000...
000001FD  0055AA            add [di-0x56],dl

И результат был таким же. Реальная машина перезагружается снова и снова.

EDIT2: это загрузчик, который подает звуковой сигнал. Он работал на разных USB, один и тот же компьютер.

bits 16
org 0x7c00
jmp main
main:
    mov ax, 3
    int 0x10
    mov ah, 0x0e
    mov al, 'A'
    int 0x10
    mov al, 0xb6
    out 0x43, al
    mov al, 0xa9
    out 0x42, al
    mov al, 0x04
    out 0x42, al
    in al, 0x61
    mov ah, al
    or al, 011b
    test al, ah
    je done
    out 0x61, al
done:
    jmp $

    times 510-($-$$) db 0
    db 0x55
    db 0xaa
times 1474560 - ($-$$) db 0

0 ответов

Другие вопросы по тегам