Приветствую всех. Использую функцию 42h, возвращается успех, но буфер не меняется. Тестирую в VmWare, расширенные функции поддерживаются. Компилятор tasm. Код (Text): _DAP STRUC PACKET_SIZE DB ? RESERVE1 DB 0 COUNT_BLOCKS DB ? ;MAX 7FH OR FF RESERVE2 DB 0 BUF_DATA_ADDR DD ? LBA_ADDR DQ ? _DAP ENDS ;------------------------------------------------------- DATA SEGMENT DAP _DAP ? BUF DB 512 DUP(?) MESS_READ_ERROR DB "READ ERROR!", 10, 13, "$" DATA ENDS ;------------------------------------------------------- SSEG SEGMENT STACK DB 100H DUP (?) SSEG ENDS ;------------------------------------------------------- CODE SEGMENT ASSUME CS:CODE, DS:DATA, SS:SSEG START: MOV AX, DATA MOV DS, AX MOV [DAP.PACKET_SIZE], 16 MOV [DAP.RESERVE1], 0 MOV [DAP.RESERVE2], 0 MOV [DAP.COUNT_BLOCKS], 1 MOV WORD PTR [DAP.BUF_DATA_ADDR], DS MOV WORD PTR [DAP.BUF_DATA_ADDR+2], OFFSET BUF MOV WORD PTR [DAP.LBA_ADDR], 0 MOV WORD PTR [DAP.LBA_ADDR+2], 0 MOV WORD PTR [DAP.LBA_ADDR+4], 0 MOV WORD PTR [DAP.LBA_ADDR+6], 0 MOV AH, 42H MOV DL, 80H MOV SI, OFFSET DAP INT 13H JNC READ_SUCCESS MOV AH, 9H MOV DX, OFFSET MESS_READ_ERROR INT 21H JMP EXIT READ_SUCCESS: EXIT: MOV AX, 4C00H INT 21H CODE ENDS END START
Код (Text): MOV WORD PTR [DAP.BUF_DATA_ADDR], DS MOV WORD PTR [DAP.BUF_DATA_ADDR+2], OFFSET BUF Должно быть наоборот: Код (Text): MOV WORD PTR [DAP.BUF_DATA_ADDR + 2], DS MOV WORD PTR [DAP.BUF_DATA_ADDR], OFFSET BUF