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

Discussion in 'WASM.BEGINNERS' started by bor1k, Sep 6, 2010.

  1. bor1k

    bor1k Егор

    Blog Posts:
    0
    Joined:
    Mar 10, 2010
    Messages:
    22
    в общем проблема не совсем в этом, асм начал изучать недавно.
    проблема с командой mov hel,ecx : invalid operand комплятор FASM


    Code (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

    Blog Posts:
    0
    Joined:
    Nov 5, 2009
    Messages:
    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

    Blog Posts:
    0
    Joined:
    Mar 29, 2008
    Messages:
    1,775
    bor1k
    вы скобки забыли:
    mov [hel],ecx
     
  4. bor1k

    bor1k Егор

    Blog Posts:
    0
    Joined:
    Mar 10, 2010
    Messages:
    22
    если можно , то пожалуйста объясните их смысл
     
  5. bor1k

    bor1k Егор

    Blog Posts:
    0
    Joined:
    Mar 10, 2010
    Messages:
    22
    так mov dx,[hel] на размер жалуется, даже если строку сделать dw
     
  6. dron

    dron New Member

    Blog Posts:
    0
    Joined:
    Nov 5, 2009
    Messages:
    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

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

    bor1k Егор

    Blog Posts:
    0
    Joined:
    Mar 10, 2010
    Messages:
    22
    спасибо большое,
    вот рабочий вариант

    Code (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___ Супермодератор Staff Member

    Blog Posts:
    14
    Joined:
    Jun 25, 2008
    Messages:
    3,914
    bor1k
    вместо mov ax,4C00h/int 21h можно поставить retn или int 20h они больше подходят для COM-файла
     
  10. KIV

    KIV Member

    Blog Posts:
    0
    Joined:
    Jul 16, 2009
    Messages:
    231
    xor eax, eax
    Точки с запятой не нужны, если там у вас нет комментариев.