Студентам с вопросами о лабораторных работах сюда

Тема в разделе "WASM.BEGINNERS", создана пользователем IceStudent, 11 ноя 2006.

  1. Rom

    Rom New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    4
    .model tiny
    .code
    org 100h
    start:
    xor ah,ah ;хз
    int 16h ;ввод данных с клавиатуры
    cmp ah,1ch ;сравнивается значение введенного символа в регистре ah со скан-кодом enter
    je exit ;если предыдущее сравнение равно,то выход из программы

    mov di,offset digits ;записывает в регист di значение строки digits
    xor al,al
    mov cx,4 ;записывает в регист cx значение 4
    shr ax,cl
    shr al,cl

    xchg ah,al ;регистру ah присваивает значение регистра al, а регистру al значение ah
    cmp al,10 ;сравнивается значение регистра ah и 10. Из регистра ah вычитается 10
    sbb al,69h ;вычитает из 69h значение регистра al и записывает результат в оегистр al
    das ;десятичная коррекция результата двоичного вычитания
    stosb ;записывает содержимое регистра Al в слово

    xchg ah,al ;регистру ah присваивает значение регистра al, а регистру al значение ah
    cmp al,10 ;сравнивается значение регистра ah и 10. Из регистра ah вычитается 10
    sbb al,69h ;вычитает из 69h значение регистра al и записывает результат в оегистр al
    das ;десятичная коррекция результата двоичного вычитания
    stosb ;записывает содержимое регистра Al в слово


    mov ah,9h ;выдает строку на экран
    mov dx, offset dannie ;записывает в регист di значение строки dannie
    int 21h ;прерывание DOS
    jmp start ;вернуться к началу программы

    exit: ;выход из программы
    ret ;возврат управления вызывающей программе

    dannie db 'Scan cod: ' ;выводимая на экран строка
    digits db 0h,0,0ah,0dh,'$' ;выводимый скан код

    end start ;завершение программы



    job-- спасиб за совет! Вроде описал..тока вот так и не понял что делает строка xor ah,ah и sbb al,69h не нашёл в прерываниях биоса такой команды..подскажешь?
     
  2. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Rom

    xor ah,ah ; ah = 0
    sbb al,69h; al = al - 69h c заёмом
     
  3. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Rom
    а искал долго?
     
  4. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    Dexa
    После 4-х mov-ов нужно вычесть из sp 8 чтобы popы вытаскивали данные из нужной области памяти или вместо pop использовать тоже mov
     
  5. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Dexa
    стек растёт в сторону уменьшения адреса стека.
    1. как уже сказано KeSqueer, надо вычесть из sp 8;
    2. неправильно возвращаешь данных из стека в регистры (не в том порядке);
    3. как-то так [SS:0E800] или так SS:[0E800].
     
  6. Dexa

    Dexa New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2008
    Сообщения:
    3
    использовать надо только те команды которые я написал в задании). То что стэк растет в сторону уменьшения адреса я знаю. Я вот понять не могу: когда пишу в стек адресация должна уменьшаться FFFF FFFE FFFD и т.д. Значит по идее командой
    mov BP,SP ----- SP=E800
    mov [BP-02],dx
    .
    .
    mov [BP-08],cx
    я отправляю данные из dx в стек по адресу E8FE пральна? при этом dx=1122 значит 22 пойдет в E8FE, а 11 в E8FF и т.д. Как вы и сказали.
    KeSqueer , pop и так должен вытаскивать из нужного места вроде, эт команда будет читать последнее что было записано в стэк (т.е. cx) и прочитает его в bx (t00x почему же не в том порядке то???) проблема в том что я в этой проге работал с DS а надо с SS!!!!
     
  7. Rom

    Rom New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    4
    wsd--вопрос а-ля стёб. За ответ пасиб))
     
  8. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    Dexa
    неа, по адресу E7FE.
    пардон, не дочитал условие.
     
  9. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Rom
    то что ты сам комментировал далеко не всё верно :)
    если ты по профилю биолог или химик , то на троечку с натяжкой потянет.
    Код (Text):
    1. .model tiny
    2. .code
    3. org 100h
    4. start:
    5.     xor     ah,ah             ; обнулить ah
    6.     int     16h               ;ввод данных с клавиатуры(прерывание BIOS)
    7.     cmp     ah,1ch            ;сравнивается значение введенного символа в регистре ah со                    скан-кодом  enter
    8.     je      exit              ;если предыдущее сравнение равно,то выход из программы
    9.  
    10.     mov     di,offset digits  ;записывает в регист di смещение строки digits
    11.     xor     al,al             ; обнуляем al
    12.     mov     cx,4              ;записывает в регист cx значение 4
    13.     shr     ax,cl             ;сдвигаем значение в право ax на кол-во бит из cl
    14.     shr     al,cl             ;сдвигаем значение в право al на кол-во бит из cl
    15.    
    16.     xchg    ah,al             ;меняем местами значение ah и al
    17.     cmp     al,10             ;сравнивается значение регистра al и 10.
    18.     sbb     al,69h            ;вычитает из al  значение 69h и записывает результат в оегистр al
    19.     das                         ;десятичная коррекция результата двоичного вычитания
    20.     stosb                      ;записывает содержимое регистра Al в память по адресу es:di
    21.  
    22.     xchg    ah,al             ;меняем местами значение ah и al
    23.     cmp     al,10             ;сравнивается значение регистра al и 10.
    24.     sbb     al,69h            ;вычитает с заёмом из al регистра значение 69рl и записывает результат в оегистр al
    25.     das                       ;десятичная коррекция результата двоичного вычитания
    26.     stosb                     ;записывает содержимое регистра Al в память по адресу es:di
    27.  
    28.     mov     ah,9h             ;выдает строку на экран
    29.     mov     dx, offset dannie ;записывает в регист dx смещение строки dannie
    30.     int     21h               ;прерывание DOS
    31.     jmp    start              ;вернуться к началу программы
    32.  
    33. exit:                         ;выход из программы
    34. ret                           ;возврат управления вызывающей программе
    35.  
    36. dannie db 'Scan cod: '        ;выводимая на экран строка
    37. digits db 0h,0,0ah,0dh,'$'    ;выводимый скан код
    38.  
    39. end start                     ;завершение программы
    можно пивом по вебмани отблагодарить :)
     
  10. Dexa

    Dexa New Member

    Публикаций:
    0
    Регистрация:
    30 мар 2008
    Сообщения:
    3
    Да я ошибся я так и писал в проге адрес е7fe только прога не рабит все равно(((
     
  11. Benzin

    Benzin Сергей

    Публикаций:
    0
    Регистрация:
    26 авг 2007
    Сообщения:
    41
    Адрес:
    St.Petersburg
    Объясните пож-та. Вопрос прост до безобразия =)
    К примеру, функция CreateProcess в случае успеха возвращает не ноль
    Код (Text):
    1.                    
    2. if (hProcess == NULL)
    3. {
    4.    MessageBox(hDlg1,"Error","Error",MB_ICONHAND|MB_OK);            
    5.  
    6. }
    А если я не инициализировал хэндл этого процесса, и хочу проверить на ошибку, вызовом GetLastError(), то по идее я должен вызвать так:
    Код (Text):
    1. if (GetLastError() == NULL)
    2. {
    3.    MessageBox(hDlg1,"Error","Error",MB_ICONHAND|MB_OK);
    4. }
    Но почему приходися вызвать так:
    Код (Text):
    1.                    
    2. if (GetLastError() != NULL)
    3. {
    4.    MessageBox(hDlg1,"Error","Error",MB_ICONHAND|MB_OK);
    5. }
    Т.е. я понимаю так: если процесс не был создан, я проверяю код ошибки вызовом GetLastError, сравниваю с NULL, и вывожу MessageBox.
    Где я не правильно мыслю, подскажите...
     
  12. Rom

    Rom New Member

    Публикаций:
    0
    Регистрация:
    29 мар 2008
    Сообщения:
    4
    wsd--по профилю не тот,не тот..преподают просто зорово:) насчёт пива по веб мани--хор,пиши в асю кошелёк 326274648
     
  13. censored

    censored New Member

    Публикаций:
    0
    Регистрация:
    5 июл 2005
    Сообщения:
    1.615
    Адрес:
    деревня "Анонимные Прокси"
    Benzin
    GetLastError возвращает 0 (SUCCESS), в случае если ошибки нет (0 == NULL), и все остальное (не NULL), если есть ошибка (код ошибки).
     
  14. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    CreateProcess() возвращает хендл процесса.
    GetLastError() - код ошибки.
    Делать одинаковые проверки нельзя.
     
  15. Benzin

    Benzin Сергей

    Публикаций:
    0
    Регистрация:
    26 авг 2007
    Сообщения:
    41
    Адрес:
    St.Petersburg
    censored & n0name спасибо.
     
  16. brat

    brat New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    3
    Всем привет!!!
    кто-нибудь может подсказать как сделать окно в dos с помощью ассемблера?=)
     
  17. KeSqueer

    KeSqueer Сергей

    Публикаций:
    0
    Регистрация:
    19 июл 2007
    Сообщения:
    1.183
    Адрес:
    Москва
    brat
    Путем поточечного рисования в видеопамять
     
  18. brat

    brat New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    3
    а попроще???
    мне это надо на асме сделать!
    где можно про это рочитать?
    и еще какая ошибка в этой строке:
    include 'C:\soft\include\windows.inc',00h ???
     
  19. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    brat
    include 'C:\soft\include\windows.inc',00h ???

    include C:\soft\include\windows.inc
    напиши конкретно что надо и насколько $ Вы расчитывете.
    Вам самим сейчас на асме ничего делать не рекомендуется.
    Ну и если задача не полный бред :)
     
  20. brat

    brat New Member

    Публикаций:
    0
    Регистрация:
    6 апр 2008
    Сообщения:
    3
    cначало результат потом $!!!
    ок???