Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Обсуждаются все вопросы, связанные с программированием на Ассемблере как общего так и конкретного характера.
 
важное примечание
для тех кто считает, что здесь место халявных исполнений курсовых и лабораторных работ.
тут обычно помогают тем, кто сам хоть что-то пытается понять и сделать, но что-то не понимает, что-то не получается...
ведь ассемблер изучают и задачки на нём дают обычно не менеджерам по продажам и даже не всем физ.-мат. специальностям
вы сами избрали этот путь? вот и идите по нему сами, ножками... с ручками и с головой...
 
короче, тут не сборище придурков-альтруистов, которым нечего делать и они ждут-не дождутся когда вы их попросите
что-то сделать _за_ вас
если позарез надо и вы даже готовы заплатить, тогда вам сюда
удачи
 
некоторые ресурсы
http://www.wasm.ru/ Самый популярный русскоязычный ресурс. https://wasm.in/
Ассемблер - книги (ASM, Assembler)
 
Просьба все большие листинги оформлять тегом more.
 
если вам вдруг не отвечают или ответ вас не устраивает
и вообще полезно прочитать всем спрашивающим

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 01:42 29-11-2006 | Исправлено: akaGM, 17:44 11-06-2020
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
никто не знает как функциями ядра винды "подключить" флешку - то есть при монтировать ее раздел

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 08:41 08-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MS пишет, что достаточно открыть файл на монтируемом vol.
 

Цитата:
Решение квадатных уравнений с помощью сопроцессора
http://liloisproj.narod.ru/res_kv.htm

 
Так 21 век уже, пора SSE начинать использовать Подробнее...!
 

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:18 08-06-2014 | Исправлено: ne_viens, 17:18 08-06-2014
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
ne_viens
у меня почему то не компилится код
 
include \masm32\include\windows.inc  
Подробнее...
 
Добавлено:
у меня походу процессор это ссе не поддерживает

Цитата:
 
.686
.MMX
.XMM
 
.model flat, stdcall  
option casemap :none

исправил заголовок

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 20:09 08-06-2014 | Исправлено: bomzzz, 20:11 08-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сделай:
;include \masm32\include\windows.inc
, если из C environment'а компилируешь.
 
Сомневаюсь, что у тебя процессор меньше P4

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 20:22 08-06-2014 | Исправлено: ne_viens, 20:25 08-06-2014
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
масм32 компилировал.
 
Добавлено:
а блин. тут вообще окно не выводиться.

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 21:24 08-06-2014
AZelensky

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А мне поможете?

Всего записей: 41 | Зарегистр. 29-11-2013 | Отправлено: 23:15 08-06-2014
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
как то более вопрос конкретизируй. писать все никто скорее всего не будет, разбирать чужое тоже головняк, на какой то частный вопрос легко ответить. что конкретно не получается?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 10:20 09-06-2014
AZelensky

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Написать программу, производящую вычитание чисел произвольной размерности. Числа хранятся в виде массивов типа longint, где 0-й элемент массива - содержит младшие 32 бита числа (с 0-го по 31-й), следующий элемент массива с 32-го по 63-й и т. д.. Ввод-вывод данных чисел осуществлять из двоичных файлов (длина которых соответственно кратна 4-м).  
 
Как можно реализовать это? Буду очень благодарен за это.  
Нужно использовать Pascal с Ассемблерной вставкой
 
Вот то, что есть:
 
1 ---

Код:
Program RaznostMassivov;  
const N=7;  
var a1:array [1..N] of longint;  
    a2:array [1..N] of longint;  
    c:longint; p:pointer;  
    i:integer; p2:pointer;  
begin  
  for i:=1 to N do  
    begin  
      writeln('Введите ',i,' элемент массива №1');  
      readln(a1[i]);  
    end;  
    writeln('Введенный массив №1:');  
  for i:=1 to N do  
    write(a1[i],' ');  
    writeln;  
    for i:=1 to N do  
    begin  
      writeln('Введите ',i,' элемент массива №2');  
      readln(a2[i]);  
    end;  
  writeln('Введенный массив №2:');  
  for i:=1 to N do  
    write(a2[i],' ');  
  writeln;  
p:=@a1[1];  
p2:=@a2[1];  
  asm  
         mov eax, p  
         mov ebx, p2  
         mov ecx, 0  
    @s:  mov edx, [ebx]  
         sub [eax], edx  
         jno @m  
         add [eax+4], 1  
    @m:  inc ecx  
         cmp ecx, N  
         je @gg  
         add eax, 4  
         add ebx, 4  
         jmp @s  
         @gg:  
  end;  
end.

 
2 ---

Код:
program LongSum;
 
uses
  System.SysUtils;
 
const
 
n = 2;
 
type
 
LongValuePart = longint;
 
LongValue = array [0..n-1] of LongValuePart;
 
const
 
partSize = sizeof(LongValuePart);
 
function IntToBin(Value: integer; Digits: integer): string;
var
  i: integer;
begin
  result := '';
  for i := 0 to Digits - 1 do
    if Value and (1 shl i) > 0 then
      result := '1' + result
    else
      result := '0' + result;
end;
 
var
 
a, b, c : LongValue;
 
i, carry : longint;
 
begin
 
for i := 0 to n-1 do
 
begin
 
writeln('Введите ', i + 1,' часть числа a');
 
readln(a[i]);
 
end;
 
writeln('Введенное число a:');
 
for i := n-1 downto 0 do write(IntToBin(a[i], partSize * 2), ' ');
 
writeln;
 
for i := 0 to n-1 do
 
begin
 
writeln('Введите ', i + 1,' часть числа b');
 
readln(b[i]);
 
end;
 
writeln('Введенное число b:');
 
for i := n-1 downto 0 do write(IntToBin(b[i], partSize * 2),' ');
 
writeln;
 
asm
 
xor esi, esi // смещение
 
mov edi, n*partSize // граница смещения
 
xor ecx, ecx // перенесенный разряд с предыдущей части
 
@bgn: cmp esi, edi // проверка условия продолжения цикла
 
jnc @end
 
xor edx, edx // перенесенный разряд с текущей части
 
lea ebx, a // базовый адрес массива a
 
mov eax, [ebx + esi] // eax = a[i]
 
lea ebx, b // базовый адрес массива b
 
sub eax, [ebx + esi] // eax = a[i] + b[i]
 
adc edx, edx // устанавливаем перенесенный разряд с текущей части
 
add eax, ecx // добавляем перенесенный разряд с предыдущей части
 
lea ebx, c // базовый адрес массива c
 
mov [ebx + esi], eax // c[i] = eax (a[i] + b[i])
 
mov ecx, edx // устанавливаем перенесенный разряд с предыдущей части
 
add esi, partSize // увеличиваем смещение
 
jmp @bgn
 
@end: mov carry, ecx // устанавливаем признак переполнения
 
end;
 
writeln('Результат сложения с = a + b:');
 
for i := n-1 downto 0 do write(IntToBin(c[i], partSize * 2), ' ');
 
writeln;
 
if carry <> 0 then writeln('Внимание! Произошло переполнение!');
 
readln;
 
end.
 

Всего записей: 41 | Зарегистр. 29-11-2013 | Отправлено: 15:36 09-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Взять рабочую ассемблерную вставку из предыдущей страницы и попросить на паскальной ветке форума, чтоб прикрутили input и output стримы:
 
    __asm {
        mov ecx, lenx    //data length in bytes
        shr ecx, 2
        mov esi, x        //x[] - y[] = z[]
        mov edx, y
        mov edi, z
        clc
        lahf
L0:
        sahf
        lodsd
        sbb eax, [edx]
        stosd
        lahf
        add edx, 4
        dec ecx
        ja L0
    }

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 15:47 09-06-2014 | Исправлено: ne_viens, 16:30 09-06-2014
AZelensky

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Взять рабочую ассемблерную вставку из предыдущей страницы и попросить на паскальной ветке форума, чтоб прикрутили input и output стримы.

 
Т.е. вот эта ассемблерная вставка верна для выполнения этого задания?

Код:
 asm  
         mov eax, p  
         mov ebx, p2  
         mov ecx, 0  
    @s:  mov edx, [ebx]  
         sub [eax], edx  
         jno @m  
         add [eax+4], 1  
    @m:  inc ecx  
         cmp ecx, N  
         je @gg  
         add eax, 4  
         add ebx, 4  
         jmp @s  
         @gg:  
  end;

Всего записей: 41 | Зарегистр. 29-11-2013 | Отправлено: 16:31 09-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Нет, так как инструкция jno делает совсем другое, чем необходимо, да и "add [eax+4], 1" более уместна для суммирования int'ов а не вычитания. Рабочий код тот, который я выкладывал, только там io ф-ии на C написаны, так как я по паскалю небумбум.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 17:29 09-06-2014
AZelensky

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Нет, так как инструкция jno делает совсем другое, чем необходимо, да и "add [eax+4], 1" более уместна для суммирования int'ов а не вычитания. Рабочий код тот, который я выкладывал, только там io ф-ии на C написаны, так как я по паскалю небумбум.

 
 
Как такое может быть?
[dcc32 Error] Project1.dpr(76): E2107 Operand size mismatch

Всего записей: 41 | Зарегистр. 29-11-2013 | Отправлено: 17:50 09-06-2014
Benchmark



Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AZelensky

Цитата:
Как такое может быть?  

 
Надо уточнить размер операнда, к которому мы прибавляем единицу. Я уже не помню, как там было в паскале, но выглядеть будет или
 
add dword ptr [eax+4], 1
 
или
 
add dword [eax+4], 1

Всего записей: 6833 | Зарегистр. 01-10-2002 | Отправлено: 15:32 10-06-2014
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
inc dword ptr [eax+4]

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 15:41 10-06-2014
sergeo78



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
помогите пожалуйста собрать win32 бинарник последнего релиза nasm. желательно на mingw, но и на msvc можно. только профиль сборки подправить надо? чтоб запускался и работал на первом пентиуме, а лучше на 486. разрабы собрали на msvc 2010, с ключём = /O2 /Ox /Oy /W2. и в результате этот бинарник ассемблера требует sse2 для своей работы
 

Всего записей: 496 | Зарегистр. 06-10-2012 | Отправлено: 21:19 14-06-2014 | Исправлено: sergeo78, 21:21 14-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Бинарник требует SSE потому, что в коде SSE инструкции, и с ключами или профилями этого не изменить.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 22:48 14-06-2014
sergeo78



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Бинарник требует SSE потому, что в коде SSE инструкции,  

откуда они там взялись, если в привидушем релизе их не было. авторы поменяли сборочный компилятор, а ключ сборки не изменили. нужно после  /O2 добавить /arch:IA32. без этого следущая команда /Ox сразу же в бинарник скалярный код SSE2 пихает.

Всего записей: 496 | Зарегистр. 06-10-2012 | Отправлено: 23:07 14-06-2014
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Оригинал на MinGW собран. И нету там SSE, только cmovnz и multibyte-nop, на чём 586 (не Pro) может споткнуться.
http://zalivalka.ru/148101 - на MSVC2008 собранная 2.11.05 версия насма.

Всего записей: 1530 | Зарегистр. 01-11-2004 | Отправлено: 11:49 15-06-2014
sergeo78



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
на MSVC2008 собранная 2.11.05 версия насма.

да всё работает. спасибо.
Цитата:
 
только cmovnz и multibyte-nop

я совсем забыл про команду cmov. к тому же смотрел профиль сборки именно под msvc. последнее время именно подлянка с sse2, по умолчанию была характерной чертой сборки всех компиляторов  2010,2012,2013. но тут вылетел пиннок и от mingw, от которого я этого даже и ожидать не мог, в иду того что он до сих пор может генерировать код даже для 486 процессора, согласно спецификации. спасибо, ещё раз, буду теперь и про это учитывать.

Всего записей: 496 | Зарегистр. 06-10-2012 | Отправлено: 12:53 15-06-2014
bomzzz



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
multibyte-nop

не знал про такую команду. а для чего ее используют?

Всего записей: 13343 | Зарегистр. 13-01-2008 | Отправлено: 13:28 15-06-2014
Открыть новую тему     Написать ответ в эту тему

Страницы: 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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по программированию на Assembler


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru