Проблема сортировки сборок 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; }