I wonder the below code access BIOS interrupt 0x41 and loads the FDPT address (Address pointer: FDPT = Fixed Disk Parameter Table (1st hard drive)) in to SI register and transfer the 16 bytes in to address 0x90080.
Code: Select all
; Get hd0 parameter table info pointed at by BIOS int 0x41
mov ax,#0x0000
mov ds,ax
lds si,[4*0x41] ; set DS:[SI]
mov ax,#0x9000
mov es,ax
mov di,#0x0080 ; ES:[DI] = 0x90080
mov cx,#0x10 ; repeat 16 times
rep
movsb ; copy byte at DS:[SI] to ES:[DI] & update SI and DI.
First I have assumed as, it is a simple index calculation method, however the BIOS interrupts are start from 00h to 1Fh and 41h, 46h, 4Ah, etc., so the list is not in constant incremental order, so I got confused.
Dear experts please clarify me,
1) how it is working ([4 * 0x41])?
2) In this case, is it possible to access all BIOS interrupts in the same manner without calling "INT" instruction?