Опытный веб программист сунул нос в АСМ и вот что получилось =)

Тема в разделе "WASM.BEGINNERS", создана пользователем tolst, 27 янв 2007.

  1. tolst

    tolst Дмитрий

    Публикаций:
    0
    не могу разобраться с простейшей программой складывающей числа 5 и 10:

    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4.  
    5. .DATA
    6.      MATH_RESULT DB ?
    7.  
    8. .CODE
    9.  
    10.      START:
    11.           MOV EBX, 5
    12.           MOV ECX, 10
    13.           ADD EBX, ECX
    14.           MOV MATH_RESULT, EBX
    15.      END START
    где здесь ошибка?
    Как понял переменная MATH_RESULT не видна, поэтому MOV в неё не может быть выполнено.
    Если так, то как же тогда обьявить эту переменную?
     
  2. Mika0x65

    Mika0x65 New Member

    Публикаций:
    0
    Видимо, объявить ее не DB (byte), а DD (dword).
     
  3. tolst

    tolst Дмитрий

    Публикаций:
    0
    ага, прокатило
    спасибки =)
    это далеко не последний мой вопрос =))
     
  4. RamMerLabs

    RamMerLabs Well-Known Member

    Публикаций:
    0
    MATH_RESULT видна, просто ты объявил её как BYTE, а ebx - 32-битный регистр, но не 8-битный. Если надо 8-битный, юзай bl - младшие 8 бит, bh - старшие 8 бит (ну и для других регистров соответственно)
     
  5. tolst

    tolst Дмитрий

    Публикаций:
    0
    Понятно... теперь такой вопрос:
    как мне все это вывести на экран? либо доса либо винды... дайте пожалуеста пример на основе изложенного мною кода:
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. option casemap :none
    4.  
    5. .DATA
    6.     SUM_RESULT DD ?
    7.  
    8.  
    9.  
    10. .CODE
    11.  
    12.     START:
    13.         MOV EBX, 5
    14.         MOV ECX, 10
    15.         ADD EBX, ECX
    16.         MOV SUM_RESULT, EBX
    17.     END START
     
  6. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Самое простое - воспользоваться стандартными функция конвертирования из библоитеки masm32:

    Код (Text):
    1. .686
    2. .MODEL FLAT,STDCALL
    3. option casemap:none
    4.  
    5.     include windows.inc
    6.     include user32.inc
    7.     include kernel32.inc
    8.     include masm32.inc
    9.    
    10.     includelib user32.lib
    11.     includelib kernel32.lib
    12.     includelib masm32.lib
    13.  
    14. .data?
    15.     SUM_RESULT DD ?
    16.     SUM_BUFFER DB 10 dup(?)
    17. .data
    18.     lpCaption DB "Result:",0
    19. .code
    20. start:
    21.     MOV EBX, 5
    22.     MOV ECX, 10
    23.     ADD EBX, ECX
    24.     MOV SUM_RESULT, EBX
    25.    
    26.     invoke dwtoa, SUM_RESULT, offset SUM_BUFFER
    27.    
    28.     invoke MessageBox, 0, offset SUM_BUFFER, offset lpCaption, MB_OK+MB_ICONINFORMATION
    29.     invoke ExitProcess, 0
    30. end start
     
  7. PaCHER

    PaCHER New Member

    Публикаций:
    0
    ПОИСКОМ ПОЛЬЗОВАЛСЯ? В разделе про вопросы о лабах, даже доки есть, скачай и юзай. Там не только текст на экран а все что угодно.

    Все это это что? код программы?
     
  8. tolst

    tolst Дмитрий

    Публикаций:
    0
    W4FhLF
    Пасибища, я вкурил смысл.
     
  9. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Только лучше не пользоваться кривыми масмовскими обёртками, а вызывать wsprintf самому ;)
    Код (Text):
    1. .686
    2. .MODEL FLAT,STDCALL
    3. option casemap:none
    4.  
    5.     include windows.inc
    6.     include user32.inc
    7.     include kernel32.inc
    8.    
    9.     includelib user32.lib
    10.     includelib kernel32.lib
    11.  
    12. .data?
    13.     SUM_RESULT DD ?
    14.     TXT_BUFFER DB 100 dup(?)
    15. .data
    16.     lpCaption DB "Складываем :)",0
    17.     lpFmt  DB "Вычисляем: %d + %d = %d   Ура получилось! ", 0
    18. .code
    19. start:
    20.     MOV EBX, 5
    21.     MOV EDX, EBX    ; на память
    22.     MOV ECX, 10
    23.     ADD EBX, ECX
    24.     MOV SUM_RESULT, EBX
    25.    
    26.     invoke wsprintf, addr TXT_BUFFER, addr lpFmt, EDX, ECX, [SUM_RESULT]
    27.    
    28.     invoke MessageBox, 0, offset TXT_BUFFER, offset lpCaption, MB_OK+MB_ICONINFORMATION
    29.     invoke ExitProcess, 0
    30. end start