0 / 0 / 0
Регистрация: 04.10.2019
Сообщений: 9
1
MASM

Не показывает результат при запуске(быстро закрывается консоль)

09.12.2019, 10:35. Показов 2506. Ответов 1

Author24 — интернет-сервис помощи студентам
Здравствуйте! Есть код быстрой сортировки. Я её собираю при помощи команд ml /c /coff sort3.asm, link /subsystem:console sort3.obj. ехе-шник собирается, но при запуске быстро исчезает и не показывает ничего. Помогите разобраться в чём дело? Заранее спасибо!
Assembler
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
.386
.model flat, stdcall
option casemap :none
include D:\masm32\include\kernel32.inc
includelib D:\masm32\lib\kernel32.lib
.data
massiv dword 10000 dup (9,6,3,8,5,2,7,4,1,0)     ; массив 100 000 чисел
.code
;=========================================================
;=========================================================
; БЫСТРАЯ СОРТИРОВКА
         ; сортируются по возрастанию четырехбайтовые
         ; (dword) числа в диапазоне адресов массива от min до max;
         ; min - указатель на крайнее левое число;
         ; max - указатель на крайнее правое число
qsort proc public uses EAX EBX EDX EDI ESI, \
                  min: ptr dword, max: ptr dword
local dwDiv2: dword          ; объявляем локальную переменную
mov dwDiv2, 2                ; присваиваем ей значение "2"
mov EDI, min                 ; в EDI - адрес левого
mov ESI, max                 ; в ESI - адрес правого
mov EAX, [EDI]               ; в EAX - значение (не адрес) левого
add EAX, [ESI]               ; складываем EAX со значением правого
mov EDX, 0                   ; обнуляем EDX (подготавливаем для деления)
div dwDiv2                   ; делим EAX на "2"
mov EBX, EAX                 ; в EBX - среднее значение левого и правого
.WHILE EDI < ESI             ; повторяем, пока адрес левого < адреса правого
   .WHILE [EDI] < EBX        ; повторяем, пока значение левого < среднего значения
      add EDI, 4             ; увеличиваем адрес левого на 4 байта
   .ENDW
   .WHILE [ESI] > EBX        ; повторяем, пока значение правого > среднего значения
      sub ESI, 4             ; уменьшаем адрес правого на 4 байта
   .ENDW
   .IF EDI <= ESI            ; если адрес левого <= адреса правого
      push [EDI]             ; тогда обмен значений через стек
      push [ESI]
      pop [EDI]
      pop [ESI]
      add EDI, 4             ; увеличиваем адрес левого на 4 байта
      sub ESI, 4             ; уменьшаем адрес правого на 4 байта
   .ENDIF
.ENDW
.IF min < ESI                ; рекурсии влево
   invoke qsort, min, ESI
.ENDIF
.IF EDI < max                ; рекурсии вправо
   invoke qsort, EDI, max
.ENDIF
ret                          ; возврат из процедуры
qsort endp
;============================================================
;============================================================
start:
; сортировка массива в диапазоне индексов 1000 - 2000
invoke qsort, addr massiv[1000*4], addr massiv[2000*4]
; сортировка массива в диапазоне индексов 0 - 99999
;invoke qsort, addr massiv[0], addr massiv[99999*4]
invoke ExitProcess, 0
end start
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.12.2019, 10:35
Ответы с готовыми решениями:

Быстро пропадает консоль при запуске программы
Добрый день ! Скомпилировал программу на flat assembler при нажатии на exe очень быстро появляется...

Почему при запуске программы консоль (среда Eclipse C++) сразу закрывается?
Привет всем :P Раньше изучал С++ в Visual Studio , теперь в силу смены ПК на ноут( Asus eee pc 701...

Быстро закрывается приложение при отладке в VS2015
Здравствуйте! Суть проблемы: Буквально в пятницу все работало как надо, никаких нареканий не было,...

Закрывается консоль при вводе первого элемента массива
ребят, когда ввожу первый элемент массива, то закрывается консоль! что не так? program Project2;...

1
Модератор
Эксперт по электронике
8472 / 4331 / 1642
Регистрация: 01.02.2015
Сообщений: 13,440
Записей в блоге: 8
09.12.2019, 11:02 2
А где в вашем коде вывод результата?

Для паузы добавьте в конце программы ожидание нажатия клавиши.

Я делаю разными способами:
getch из msvcrt
Assembler
1
2
3
4
        include \masm32\include\msvcrt.inc
        includelib \masm32\lib\msvcrt.lib
 
invoke crt_getch
ожидание нажатия LAlt
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.data
        azPressLeftAlt  db      0Dh, 0Ah, 0Dh, 0Ah, "Press Left Alt to exit", 0
.data?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        BufLen          dd      ?
        Buffer          db      1024 dup(?)
.code
        ;ожидание нажатия Left Alt
        invoke  WriteConsole, hConsoleOutput, ADDR azPressLeftAlt,\
                LENGTHOF azPressLeftAlt - 1, ADDR BufLen, NULL
        @@WaitForLAlt:
                invoke  GetAsyncKeyState, VK_LMENU
                and     eax,    8000h
        jz      @@WaitForLAlt
ожидание нажатия Enter при помощи ReadConsole
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.data
        aszPressEnter   db      0Dh, 0Ah, 0Dh, 0Ah, "Press ENTER to exit", 0
.data?
        hConsoleOutput  HANDLE  ?
        hConsoleInput   HANDLE  ?
        Buffer          db      1024 dup(?)
        BufLen          dd      ?
 
.code
 
        ;ожидание нажатия ENTER
        invoke  WriteConsole, hConsoleOutput, ADDR aszPressEnter,\
                LENGTHOF aszPressEnter - 1, ADDR BufLen, NULL
        invoke  ReadConsole, hConsoleInput, ADDR Buffer,\
                LENGTHOF Buffer, ADDR BufLen, NULL
0
09.12.2019, 11:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.12.2019, 11:02
Помогаю со студенческими работами здесь

При запуске программа закрывается
вот сам код #include &lt;iostream&gt; using namespace std; int main() { register int i,...

При запуске Steam клиент закрывается
ravencrust@ravencrust:~$ steam Running Steam on ubuntu 13.10 64-bit STEAM_RUNTIME is enabled...

Программа при запуске сразу закрывается
при запуске программа сразу закрывается, помогите найти ошибку Поставленная задача: Составить...

VirtualBox закрывается сразу при запуске
Проблема такая: • я устанавливаю VirtualBox и ничего на нём не запускаю - он работает нормально,...

При запуске установщика программы он просто закрывается
(винда 7 х64) Допустим я скачал установщик оперы (интернет браузер) запускаю установщик он...

Не показывает QSplashScreen при запуске
Сделал маленький пример: #!/usr/bin/env python3 # -*- coding: utf-8 -*- from PySide.QtGui...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru