Доп. дисковые функции. int 13h

Тема в разделе "WASM.ASSEMBLER", создана пользователем Booster, 21 дек 2008.

  1. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Приветствую всех.
    Использую функцию 42h, возвращается успех, но буфер не меняется. Тестирую в VmWare, расширенные функции поддерживаются. Компилятор tasm.

    Код (Text):
    1. _DAP STRUC
    2.     PACKET_SIZE DB ?
    3.     RESERVE1 DB 0
    4.     COUNT_BLOCKS DB ? ;MAX 7FH OR FF
    5.     RESERVE2 DB 0
    6.     BUF_DATA_ADDR DD ?
    7.     LBA_ADDR DQ ?
    8. _DAP ENDS
    9. ;-------------------------------------------------------
    10. DATA SEGMENT
    11.     DAP _DAP ?
    12.     BUF DB 512 DUP(?)
    13.     MESS_READ_ERROR DB "READ ERROR!", 10, 13, "$"
    14. DATA ENDS
    15. ;-------------------------------------------------------
    16. SSEG SEGMENT STACK
    17.   DB 100H DUP (?)
    18. SSEG ENDS
    19. ;-------------------------------------------------------
    20. CODE SEGMENT
    21.   ASSUME CS:CODE, DS:DATA, SS:SSEG
    22. START:
    23.   MOV AX, DATA
    24.   MOV DS, AX
    25.  
    26.   MOV [DAP.PACKET_SIZE], 16
    27.   MOV [DAP.RESERVE1], 0
    28.   MOV [DAP.RESERVE2], 0
    29.   MOV [DAP.COUNT_BLOCKS], 1
    30.   MOV WORD PTR [DAP.BUF_DATA_ADDR], DS
    31.   MOV WORD PTR [DAP.BUF_DATA_ADDR+2], OFFSET BUF
    32.   MOV WORD PTR [DAP.LBA_ADDR], 0
    33.   MOV WORD PTR [DAP.LBA_ADDR+2], 0
    34.   MOV WORD PTR [DAP.LBA_ADDR+4], 0
    35.   MOV WORD PTR [DAP.LBA_ADDR+6], 0
    36.  
    37.   MOV AH, 42H
    38.   MOV DL, 80H
    39.   MOV SI, OFFSET DAP
    40.   INT 13H
    41.   JNC READ_SUCCESS
    42.  
    43.   MOV AH, 9H
    44.   MOV DX, OFFSET MESS_READ_ERROR
    45.   INT 21H
    46.   JMP EXIT
    47.  
    48. READ_SUCCESS:
    49. EXIT:
    50.   MOV AX, 4C00H
    51.   INT 21H
    52.  
    53. CODE ENDS
    54. END START
     
  2. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Нашёл косяк. Адрес буфера надо задавать не сегмент:смещение, а смещение:сегмент.
     
  3. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Регистрация:
    30 июл 2005
    Сообщения:
    1.384
    Код (Text):
    1.   MOV WORD PTR [DAP.BUF_DATA_ADDR], DS
    2.   MOV WORD PTR [DAP.BUF_DATA_ADDR+2], OFFSET BUF
    Должно быть наоборот:
    Код (Text):
    1.   MOV WORD PTR [DAP.BUF_DATA_ADDR + 2], DS
    2.   MOV WORD PTR [DAP.BUF_DATA_ADDR], OFFSET BUF