Базонезависимая структура wsadata

Тема в разделе "WASM.BEGINNERS", создана пользователем JohnGalt, 22 дек 2010.

  1. JohnGalt

    JohnGalt New Member

    Публикаций:
    0
    Регистрация:
    22 дек 2010
    Сообщения:
    1
    Люди, подскажите пожалуйста как сделать структуру wsadata базонезависимой ?

    Да, и еще правильно ли объявил и заполнил структуру sockaddr_in

    call sock
    dw 0 ;family
    dw 0 ;port
    dd 0 ;adr
    db 8 dup(0)
    sock: pop ecx
    ;ЗАПОЛНЕНИЕ
    mov ecx,AF_INET
    invoke htons,6969
    add ecx,2
    mov ecx,eax ; порт в сетевом порядке байт
    invoke inet_addr, addr AdresIP
    add ecx,4
    mov ecx,eax ; помещаем в структуру айпи в нужном порядке байт

    Буду очень признателен за разъяснения .
     
  2. baldr

    baldr New Member

    Публикаций:
    0
    Регистрация:
    29 апр 2010
    Сообщения:
    327
    JohnGalt,

    Стóит изучить:
    * разницу между указателем и тем, на что оный указывает (ecx и [ecx], к примеру);
    * как правильно преобразовать low-endian (a.k.a. host формат данных для ix86) константы в big-endian (a.k.a. network формат);
    * отчего нет необходимости объявлять пустую константу и тут же её затирать нужным значением;
    * почему не всегда стоит совать 32 бита туда, где обычно 16 бит живут.

    Базонезависимость была достигнута с помощью call/pop, остались детали (типа выравнивания ;).