Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Assembler] Арифметические операции 
:(
    Опции темы
Гениальный123Робот
Дата 30.1.2007, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



В каждом из заданий переменные a, b, c, d определяются в сегменте данных и имеют размерность слово. Необходимо выполнить над ними заданные арифметические и логические операции, а результат поместить в регистр AX. При выполнении умножения считаем, что результат вмещается в слово. При выполнении деления считаем, что оно целочисленное. Выполнение программы необходимо показать в Отладчике.

Примеры задания:
    Если a^3 > b^2 то
    Если  c * d = a / b то
       Результат = a AND b
    Иначе
       Результат = с << 2 (сдвинуть с два раза влево)
Иначе
      Результат = с * d + b


Благодарен заранее.  
PM MAIL   Вверх
anwe
Дата 28.2.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



И еще держи.
Код

    model    tiny
    .386
    .code
    org    100h
start:
    mov    ax,a
    imul    ax
    imul    ax,a
    mov    bx,b
    imul    bx,b
    cmp    ax,bx
    jl    l1
    mov    ax,c
    imul    d
    mov    bx,ax
    mov    ax,a
    idiv    b
    cmp    ax,bx
    je    l2
    mov    dx,offset rezd
    mov    ah,09h
    int    21h
    mov    ax,c
    shl    ax,2
    jmp    vyvod
l2:
    mov    dx,offset rezand
    mov    ah,09h
    int    21h
    mov    ax,a
    and    ax,b
    jmp    vyvod
l1:
    mov    dx,offset rezu
    mov    ah,09h
    int    21h
    mov    ax,c
    imul    d
    add    ax,d
vyvod:
    push    ax
    xchg    ah,al
    call    prn
    pop    ax
    call    prn
    ret

prn    proc    near
    mov    dh,al
    and    dh,0Fh
    shr    al,4
    call    print
    mov    al,dh
print:
    cmp    al,10
    sbb    al,69h
    das
    mov    dl,al
    mov    ah,02
    int    21h
    ret
endp    prn

a    dw    -2
b    dw    -3
c    dw    4
d    dw    -5
rezand    db    'Resultat AND: $'
rezd    db    'Resultat <<: $'
rezu    db    'Resultat c*d+d: $'
end    start

PM MAIL   Вверх
Гениальный123Робот
Дата 28.2.2007, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



anwe, спасибо! 
Поясни, пожалуйста, ключевые моменты!  
PM MAIL   Вверх
anwe
Дата 28.2.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 748
Регистрация: 2.9.2006

Репутация: 9
Всего: 23



А тут нет ключевых моментов smile 
Код

    model    tiny
    .386
    .code
    org    100h
start:
    mov    ax,a
    imul    ax        ;а^2
    imul    ax,a        ;а^3
    mov    bx,b
    imul    bx,b        ;b^2
    cmp    ax,bx        ;сравнить результаты
    jl    l1        ;меньше? - да - выполняется решение 3
    mov    ax,c        ;нет - выполняется проверка дальше
    imul    d        ;с*d
    mov    bx,ax        ;сохранить
    mov    ax,a
    idiv    b        ;а/b
    cmp    ax,bx        ;сравнить
    je    l2        ;равно? - да - выполняется решение 1
    mov    dx,offset rezd    ;нет - выполняется решение 2
    mov    ah,09h        ;вывести сообщение, показывающее
    int    21h        ;какое решение выполнено
    mov    ax,c
    shl    ax,2        ;с<<2
    jmp    vyvod        ;вывод
l2:
    mov    dx,offset rezand
    mov    ah,09h
    int    21h
    mov    ax,a
    and    ax,b        ;a AND b
    jmp    vyvod
l1:
    mov    dx,offset rezu
    mov    ah,09h
    int    21h
    mov    ax,c
    imul    d
    add    ax,d        ;с * d + b
vyvod:
    push    ax        ;сохранить результат
    xchg    ah,al        ;обмен байтами
    call    prn        ;сначала вывод старшего байта
    pop    ax        ;восстановить результат
    call    prn        ;теперь вывод младшего байта
    ret
;-----------------------
prn    proc    near
    mov    dh,al        ;сохранить результат
    and    dh,0Fh        ;оставить лишь младший полубайт
    shr    al,4        ;оставить лишь старший полубайт
    call    print        ;сначала вывод страшего полубайта
    mov    al,dh        ;восстановить результат
print:                ;теперь - младшего полубайта
    cmp    al,10        ;три строки перевода цифры в ее код
    sbb    al,69h
    das
    mov    dl,al        ;функция вывода символа
    mov    ah,02
    int    21h
    ret
endp    prn

a    dw    3
b    dw    3
c    dw    4
d    dw    5
rezand    db    'Resultat AND: $'
rezd    db    'Resultat <<: $'
rezu    db    'Resultat c*d+d: $'
end    start

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0417 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.