Сейчас на форуме: Magister Yoda, vasilevradislav, tyns777, zombi-vadim (+3 невидимых)

 eXeL@B —› Программирование —› Простая программа на TASM под DOS
Посл.ответ Сообщение

Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 22 июня 2008 13:02
· Личное сообщение · #1

Привет всем!

Подруге в универе задали задачку - написать прогу на TASM'е, которая бы сортировала массив чисел. В принципе, сложного здесь ничего нет, процедуру сортировки я написал... правда на псевдокоде и под 32-бита (тогда еще не знал что под DOS надо). Вот процедура:

; ПРОЦЕДУРА СОРТИРОВКИ
; два аргумента - адрес массива и его размер

push ebp ; сохраняем регистры
mov ebp, esp
sub esp, 4
push ebx
push edi
mov ecx, dword ptr ss:[ebp+8] ; взять адрес массива из стека
mov ebx, dword ptr ss:[ebp+C] ; взять длину массива из стека
xor edi, edi ; i = 0
jmp L1
L4: test edi, edi ; if(i < 0)
jge L2
xor edi, edi ; i = 0
L2: mov eax, edi ; кладем счетчик в eax
shl eax, 2 ; умножаем на 4, т.к. элемент массива 32-битный
mov edx, dword ptr ds:[ecx+eax+4] ; берем array[i + 1]
cmp dword ptr ds:[ecx+eax], edx ; if(array[i] > array[i + 1])
jle L3 ; неа, берем следующий элемент
mov eax, dword ptr ds:[ecx+edi*4] ; int temp = array[i]
mov dword ptr ss:[ebp-4], eax ; сохранить temp
mov eax, edi ; кладем счетчик в eax
shl eax, 2 ; умножаем на 4
mov edx, dword ptr ds:[ecx+eax+4] ; array[i] = array[i + 1]
mov dword ptr ds:[ecx+eax], edx ;
mov eax, dword ptr ss:[ebp-4] ; восстановить temp
mov dword ptr ds:[ecx+edi*4+4], eax ; array[i + 1] = temp
dec edi ; i = i - 1
jmp L1
L3: inc edi ; i = i + 1
L1: lea eax, dword ptr ds:[ebx-1] ; array.length - 1
cmp edi, eax ; while(i < len - 1)
jl L4 ; едем дальше ;)
pop edi ; восстанавливаем регистры
pop ebx
mov esp, ebp
pop ebp
retn ; the end


Над комментами не угараем - это для подруги . В общем, мне сейчас нужно написать саму программу... Кто-нибудь может кинуть пример? Нужно чтобы прога сортировала массив (можно не введенный пользователем, а hardcoded) и печатала его на экран. С последним особые сложности, так как я вообще под DOS никогда не писал.

P.S. Если бы под Win32 было дело, я бы никого не тревожил.

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 22 июня 2008 14:22 · Поправил: mak
· Личное сообщение · #2

Может поможет =)

Standard calls to INT 21H for I/O placed in subprograms
PRINT a list of numbers with a choice of heading
COPY an array of numbers into a second array of numbers
ATOI (ascii to integer) conversion for 1-byte quantities
ITOA (integer to ascii) conversion for 1-byte quantities

Sorting algorithms:

Simple exchange sort
Classic bubble sort
Simple insertion sort
Recursive quicksort

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 22 июня 2008 15:35
· Личное сообщение · #3

mak
да как сказать... это же кусок какой-то? или не влезло просто... да и слишком много кода. за вечер не разобраться, а нужно к завтра сделать. я так понимаю мне нужен TASM и TLINK, чтобы собрать EXE? а как быть с RTL функциями? они вообще есть?

в идеале бы пример hello world'а для TASM DOS который бы печатал циферки )

-----
MicroSoft? Is it some kind of a toilet paper?





Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 22 июня 2008 15:42
· Личное сообщение · #4

асм файл полный. Помойму очень даже полезный код. 16 адресация для дос варианта ... не сложнее чем 32 адресация.

b23f_22.06.2008_CRACKLAB.rU.tgz - sort.asm

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube




Ранг: 253.9 (наставник)
Активность: 0.130
Статус: Участник

Создано: 22 июня 2008 17:41
· Личное сообщение · #5

mak
спасибо! на самом деле пришлось себя заставить "засесть" и все получилось. переписал sort.asm, оставил только сортировку пузырьком... чуть больше 200 строк получилось.

если кому-то нужно, то вот аттач, там еще бинарь и средства разработки

9276_22.06.2008_CRACKLAB.rU.tgz - sort.zip

-----
MicroSoft? Is it some kind of a toilet paper?




Ранг: 51.5 (постоянный), 16thx
Активность: 0.040.01
Статус: Участник

Создано: 22 июня 2008 20:07
· Личное сообщение · #6

www.piter.com/books/download/978527200380 файлы к книге Юрова Ассемблер. Практикум. несколько алго сортировок. может пригодится.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 22 июня 2008 21:13
· Личное сообщение · #7

Tim ну вот видишь , закрывай топ

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube



 eXeL@B —› Программирование —› Простая программа на TASM под DOS
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати