проблема с выводом cpuid

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

  1. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    в общем проблема не совсем в этом, асм начал изучать недавно.
    проблема с командой mov hel,ecx : invalid operand комплятор FASM


    Код (Text):
    1. org 100h;
    2. use16;
    3.  
    4.  
    5.  
    6. mov eax,1
    7. cpuid
    8.  
    9. mov hel,ecx
    10. mov dx,hel
    11. mov ah,9
    12. int 21h
    13.  mov ax,4C00h
    14. int 20h
    15. hel dd ?
     
  2. dron

    dron New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2009
    Сообщения:
    3
    org 100h;
    use16;



    mov eax,1
    cpuid

    mov [hel],ecx
    mov dx,[hel]
    mov ah,9
    int 21h
    mov ax,4C00h
    int 20h
    hel dd ?
     
  3. GoldFinch

    GoldFinch New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    1.775
    bor1k
    вы скобки забыли:
    mov [hel],ecx
     
  4. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    если можно , то пожалуйста объясните их смысл
     
  5. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    так mov dx,[hel] на размер жалуется, даже если строку сделать dw
     
  6. dron

    dron New Member

    Публикаций:
    0
    Регистрация:
    5 ноя 2009
    Сообщения:
    3
    org 100h;
    use16;



    mov eax,1
    cpuid

    mov [hel],ecx
    mov dx,word [hel]
    mov ah,9
    int 21h
    mov ax,4C00h
    int 20h
    hel dd ?
     
  7. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    Вы один раз обращаетесь к строке как в dword (ecx), а второй раз к word (dx). Кстати, я могу предположить, что в dx вам нужно смещение, а не значение. Так что надо делать mov dx, hel или lea dx, [hel]. Кстати, функция 9 прерывания выводит строку завершённую знаком $, а не как все нормальные функции 0, поэтому в конец строки следует поместить $ (mov byte[hel + 4], "$") иначе выведится ещё и мусор (до первого байта 0x24)
     
  8. bor1k

    bor1k Егор

    Публикаций:
    0
    Регистрация:
    10 мар 2010
    Сообщения:
    22
    спасибо большое,
    вот рабочий вариант

    Код (Text):
    1. org 100h;
    2. use16;
    3.  
    4.  
    5.  
    6. mov eax,0
    7. cpuid
    8. mov [hel],ecx
    9. lea dx, [hel]
    10. mov byte[hel + 4], "$"
    11. mov ah,9
    12. int 21h
    13. mov ax,4C00h
    14. int 21h
    15.  
    16. hel dd ?
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.792
    bor1k
    вместо mov ax,4C00h/int 21h можно поставить retn или int 20h они больше подходят для COM-файла
     
  10. KIV

    KIV Member

    Публикаций:
    0
    Регистрация:
    16 июл 2009
    Сообщения:
    231
    xor eax, eax
    Точки с запятой не нужны, если там у вас нет комментариев.