Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2016, 17:46   #1
NewCoder1
Новичок
Джуниор
 
Регистрация: 19.11.2016
Сообщений: 1
По умолчанию Найти знач.выраж Assembler вставка на C++

- Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке высшего уровня (Паскаль, С++ и т.д.).
- Программа на языке высшего уровня должна запрашивать значения переменных и выводить результат на экран.
- Все переменные являются целочисленными.
(((A * X div B) * X div C) * X div D) * X
Задачу на ассемблере я написал а вот как связать с С++ не знаю.
Код:
%include "io.inc"
section .data


%include "io.inc"
section .data


section .text
global CMAIN
CMAIN:
    ;write your code here
    mov eax, 0
    mov ebx, 0
    mov edx, 0
    mov ecx, 0
    GET_DEC 4, eax ; МАКРОС ВВОДА
    GET_DEC 4, ebx
    GET_DEC 4, ecx
    GET_DEC 4, edx
    push edx ;ЛОЖУ В СТЕК , pop достать из стека
    push ecx ;ПЕРВЫМ В СТЕК ПОЛОЖЕН ПОСЛЕДНИМ ДОСТАН
    push ebx
    push eax
    mov eax, 0
    mov ebx, 0
    mov edx, 0
    mov ecx, 0
    GET_DEC 4, ecx ; x Лежит тут
    pop eax ; Достаю а
    imul eax, ecx ; умножаю а*х результат в eax
    pop ebx; ДОСТАЮ b
    idiv ebx ;делю (а*х/b) результат в eax 
     mov edx,0 ; ОБНУЛЕНИЕ РЕГИСТРА edx ОТ ОСТАТКА, ИНАЧЕ ПРИ НЕ ЦЕЛОЧИСЛЕННОМ 
     ;ДЕЛЕНИИ МУСОР 
    imul eax, ecx ;умножаю на х (а*х/b)*х результат в eax
   
    pop ebx; достаю с
    idiv ebx ;делю на с результат в eax  ((а*х/b)*х/с
     mov edx,0
    imul eax, ecx; умножаю на х реузльатат в eax ((а*х/b)*х/с)*х
    pop ebx; достаю d
    idiv ebx; делю на d резултат в eax ((а*х/b)*х/с)*х/d
     mov edx,0
    imul eax,ecx; умножаю на x результат в eax (((а*х/b)*х/с)*х/d)*х
    
    PRINT_DEC 4, eax ; МАКРОС ВЫВОДА НА ЭКРАН
     
    xor eax, eax
    ret
Assembler
И ещё знает кто на что заменить макросы PRINT_DEC и GET_DEC
NewCoder1 вне форума Ответить с цитированием
Старый 19.11.2016, 17:58   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

Похвально, конечно, но вот это:
Цитата:
Сообщение от NewCoder1 Посмотреть сообщение
- Реализуйте вычисление заданного выражения как ассемблерную вставку в программе на языке высшего уровня (Паскаль, С++ и т.д.).
означает что main и ввод\вывод должен быть на с++ (хоть printf, хоть cout/cin), а вставка может иметь вид (там можно и более забористо, но я так не делал ибо лень):
Код:
int F(int A, int B, int C, int X){
__asm{
  // выражение
  // ret НЕ нужен, ответ в ЕАХ
}
}
и лучше использовать явные "mov eax, A" т. к. не факт что А в еах, пусть компилятор сам это проверит/сделает
ну и стандартное правило что eax, ecx, edx можно (почти) свободно использовать, а др. регистры нужно сохранять\восстанавливать

Последний раз редактировалось GreenWizard; 19.11.2016 в 18:05.
GreenWizard вне форума Ответить с цитированием
Старый 19.11.2016, 23:47   #3
Мановар
Пользователь
 
Регистрация: 13.11.2016
Сообщений: 84
По умолчанию

Цитата:
Сообщение от NewCoder1 Посмотреть сообщение
Задачу на ассемблере я написал
Вы хоть поняли что написали? На другом форуме не прокатило?
Мановар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка Assembler.Работа с символами. Проблема с пересылкой символа Jawner C++ Builder 7 23.05.2013 17:30
Найти логарифм по основанию 2 от Х(Assembler) Kestin Помощь студентам 0 19.12.2011 05:56
в чем ошибка. рекурр. выраж. структура повтор. rikki93 Помощь студентам 3 11.12.2010 22:33
Найти второй по величине элемент (assembler) Rom@shka Помощь студентам 3 22.06.2009 20:07
Assembler - Помогите найти ошибку в программе Asya555 Помощь студентам 0 30.04.2009 16:08