Память

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

  1. Linkey

    Linkey Александр

    Публикаций:
    0
    Как сделать чтобы в стек или регистр копировался не адрес памяти, а число которое там храниться? И пример если можно.
    Допустим у меня есть
    mes db "5"
    Как записать в EAX число 5
    mov eax,mes Не работает
    а
    mov eax, offset mes Кидает адрес
    а
    Мне нужно значение СПС)))
     
  2. InsidE

    InsidE Member

    Публикаций:
    0
    мда,....а вы не подумали что "5" это не 5?
     
  3. cornolio

    cornolio New Member

    Публикаций:
    0
    у тебя переменная mes рамером в 8 бит, а регистр еах 32 бита потому и не работает
    задай так mes dd 5
    и пиши mov eax,mes
     
  4. treekool

    treekool Member

    Публикаций:
    0
    mov eax, [mes]
    попробуй так.
    или
    mov eax,offset [mes]
     
  5. treekool

    treekool Member

    Публикаций:
    0
    вообще посматри сюда http://www.wasm.ru/article.php?article=1022001#p1_12
     
  6. defaultplayer

    defaultplayer New Member

    Публикаций:
    0
    все верно, только лучше тогда вот так

    Код (Text):
    1. .data
    2.  
    3. mes db 5
    4.  
    5. .code
    6.  
    7. movzx eax, mes
     
  7. max7C4

    max7C4 New Member

    Публикаций:
    0
    1. ASCII код символа 5 = 35h, чтобы получить 5 вычти 30h
    2. если процессор позволяет, то movzx eax, mes (TASM,MASM) или movzx eax, [mes] (FASM).
    если процессор не позволяет, то xor eax, eax/mov al, mes (или [mes], для FASM)
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    movzx eax,byte ptr cs:[mes]
    Неужели так трудно логически подумать..
     
  9. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    этот вариант очевидно бред - почувствуйте разницу между смещением и значением
     
  10. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    какое логическое соображение указало на сегментный регистр CS ???
    почему не
    movzx eax,byte ptr ds:[mes]
    или
    movzx eax,byte ptr es:[mes]
    или
    movzx eax,byte ptr [mes]
     
  11. Twister

    Twister New Member

    Публикаций:
    0
    Отпад. Ты забыл FS еще :)
     
  12. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    намекаешь на флат модель ??? где cs=ds=es=ss
     
  13. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    Twister
    все равно предпочтение cs ничем не аргументированно
    чтение запись с префиксом cs: вызывает мысль , что
     
  14. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    я бы выбрал вариант без префикса вообще - так короче
     
  15. Twister

    Twister New Member

    Публикаций:
    0
    Да, во Flat-модели эти дескрипторы сегментов указывают на один
    и тот же сегмент памяти.
    Но я бы, на месте ТС и Clerk'a, в данном случае, вообще бы не заморачивался с сегментными регистрами и написал бы просто
    Код (Text):
    1. movzx eax,byte ptr [mes]
    ADD: Долго было открыто окно ответа - отвлекли. Пока написал ответ, ты уже тоже тут настрочил :)
     
  16. Linkey

    Linkey Александр

    Публикаций:
    0
    Спасибо! Я просто думал что при записи числа в EAX не имеет значение db or dd.
    И еще что "5" != 5 тоже знаю просто загнался маласть.
     
  17. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Код (Text):
    1. movzx eax,byte ptr es:ds:cs:[mes]
    :)
     
  18. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Код (Text):
    1. movzx eax,byte ptr es:es:es:es:es:es:es:ds:ds:ds:ds:ds:ds:ds:cs:cs:cs:cs:cs:cs:cs:[mes]
    даже так работает
     
  19. Rockphorr

    Rockphorr Well-Known Member

    Публикаций:
    0
    однако ты сторонник фасма в масме скобы не нужны
    имхо это недостаток фасма необходимость скоб - стирается смысловая разница - этот топик тому пример
     
  20. InsidE

    InsidE Member

    Публикаций:
    0
    бггг