Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Assembler

Автор: AZelensky
Дата сообщения: 02.06.2014 22:09

Цитата:
AZelensky
 
может уже сам наваял чего?



Код: 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.
Автор: ne_viens
Дата сообщения: 02.06.2014 22:59
Asm, только C вместо Pascala: [more]#include <stdlib.h>
#include <stdio.h>

int* loadArray(char* fName, int* len)
{
    int *mem, i;
    FILE* f;

    f = fopen(fName, "rb");
    fseek(f, 0, SEEK_END);
    i = ftell(f);
    mem = malloc(i);
    rewind(f);
    fread((char*)mem, 1, i, f);
    fclose(f);
    *len = i;
    return mem;
}

main()
{
    int *x, *y, *z, lenx, leny;
    FILE *f;
    
    x = loadArray("minuend.bin", &lenx);
    y = loadArray("subtrahend.bin", &leny);
    z = malloc(lenx);
    
    __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
    }

    free(x);
    free(y);
    f = fopen("difference.bin", "wb");
    fwrite(z, 1, lenx, f);
    free(z);
}[/more] Может сгодится для образца...
Автор: alekc2008
Дата сообщения: 07.06.2014 23:37
Решение квадатных уравнений с помощью сопроцессора
http://liloisproj.narod.ru/res_kv.htm
Автор: bomzzz
Дата сообщения: 08.06.2014 07:41
никто не знает как функциями ядра винды "подключить" флешку - то есть при монтировать ее раздел
Автор: ne_viens
Дата сообщения: 08.06.2014 16:18
MS пишет, что достаточно открыть файл на монтируемом vol.


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


Так 21 век уже, пора SSE начинать использовать [more].686
.xmm
.model flat,stdcall
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\user32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\user32.lib

.const
db 11
g_a REAL8 2.0
g_b REAL8 4.0
g_c REAL8 -6.0
g_4 REAL8 4.0
g_noRoots db "Has not roots",0

.data?
x1 REAL8 ?
x2 REAL8 ?

.code
start:
        movq XMM1, g_4
        movq XMM6, g_a
        mulsd XMM1, XMM6
        mulsd XMM1, g_c
        movq XMM7, g_b
        movq XMM2, XMM7
        mulsd XMM2, XMM2
        subsd XMM2, XMM1    ;XMM2 = b * b - 4 * a * c;
        xorpd XMM0, XMM0
        comisd XMM0, XMM2
        jz oneRoot            ;XMM2 == 0 ?
        jnc noRoots            ;XMM2 < 0 ?

        subsd XMM0, XMM7
        movq XMM1, XMM0
        sqrtsd XMM2, XMM2
        subsd XMM0, XMM2
        addsd XMM1, XMM2
        addsd XMM6, XMM6
        divsd XMM0, XMM6
        divsd XMM1, XMM6
        movq x1, XMM0        ;x1 = (-b - sqrt(XMM2)) / (2 * a);
        movq x2, XMM1        ;x2 = (-b + sqrt(XMM2)) / (2 * a);
        jmp _ret

oneRoot:
        subsd XMM0, XMM7
        addsd XMM6, XMM6
        divsd XMM0, XMM6
        movlpd x1, XMM0        ;x1 = (0 - b) / (2 * a);
        jmp _ret

noRoots:
        invoke MessageBoxA, 0, OFFSET g_noRoots, 0, 0
_ret:
        invoke ExitProcess, 0
END start[/more]!

Автор: bomzzz
Дата сообщения: 08.06.2014 19:09
ne_viens
у меня почему то не компилится код

include \masm32\include\windows.inc
[more]Microsoft (R) Macro Assembler Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.

Assembling: C:\Documents and Settings\bomzzz\Рабочий стол\Текстовый документ.tx
t

***********
ASCII build
***********

\masm32\include\windows.inc(156) : error A2004:symbol type conflict : bool
\masm32\include\windows.inc(7835) : error A2179:structure improperly initialized

\masm32\include\windows.inc(7835) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9045) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9045) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9058) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9058) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9070) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9070) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9075) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9075) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9080) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9080) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9085) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9085) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9090) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9090) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9097) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9097) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9104) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9104) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9111) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9111) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9116) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9116) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9122) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9122) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9130) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9130) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9131) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9131) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9135) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9135) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9141) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9141) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9148) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9148) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9155) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9155) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9160) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9160) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9168) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9168) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9175) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9175) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9183) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9183) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9190) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9190) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9200) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9200) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9201) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9201) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9205) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9205) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9206) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9206) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9211) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9211) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9217) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9217) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9224) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9224) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9231) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9231) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9237) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9237) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9248) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9248) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9256) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9256) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9267) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9267) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9279) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9279) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9287) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9287) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9295) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9295) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9306) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9306) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9317) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9317) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9326) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9326) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9334) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9334) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9343) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9343) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9350) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9350) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9355) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9355) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9359) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9359) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9364) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9364) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9374) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9374) : error A2008:syntax error : in structure
\masm32\include\windows.inc(9393) : error A2179:structure improperly initialized

\masm32\include\windows.inc(9393) : fatal error A1012:error count exceeds 100; s
topping assembly
Microsoft (R) Incremental Linker Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.

LINK : fatal error LNK1181: cannot open input file 'Текстовый документ.obj'
Не удается найти C:\Documents and Settings\bomzzz\Рабочий стол\Текстовый докумен
т.obj
Для продолжения нажмите любую клавишу . . .[/more]

Добавлено:
у меня походу процессор это ссе не поддерживает

Цитата:

.686
.MMX
.XMM

.model flat, stdcall
option casemap :none

исправил заголовок
Автор: ne_viens
Дата сообщения: 08.06.2014 19:22
сделай:
;include \masm32\include\windows.inc
, если из C environment'а компилируешь.

Сомневаюсь, что у тебя процессор меньше P4
Автор: bomzzz
Дата сообщения: 08.06.2014 20:24
масм32 компилировал.

Добавлено:
а блин. тут вообще окно не выводиться.
Автор: AZelensky
Дата сообщения: 08.06.2014 22:15
А мне поможете?
Автор: bomzzz
Дата сообщения: 09.06.2014 09:20
как то более вопрос конкретизируй. писать все никто скорее всего не будет, разбирать чужое тоже головняк, на какой то частный вопрос легко ответить. что конкретно не получается?
Автор: AZelensky
Дата сообщения: 09.06.2014 14:36
Написать программу, производящую вычитание чисел произвольной размерности. Числа хранятся в виде массивов типа 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.
Автор: ne_viens
Дата сообщения: 09.06.2014 14:47
Взять рабочую ассемблерную вставку из предыдущей страницы и попросить на паскальной ветке форума, чтоб прикрутили 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
}
Автор: AZelensky
Дата сообщения: 09.06.2014 15:31

Цитата:
Взять рабочую ассемблерную вставку из предыдущей страницы и попросить на паскальной ветке форума, чтоб прикрутили 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;
Автор: ne_viens
Дата сообщения: 09.06.2014 16:29
Нет, так как инструкция jno делает совсем другое, чем необходимо, да и "add [eax+4], 1" более уместна для суммирования int'ов а не вычитания. Рабочий код тот, который я выкладывал, только там io ф-ии на C написаны, так как я по паскалю небумбум.
Автор: AZelensky
Дата сообщения: 09.06.2014 16:50

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



Как такое может быть?
[dcc32 Error] Project1.dpr(76): E2107 Operand size mismatch
Автор: Benchmark
Дата сообщения: 10.06.2014 14:32
AZelensky

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


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

add dword ptr [eax+4], 1

или

add dword [eax+4], 1
Автор: bomzzz
Дата сообщения: 10.06.2014 14:41
inc dword ptr [eax+4]
Автор: sergeo78
Дата сообщения: 14.06.2014 20:19
помогите пожалуйста собрать win32 бинарник последнего релиза nasm. желательно на mingw, но и на msvc можно. только профиль сборки подправить надо? чтоб запускался и работал на первом пентиуме, а лучше на 486. разрабы собрали на msvc 2010, с ключём = /O2 /Ox /Oy /W2. и в результате этот бинарник ассемблера требует sse2 для своей работы
Автор: ne_viens
Дата сообщения: 14.06.2014 21:48
Бинарник требует SSE потому, что в коде SSE инструкции, и с ключами или профилями этого не изменить.
Автор: sergeo78
Дата сообщения: 14.06.2014 22:07

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

откуда они там взялись, если в привидушем релизе их не было. авторы поменяли сборочный компилятор, а ключ сборки не изменили. нужно после /O2 добавить /arch:IA32. без этого следущая команда /Ox сразу же в бинарник скалярный код SSE2 пихает.
Автор: ne_viens
Дата сообщения: 15.06.2014 10:49
Оригинал на MinGW собран. И нету там SSE, только cmovnz и multibyte-nop, на чём 586 (не Pro) может споткнуться.
http://zalivalka.ru/148101 - на MSVC2008 собранная 2.11.05 версия насма.
Автор: sergeo78
Дата сообщения: 15.06.2014 11:53

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

да всё работает. спасибо.
Цитата:

только cmovnz и multibyte-nop

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

Цитата:
multibyte-nop

не знал про такую команду. а для чего ее используют?
Автор: ne_viens
Дата сообщения: 15.06.2014 12:44
Для выравнивания начала куска кода на 4, 8, 16 байтовые границы.
Выполняется быстрее чем nop; mov edi, edi; lea ecx, [ecx+0]; lea esp, [esp+0]; add eax, 0; итд.
Автор: bomzzz
Дата сообщения: 15.06.2014 12:56
но тогда самому придется считать байты. а align тут не пойдет?

Добавлено:
всосал - алайн впихивает простые нопы
Автор: AlekXL
Дата сообщения: 07.07.2014 07:03
подскажите, есть ли виртуальные машины(ПО), к-е виртуализуют хардварную отладку, DEBUGCTL, и так далее. VmWare вроде не умеет.
Автор: SuPriTo
Дата сообщения: 07.07.2014 10:32
http://ru.wikipedia.org/wiki/Bochs
Может быть это?
Автор: AlekXL
Дата сообщения: 07.07.2014 14:56

Цитата:
http://ru.wikipedia.org/wiki/Bochs
Может быть это?

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

Добавлено:
Кстати, а отладочные регистры специфичны для потока, или глобальны?
Если я установлю скажем, DR1 в контексте потока 1, то будет ли потом он тем же в контексте потока 2?
Автор: MERCURY127
Дата сообщения: 08.07.2014 11:03
AlekXL, CRx/DRx/TRx, насколько я помню, глобальны...
Автор: bomzzz
Дата сообщения: 09.07.2014 09:28
конечно "глобальны". и после их изменения в защищенном режиме не будут работать все потоки

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384

Предыдущая тема: .NET GUI компоненты


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.