Вопрос о структурах (STRUC)

Тема в разделе "WASM.ASSEMBLER", создана пользователем RAJ, 20 фев 2005.

  1. RAJ

    RAJ New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2005
    Сообщения:
    4
    Есть файл с данными data.dat
    Код (Text):
    1. <'Vopros1',"Skolko budet dva plus dva",'tri','piat','cetyre','3'>


    Код программы asem.asm
    Код (Text):
    1.  
    2.     FileName DB 'C:/4023_3/TASM4/data.dat',0h
    3.     Buffer   DB 41h DUP(0),'$'
    4.  
    5.         mov dx, OFFSET FileName ; имя файла
    6.     CALL OpenFileRead  
    7.     mov bx,ax       ; дескриптор файла в ВХ
    8.     mov ah,3fh      ; функция чтения файла
    9.     mov cx,41h      ; сколько читать
    10.     mov dx,OFFSET Buffer    ; буфер
    11.     int 21h         ; выполнить
    12.  
    13. vopros struc
    14. voprosnomer db  8 dup(" ")
    15. voprosy     db  30 dup(" ")
    16. otvet1      db  10 dup(" ")
    17. otvet2      db  10 dup(" ")
    18. otvet3      db  10 dup(" ")
    19. protvet     db  1 dup(" ")
    20. vopros ends
    21.  
    22. [u]stroka1 vopros [b]buffer[/b][/u]
    23.  
    24.  




    так вот вопрос, как обратиться к структуре чтоб, данные с файла привязаны были к stroka1 vopros buffer - это неправельный вариант.
     
  2. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Либо так:



    vopros struc

    voprosnomer db 8 dup(" ")

    ...

    protvet db 1 dup(" ")

    vopros ends



    buffer vopros <>



    mov al,byte ptr buffer.protvet



    Либо так:



    mov si,offset buffer

    mov al,[si].protvet
     
  3. RAJ

    RAJ New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2005
    Сообщения:
    4
    buffer vopros <>



    У меня buffer - это <'Vopros1',"Skolko budet dva plus dva",'tri','piat','cetyre','3'> следобательно buffer должен стоять слева от vopros ! или я не прав!
     
  4. RAJ

    RAJ New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2005
    Сообщения:
    4
    И еще идентификатор buffer уже объявлен с другим типом, так что buffer vopros <> тоже не подходит, как описать не знаю :/
     
  5. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Ну так объяви его с типом "vopros", а перед чтением файла просто укажи в DX его смещение.
     
  6. RAJ

    RAJ New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2005
    Сообщения:
    4
    _Chingachguk_

    Не мог бы показать на примере(если не в тяготу), а то теорию я так её не люблю :)
     
  7. Chingachguk

    Chingachguk New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2002
    Сообщения:
    340
    Код (Text):
    1. .286
    2. vopros struc
    3.   voprosnomer db 8 dup(?)
    4.   voprosy     db 30 dup(?)
    5.   otvet1      db 10 dup(?)
    6.   otvet2      db 10 dup(?)
    7.   otvet3      db 10 dup(?)
    8.   protvet     db 1 dup(?)
    9. vopros ends
    10.  
    11. text segment byte public
    12.   assume cs:text,ds:text
    13.   org   100h
    14. begin:
    15.  
    16. ; Read filename from CMD
    17.   mov  ax,3D02h
    18.   xor  cx,cx
    19.   mov  bl,ds:[80h]
    20.   xor  bh,bh
    21.   mov  byte ptr ds:[bx+81h],0
    22.   mov  dx,82h
    23.   int  21h
    24.   jnc  @@FileOpened
    25.   mov  ah,09h
    26.   mov  dx,offset MsgFileNotOpened
    27.   int  21h
    28.   ret
    29. MsgFileNotOpened db 'File not opened !',0Dh,0Ah,'/code]
    30.  
    31. @@FileOpened:
    32.  
    33.   mov  bx,ax
    34.   mov  ah,3Fh
    35.   mov  cx,size vopros
    36.   mov  dx,offset myvopros
    37.   int  21h
    38.   cmp  ax,cx
    39.   jz   @@FileReaded
    40.   mov  ah,09h
    41.   mov  dx,offset MsgFileNotRead
    42.   int  21h
    43.   ret
    44. MsgFileNotRead db 'File not read !',0Dh,0Ah,'/code]
    45.  
    46. @@FileReaded:
    47.  
    48. ; Display vopros.voprosy
    49.  
    50.   mov  ah,09h
    51.   mov  dx,offset myvopros.voprosy
    52.   push word ptr myvopros.voprosy[size voprosy]
    53.   mov  byte ptr myvopros.voprosy[(size voprosy)-1],'/code]
    54.   int  21h
    55.   pop word ptr myvopros.voprosy[size voprosy]
    56.  
    57.   ret
    58.  
    59. myvopros vopros <>
    60.  
    61. Text Ends
    62.     end begin