В этой комбинации нет ничего волшебного или мистического. Разработчики нуждались в средствах, позволяющих определить, был ли первый сектор устройства загрузочным (загрузочная подпись), и эта комбинация, встречающаяся в последних двух байтах сектора, настолько невероятна, поэтому она была выбрана.
Аналогично, точка входа SMBIOS может быть найдена для сканирования BIOS для _SM_
подписи, которая должна быть на границе сегмента, как это;
Find_SMBIOS:
push ds
push bx ; Preserve essential
push si
; Establish DS:BX to point to base of BIOS code
mov ax, 0xf000
mov ds, ax ; Segment where table lives
xor bx, bx ; Initial pointer
mov eax, '_SM_' ; Scan buffer for this signature
; Loop has maximum of 4096 interations. As table is probably at top of buffer, cycling
; though it backwards saves time. In my test bed, BOCH's 2.6.5 BIOS-bochs-latest it was
; 1,451 interations.
.L0: sub bx, 16 ; Bump pointer to previous segment
jnz .J0
; Return NULL in AX and set CF. Either AX or flag can be tested on return.
mov ax, bx
stc
jmp .Done
; Did we find signature at this page
.J0: cmp [bx], eax
jnz .L0 ; NZ, keep looking
; Calculate checksum to verify position
mov cx, 15
mov ax, cx
mov si, bx ; DS:SI = Table entry point
; Compute checksum on next 15 bytes
.L1: lodsb
add ah, al
loop .L1
or ah, ah
jnz .L0 ; Invalid, try to find another occurence
; As entry point is page aligned, we can do this to determine segment.
shr bx, 4
mov ax, ds
add ax, bx
clc ; NC, found signature
.Done:
pop si
pop bx ; Restore essential
pop ds
ret
Эта подпись легко идентифицируется в шестнадцатеричном дампе и вписывается в 16-разрядный регистр. Когда эти два критерия ускоряют факторы, я не знаю, но опять же вероятность появления 0x5f4d535f на четной границе 16 байтов очень маловероятна.
Возможный дубликат [Почему 55 AA используется в качестве загрузочной подписи на компьютерах IBM?] (Http://stackoverflow.com/questions/11075003/why-55-aa-is-used-as-the-boot- signature-on-ibm-pcs) – Downvoter
На самом деле это 0xAA55 в качестве 16-битного слова, которое на маленькой конечной системе хранится в байтах 0x55 0xAA. –
Он также используется как возвращаемое значение множества модулей perl, найденных в CPAN, которые должны возвращать истинное значение. См. Http://returnvalues.userperl.at/values.html – Aaron