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

Не могу выгрузить из матрицы Assembler+Delphi

24.10.2015, 14:55. Показов 629. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, не могу выгрузить из матрицы. В матрицу в регистр ecx , ячейки 0..180, записываю цифры по увеличивающейся от 0 до 180. Первая ячейка записано 0, вторая 1 и т.д. Заранее благодарю.
Delphi
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
unit Ass;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TMainForm1 = class(TForm)
    ListBox1: TListBox;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  MainForm1: TMainForm1;  
  b:array [0..180] of word integer;
  
implementation
 
{$R *.dfm}
 
 
procedure TMainForm1.Button1Click(Sender: TObject);
 Label k3;
 var
  Total: Longword;
  OperBegin, OperEnd: TTimeStamp;
  ii,ir,i1:  integer;
 
begin
 OperBegin:=DateTimeToTimeStamp(Now);
  
 ii:=0;// Установка переменой в 0 .
 i1:=1; // Переменная для увеличения на 1 в каждой ячейки памяти .
 
 asm
             push ecx
             xor ecx,ecx
             lea ecx,b 
            
             fldz // Установка в 0.
             push edx 
             xor edx,edx  
      k3:   mov edx,ii  //Загрузка эффективного адреса
             fist [ecx+2*edx]  //Загрузка в ячейку по эффективному адресу. 
             fadd i1  // Увеличение на 1 в следующею ячейку памяти
 
             inc ii // Увеличение на 1 переменную эффективного адреса
             cmp ii, 181// Сравнение с ограничением.
             jb k3 // Переход по метке, если переменная эффективного адреса меньше 181.
            fistp i // Освобождение стека для его балансировки.
 
              push edi // Проверяем содержимое матрицы.
              xor edi,edi
              push edx
              xor edx,edx
              mov edx,100 // Задаем эффективный адрес.
              mov edi, [ecx+2*edx] // Выносим в регистр edi содержимое ячейки.
              pop edx
              mov ir,edi // Содержимое ячейки в переменную для просмотра.
              pop edi
                pop edx //
                pop ecx //
   
    
  end;
 
 
  OperEnd:=DateTimeToTimeStamp(Now);
  Total:=OperEnd.Time-OperBegin.Time;
  ListBox1.Items.Add(IntToStr(ir)+' Содержание ячейки');
  ListBox1.Items.Add(IntToStr(Total)+' MSec');
end;
 
 
end.
Добавлено через 4 минуты
Загружаю любой эффективный адрес от 0 до 180 , получаю содержание ячейки только 0.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.10.2015, 14:55
Ответы с готовыми решениями:

Выгрузка из матрицы. Delphi+Assembler
Здравствуйте. Матрицу b загрузил в аккумулятор eax, сделал какой-то расчет и мне надо всю матрицу ...

Ячейка матрицы 2 байтовая. Delphi+Assembler
Здравствуйте. Не получится сделать трехмерную матрицу с ячейкой 2 байта. Переводил eax и ecx в ax...

Вывести данные из матрицы (Delphi + Assembler)
Здравствуйте, из памяти не все данные выводятся в автомате правильно, если подставлять вручную...

Перенести данные из одной ячейки матрицы в другую Delphi+Assembler
Здравствуйте. Скажите пожалуйста, могу перенести из одной ячейки матрицы в другую, если да, то...

2
0 / 0 / 0
Регистрация: 29.10.2014
Сообщений: 134
26.10.2015, 15:14  [ТС] 2
Если убрать mov edx,0 /обозначенная ???/, на экран будет выходить содержание последней ячейки матрицы, отработанной прог. то все нормально. Если самому вводить эф. адрес в mov edx,0 , mov edx,1 и т.д. то получаем эф. адрес 0=65536 вместо 0=0
1=131073 вместо 1=1
2=196610 вместо 2=2 в ячейках содержится какаита ерунда.
Delphi
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
  b:array [0..180] of word integer; 
  r1:=1; // Установка переменой r1 в 1
 
 asm
             push ecx
             xor ecx,ecx
    lea ecx,b
             fldz // Установка стека в 0.
             push edx 
             xor edx,edx
      k3:    mov edx,ii//Загрузка эффективного адреса.
             fist [ecx+2*edx]// Загрузка ячейки по эффективному адресу. 
             fadd r1 // Увеличение на 1 для следующей ячейки матрицы.
 
              
                 mov edx,0 //Задаем эффективный адрес для вывода содержание ячейки на экран. ???
                 push edi
                 xor edi,edi
                 mov edi, [ecx+2*edx]
                 mov ir,edi//  Вывод содержание ячейки на экран. 
                 pop edi
             inc ii // Увеличение на 1 переменой ii для эффективного адреса.
             cmp ii, 181// Ограничитель для переменой ii эффективного адреса .
             jb k3 // Если переменная  ii меньше 181 , то переходит по метке k3 .
           
             pop edx //
                pop ecx //
0
0 / 0 / 0
Регистрация: 29.10.2014
Сообщений: 134
30.10.2015, 14:20  [ТС] 3
Нашел. Так как матрица задана b:array [0..180] of word integer, т.е. word двух байтовый регистр, то надо писать mov di, [ecx+2*edx] вместо mov edi, [ecx+2*edx].
0
30.10.2015, 14:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.10.2015, 14:20
Помогаю со студенческими работами здесь

Delphi выгрузить в Excel
Добрый день, подскажите как можно их dbgrid выгрузить данные в Excel?

Не могу выгрузить данные!!!
Делаю выгрузку через универсальный механизм обмена с 1.6 бухгалтерия в 2.0 Начало выгрузки: ...

Не могу выгрузить форму
Ребят, вам несложно, а меня уже просто бесить начинает. Пишу код: Unload UserForm В ответ...

Не могу выгрузить БД на хостинг
При выгрузке получаю такое сообщение -- -- База даних: `scrypt` -- --...

Не могу выгрузить колонку
Всем здравствуйте!!!!!!! 1с 8.2 Мне нужно из документа выгрузить колонку Номенклатура в таблицу ...

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


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

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

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