Работа со стеком [TASM] (Пишу с экзамена!)

Тема в разделе "WASM.BEGINNERS", создана пользователем Deadushka, 20 янв 2009.

  1. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Сижу на экзамене, нужно написать программу на TASM, которая по содержимому стека из двухбайтовых целых чисел (введенных с клавиатуры) определяет, образуют ли его элементы палиндромическую последовательность (т.е. значение первого элемента совпадает со значением последнего, значение второго - со значением предпоследнего и т.д.). Буду рад любой помощи)
     
  2. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Ну как, написал?
     
  3. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Код сравнения примерно такой:
    Код (Text):
    1. ;eax - ответ на вопрос
    2. ;ecx - кол-во чисел в стеке
    3. mov edi,esp
    4. lea esp,[esp+ecx*2]
    5. lea esi,[esp-2]
    6. mov eax,'Нет '
    7. a:cmpsw
    8.    jne quit
    9.    sub esi,4
    10.    cmp edi,esi
    11. jnae a
    12. mov eax,'Да  '
    13. quit:
     
  4. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Была недавно такая тема
     
  5. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Написал такой код:
    Код (Text):
    1. include bibl-mcr.inc
    2. MASM
    3. MODEL small
    4. .STACK 256
    5. .DATA
    6.     Str1 DB "‚ўҐ¤ЁвҐ 10 бЁ¬ў®«®ў: ",'$'
    7.         Str2 DB "„ ­­ п бва®Є  - Ї «Ё­¤а®¬",'$'
    8.         Str3 DB "„ ­­ п бва®Є  ­Ґ Ї «Ё­¤а®¬",'$'
    9. .CODE
    10. Start:
    11.  
    12.     mov ax,@data
    13.     mov ds,ax
    14.     Print Str1
    15.     mov si,sp
    16.     sub si,2
    17.     mov cx,10
    18. ;----------------------------------------------------
    19. InSta:
    20.     call Vvod_AX
    21.     push ax
    22.     loop InSta
    23. ;----------------------------------------------------
    24.     mov bp,sp
    25.     mov ax,[bp]
    26.     cmp ax,[bp+18]
    27.         jne Exit
    28.     mov ax,[bp+2]
    29.     cmp ax,[bp+16]
    30.     jne Exit
    31.     mov ax,[bp+4]
    32.     cmp ax,[bp+14]
    33.     jne Exit
    34.     mov ax,[bp+6]
    35.     cmp ax,[bp+12]
    36.     jne Exit
    37.     mov ax,[bp+8]
    38.     cmp ax,[bp+10]
    39.     jne Exit
    40.     Print Str2
    41. ;----------------------------------------------------
    42. Exit:
    43.     Print Str3
    44.     mov sp,si
    45.     call Stop
    46.     mov ax,4C00h
    47.     int 21h
    48. ;-----------------------------------------------------
    49. include bibl-prc.inc
    50. END Start
    Он компилится, но не работает( я тут где-то до 15:00....
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Deadushka
    трудно судить по твоему листингу, так как он с инклюдами, например хз, что за подпрограммы Stop, Print, Vvod_AX может быть они не работают -- если вам преподавали ассемблер, наверное и о дебагере, что-то говорили, вот через него и отлавливаются ошибки. Если есть еще время приаттачь свой exe может быть найдем ошибки
     
  7. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Stop, Print, Vvod_AX это остановка экрана, вывод строки на экран и ввод символов в ax, они точно правильные. Вот экзешник http://webfile.ru/2567402
     
  8. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    Stop, Print, Vvod_AX это остановка экрана, вывод строки на экран и ввод символов в ax, они точно правильные. Вот экзешник http://webfile.ru/2567402
     
  9. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Deadushka
    Не могу скачать -- каждый раз пишет что неверный код
    Нажми редактировать и приатачь exe прямо к своему сообщению -- внизу "Закачать новый файл"
     
  10. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    1) После Print Str2 в любом случае выполнится Print Str3
    2) После mov bp,sp желательно выполнить add sp,20
     
  11. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    murder
    Скорее всего Deadushka уже сдал или не сдал экзамен "я тут где-то до 15:00"
    Сейчас наверное уже пьет и старется забыть об ассемблере, как о страшном сне
    [​IMG]
     
  12. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Время относительно... Х.з. когда у него наступит 15:00. У меня время его последнего поста - 15:20.
     
  13. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    у меня 13:41))
     
  14. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Deadushka
    Тогда почему файл не прикрепил? Сидим тут -- волнуемся
     
  15. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    не прикрепляется файл(
     
  16. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Deadushka
    Попробуй заархивировать файл, возможно ехе не приаттачивается
     
  17. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Deadushka
    10 пост прочёл?
     
  18. Deadushka

    Deadushka New Member

    Публикаций:
    0
    Регистрация:
    18 янв 2009
    Сообщения:
    17
    да, не помогло
     
  19. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Возможно Vvod_AX поганит cx и loop уже не канает
     
  20. murder

    murder Member

    Публикаций:
    0
    Регистрация:
    3 июн 2007
    Сообщения:
    628
    Гы - работает. просто при вводе символов нужно жать Enter после каждого символа!

    Однако после Print Str2 в любом случае выполнится Print Str3