Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
Yvaliko

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ForposT_ForeveR
Ну что я могу сказать. Все не так плохо как могло бы быть
Т.к. числа будут всякие, то можно сразу все делать через сопроцессор. А можно не делать
Итак, что нам нужно:
  • Счиать из файла все выражения
  • Составить последовательность их решения. Ведь некоторые выраджения используют переменные которые вычисляются в другом выражении. Значит надо первым выполнить то выражение, все переменные которого уже известны.
  • Составить список всех переменных. Сформировать из них сегмент данных нашего исходника.
    Тут еще можно подумать над типом данных. Думаю достаточно будет двойного слова для не дробных. Пусть все они будут целые со знаком, для всех будем использовать операции над числами со знаком, это немного уменьшит число макросов. Для дробных можно взять 10 байт, стандартный размер регистра сопроцессора. Неизвестные переменные заполнить нулями.
  • Формируем алгоритм решения первого выражения.
    Для удобства написания макросов лучше соблюсти правило. Первое число всегда загружаем в eax, а второе в ebx. После присвоения значений регистрам идет вычисление значения и запись результата в переменную (если результат это значение новой переменной).
  • По окончании вычисления одного выражения вставляем макрос вывода на экран и выводим результат.
    Потом формируем алгоритв расчета второго выражения и так далее.
     
    Как то так я это вижу.
    Если я все вижу правильно, то можно начать пилить макросы.

  • Всего записей: 770 | Зарегистр. 13-05-2008 | Отправлено: 15:01 30-05-2012 | Исправлено: Yvaliko, 15:02 30-05-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    День добрый всем. Я написал прогу которая принимает от юзера данные с клавиатуры и вносит их в массив который определен внутри стека.
    Далее прога.
    code
    У меня такой вопрос, как взять этот "массив" и переслать его второй функции для печати?

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 15:05 13-06-2012
    MERCURY127



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro, просто вызови ее - массив останется на стеке, только указатель стека сместиться вниз.

    Всего записей: 11564 | Зарегистр. 03-08-2008 | Отправлено: 15:10 13-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro
    а зачем так? ну и заносил бы его в msg...

    Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 15:32 13-06-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    а зачем так? ну и заносил бы его в msg...

    если бы все было так просто, я бы даже не задавал бы вопрос. а msg там определен я даже не помню зачем.

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 15:43 13-06-2012 | Исправлено: blaro, 15:43 13-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro
    ну так и надо стремиться к простоте...
    тем более, если ты -- автор программы ;)

    Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 15:49 13-06-2012 | Исправлено: akaGM, 15:49 13-06-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    ну так и надо стремиться к простоте...
    тем более, если ты -- автор программы

    автор то я, но получил задание от препода. если бы не препод, сделал бы самую простую прогу

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 15:57 13-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro
    ну так и как выглядит задание в оригинале?
    наверное, у вас там готовят инквизиторов? :)
     
    обычно "хранить данные п/п на стеке", это хранить в динамической памяти, что по простому реализуется через
    push bp
    mov bp, sp
    sub sp, 100
     
    хотя возможны варианты...

    Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 16:07 13-06-2012
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro

    Цитата:
    push bp  
    mov bp,sp  
    add bp,2
     
    Это зачем? И где восстановление sp?
    Если в фунции требуется доступ к параметрам вызова или стековым переменным, делается так:

    Код:
    push bp  
    mov bp, sp  
    sub sp, xxxx
    ...
    mov sp,bp
    pop bp

    Иначе в этом нет смысла. Если изменить sp, выделяя память под локальные переменные, и не восстановить его, программа грохнется - команда ret вытащит из стека не правильный адрес возврата, а день рождения бабушки.
     
    Что же до места хранения переменных, есть три варианта:
    1. Статические переменные - память выделяется в сегменте данных при компиляции.
    2. Автоматические переменные - память выделяется на стеке при входе в программу (то самое sub sp,100).
    3. Динамические переменные - память запрашивается у операционной системы через соответствующие функции.
    Что конкретно требуется в задании?

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 17:52 13-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    Если в фунции требуется доступ к параметрам вызова или стековым переменным, делается так:

    после
    push bp  
    mov bp, sp  
    sub sp, xxxx  
     
    уточнение:
     
    к параметрам вызова
    mov ax, [bp+4]
     
    к стековым _локальным_ переменным
    mov bx, [bp-4]
     
     

    Цитата:
    Статические/Автоматические/Динамические переменные

    и это уточнение принимается...

    Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 18:26 13-06-2012
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    уточнение:  
     
    к параметрам вызова  
    mov ax, [bp+4]

    Уточнение:
    По адресу [bp] лежит старое значение bp (2 байта), по адресу [bp+2] - адрес возврата из функции, 2 или 4 байта в зависимости от типа вызова. Поэтому параметры начинаются с [bp+4] для функций типа near и с [bp+6] для far.

    Цитата:
    к стековым _локальным_ переменным  
    mov bx, [bp-4]

    А это уже зависит от того, какие там переменные.

    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 18:54 13-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    Abs62
    да, если речь идёт о 16-битном приложении...
    и тогда уж
    mov ax, ss:[bp+4]  
    потому что лично я не знаю относительно чего, кроме тасма/масма, адресуют bp другие ассемблеры...
    передачу параметров через регистры или очистку стека в зависимости от соглашения о вызовах обсуждать будем? :)

    Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 19:26 13-06-2012 | Исправлено: akaGM, 19:30 13-06-2012
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

    Цитата:
    чего, кроме тасма/масма, адресуют bp другие ассемблеры...  

    bp для локальных переменных используется вроде

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 00:49 14-06-2012
    cp58

    Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    bomzzz

    Цитата:
    bp для локальных переменных используется вроде

    bp(ebp) это регистр, используемый для стековых фреймов.

    Всего записей: 295 | Зарегистр. 06-12-2011 | Отправлено: 01:01 14-06-2012
    bomzzz



    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
     
     

    Цитата:
    Регистр ЕВР содержит адрес, начиная с которого в стек вносится или забирается информация (или "глубина" стека). Параметры функций имеют положительный сдвиг относительно ЕВР, локальные переменные - отрицательный сдвиг, а полный адрес этого участка памяти будет SS:EBP.  

    Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 01:11 14-06-2012
    Abs62



    Gold Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    akaGM

    Цитата:
    потому что лично я не знаю относительно чего, кроме тасма/масма, адресуют bp другие ассемблеры...  

    Ассемблеры тут не при чём, это определяется архитектурой процессора.

    Цитата:
    The uses of general-purpose registers as base or index components are restricted in the following manner:
    • The ESP register cannot be used as an index register.
    • When the ESP or EBP register is used as the base, the SS segment is the default segment. In all other cases, the DS segment is the default segment.
    Intel® 64 and IA-32 Architectures Developer's Manual: Vol. 1


    ----------
    0 программистов ругал сердитый шеф
    Потом уволил одного, и стало их FF

    Всего записей: 6080 | Зарегистр. 22-10-2005 | Отправлено: 01:13 14-06-2012 | Исправлено: Abs62, 01:13 14-06-2012
    akaGM

    Platinum Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    ну теперь знаю...
     
    вообще bp = Base Pointer
     
    а на самом деле в локале в bp можно заносить/хранить что угодно, что неднократно делается ассемблерщиками при "нехватке регистров"...

    Всего записей: 24120 | Зарегистр. 06-12-2002 | Отправлено: 01:48 14-06-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Привет всем. Я написал процедуру прерывания. Скажите, есть ли какая то возможность посмотреть через Turbo Debbuger как выполняется прерывание при вызове из программы?

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 21:40 27-06-2012
    Yvaliko

    Advanced Member
    Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
    blaro
    trace into
    По умолчанию вроде F7

    Всего записей: 770 | Зарегистр. 13-05-2008 | Отправлено: 22:10 27-06-2012
    blaro



    Member
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
    Yvaliko

    Цитата:
    trace into
    По умолчанию вроде F7

    Не, не помогает. Он ее проходит как обычную операцию

    ----------
    Оптимистично смотрю на мир глазами убийцы.

    Всего записей: 311 | Зарегистр. 29-01-2006 | Отправлено: 22:20 27-06-2012
    Открыть новую тему     Написать ответ в эту тему

    Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

    Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


    Реклама на форуме Ru.Board.

    Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
    Modified by Ru.B0ard
    © Ru.B0ard 2000-2024

    BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

    Рейтинг.ru