Member 13831057 Ответов: 2

Проблема сортировки сборок X86


Создайте программный проект, состоящий из отдельных модулей, как показано на схеме на одной из следующих страниц. На диаграмме показана иерархия вызовов. Он не показывает последовательность вызовов. Последовательность (порядок) выполнения может быть получена из примера выполнения на следующей странице.


Пример выполнения

Эта программа драйвера запустит основную функцию сборки.

Добро пожаловать в массив обработки, запрограммированный Дженнифер Ван.

Пожалуйста, введите поплавки quadword для хранения в массиве. Отдельные входы с пробелами. Нажмите клавишу enter, а затем control+D, чтобы завершить работу.
3.0
9.0
1.0
2.0
<Cntl+D>

Спасибо. Это и есть массив:

Индекс физический адрес десятичное значение
0 000FFF4085108438 300000000000
1 000FFF4085108440 9.00000000000
2 000FFF4085108448 1.00000000000
3 000FFF4085108450 2.00000000000

Далее массив будет отсортирован по указателям.

Массив после сортировки по указателям имеет вид:
Индекс физический адрес десятичное значение
2 000FFF4085108448 1.00000000000
3 000FFF4085108450 2.00000000000
0 000FFF4085108438 300000000000
1 000FFF4085108440 9.00000000000

Массив без сортировки по указателям все еще присутствует:
Индекс физический адрес десятичное значение
0 000FFF4085108438 300000000000
1 000FFF4085108440 9.00000000000
2 000FFF4085108448 1.00000000000
3 000FFF4085108450 2.00000000000

Водитель получил этот номер:
3.0000000

Хорошего дня. Этот драйвер вернет 0 в операционную систему. Пока.


Используйте по крайней мере 8 десятичных цифр в правой части точки.



используйте “язык C “и” язык C++ " взаимозаменяемо. Они оба компилируются в неразличимые объектные файлы. Вы сами решаете, какой компилятор вы хотите использовать.

Программа-драйвер. Этот модуль инициирует запуск. Он вызывает основную программу X86. Он не отправляет никаких данных в основную программу X86, но когда основная программа сборки завершается, драйвер получает номер в слоте 0 исходного массива.


Основная программа сборки. Этот программный модуль вызывает каждый из модулей на третьем рычаге иерархической диаграммы. Эти модули передают данные вызываемым модулям в соответствии с универсальным стандартом передачи данных. [Это одна из ключевых концепций, которую вы должны убрать из этого курса.]


Программа inputqarray. Эта программа повторяет запрос пользователя, если он или она имеет больше данных для ввода. Когда эта программа закончила сбор данных от человека-пользователя, то она “отправляет обратно” массив, содержащий введенные данные, и отправляет обратно целое число, которое является количеством элементов, введенных в массив.


Программа outputarray. Эта программа выводит все числа массива в трех столбцах. Над каждой колонкой имеются краткие описательные заголовки. Быть осторожным. Эта программа не получает сам массив данных, а скорее получает массив указателей на массив данных.


Модуль сортировки написан на обычном языке. Идите и скопируйте программу сортировки из учебника. Таким образом, вы будете знать, что сама функция сортировки полностью отлажена. Вы можете выбрать любой алгоритм сортировки, который вам нравится.


Разнообразный

Числа с плавающей точкой могут быть выведены с 8 цифрами справа от точки. Нет необходимости проверять экстремальные значения данных. Это назначение связано с вызовом подпрограмм и передачей параметров.

При разработке программы вы можете просматривать данные, хранящиеся в массиве, с помощью подпрограммы dumpstack. Предположим, что "testscores" - это имя массива, который в настоящее время содержит 14 квадрословий. Затем следующие две инструкции отобразят этот массив.
mov rbp, testscores
свалка 50, 0, 14
Часто бывает полезно посмотреть содержимое массива.



Предлагаемые тестовые данные

Запуск #1: Начните с данных из примера выполнения, показанного в другом месте этого документа.
3.0
9.0
1.0
2.0


Запуск #2: Еще один простой случай, который можно проверить вручную
5.5
1.5


Запуск №3
1.8
2.6
4.3
-5.1
8.7


Беги #4
Массив пуст: просто введите Cntl+D


Запуск №5: одно число.
16.6


Запустить #6
309.6
0.0
0.0
0.0
0.0
300.8


Запуска #7
30000000.3
0.00000003
0.00000009
0.00000004
20000000.1


Запустите #8 больший массив
1000000.048
1000000.036
1000000.077
1000000.071
1000000.058
1000000.062
1000000.043
1000000.029
1000000.039
1000000.061
1000000.053
1000000.049
1000000.050
1000000.026
1000000.088
1000000.033


[Конец предлагаемых тестовых данных]


Что делать, когда вы закончите.

Это ваш выбор.

1. Ничего не делать. Никому не показывайте свою программу. Храните его в своем компьютере Для справки в день выпускного экзамена.

2. продемонстрируйте выполнение программы инструктору. На любом собрании класса после окончания лекции подойдите к передней части комнаты и скажите мне, что вы работали над программой сортировки. Я хотел бы посмотреть, как вы им управляете.

3. Вы можете отправить мне копию ваших исходных файлов по электронной почте. Пожалуйста, включите файл сценария для компиляции и связывания. Я буду очень рад запустить вашу программу на моей машине. Я отвечу вам по электронной почте с любыми полезными комментариями. Отрицательная сторона этого подхода заключается в том, что я очень завален множеством дел, и, вероятно, вы не получите быстрого ответа. Но я все равно буду рад, если вы мне что-нибудь пришлете.

Что я уже пробовал:

Мозговая бомба

вопрос решить должен быть файл c++ и файл .asm

СРР:
#include <stdio.h>

extern "C" double Arrayprocessing();                      

int main(){

  double return_code = -99.99;                              
  return_code =Arrayprocessing();
  printf("%s%1.18lf%s\n","The driver received return code ",return_code, ".  The driver will now return 0 to the OS.  Bye.");

  return 0;                                    

}

2 Ответов

Рейтинг:
2

OriginalGriff

Мы не делаем домашнее задание: оно задано не просто так. Она существует для того, чтобы вы думали о том, что вам сказали, и пытались понять это. Он также существует для того, чтобы ваш наставник мог определить области, в которых вы слабы, и сосредоточить больше внимания на корректирующих действиях.
И 3 строки кода C не считаются "тем, что вы пробовали"!

Попробуйте сами, возможно, вы обнаружите, что это не так сложно, как вы думаете!

Если вы столкнетесь с конкретной проблемой, то, пожалуйста, спросите об этом, и мы сделаем все возможное, чтобы помочь. Но мы не собираемся делать все это для вас!


Рейтинг:
1

Patrice T

Цитата:
Проблема сортировки сборок X86

Какая у вас проблема с этим домашним заданием ?

Мы не делаем вашу домашнюю работу.
Домашнее задание не предназначено для проверки ваших навыков просить других людей сделать вашу работу, оно предназначено для того, чтобы заставить вас думать и помочь вашему учителю проверить ваше понимание курсов, которые вы прошли, а также проблем, которые вы испытываете при их применении.
Любая ваша неудача поможет учителю выявить ваши слабости и наметить меры по исправлению положения.
Любая ваша неудача поможет вам узнать, что работает, а что нет, это называется "методом проб и ошибок".
Так что попробуйте, перечитайте свои уроки и приступайте к работе. Если вы застряли на конкретной проблеме, покажите свой код и объясните эту точную проблему, мы можем помочь.

Как программист, ваша задача-создавать алгоритмы это решает конкретные проблемы, и вы не можете полагаться на кого-то другого, чтобы вечно делать это за вас, поэтому есть время, когда вам придется научиться этому. И чем скорее, тем лучше.
Когда вы просто просите решение, это похоже на попытку научиться водить машину, обучая кого-то другого.
Создание алгоритма - это в основном поиск математики и необходимая адаптация к вашей реальной проблеме.

Идея "развития" заключается в следующем: "систематическое использование научно - технических знаний для достижения конкретных целей или требований." BusinessDictionary.com[^]
Это не то же самое, что "быстро гуглите и сдавайтесь, если я не могу найти точно правильный код".