Пересылка данных

Тема в разделе "WASM.BEGINNERS", создана пользователем krok, 18 фев 2007.

  1. krok

    krok New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2007
    Сообщения:
    1
    ==============================================
    strings TCHAR '12345678',0
    buffertxt rb 512
    Leng dd 8

    section '.code' code readable executable

    start:
    mov esi,strings
    mov edi,buffertxt
    mov ecx,Leng
    shr ecx,2
    rep movsd
    invoke MessageBox,0,buffertxt,buffertxt,MB_OK
    invoke ExitProcess,0
    ==============================================
    при пересылки в буффер(buffertxt) текстовой строки (strings) пересылаеться только половина текста "1234",почему ведь команда movsd должна пересылать двойное слово? и
    вся строка должна быть в буффере?('12345678')
    компилятор:fasm
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    наверное стоит написать

    mov ecx,[Leng]
     
  3. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Во первых
    Leng dd 9 ; не теряем завершающий ноль
    только тогда dword пересылка теряет смысл,
    А во вторых в фасме Leng - это адрес переменной, а [Leng] это её значение
    и ещё rep movs целесообразна только для выравненных в памяти dwordов, иначе лучше разбить её на простые комманды.
     
  4. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    тип TCHAR может принимать значения как в ANSI, так и в Unicode в зависимости от первого инклуда в сорце, где и определён тип этот -> *a.inc / *w.inc, поэтому это надо учитывать при копировании.