Текущий архив: 2004.05.23;
Скачать: CL | DM;
ВнизПроблемка с asm Найти похожие ветки
← →
Dll (2004-05-07 18:30) [0]Почему в следующем коде переменная Ch заносится в регистр al как 0, хотя сама не нулевая? А есть ли в делфи ее собственные методы работы с битами?
procedure TForm1.Button1Click(Sender: TObject);
var s, d: string[100];
Ch: byte;
x: byte;
begin
s:=Edit1.Text;
for x:=1 to 20 do
begin
for i:=1 to Length(S) do
begin
Ch:=byte(s[i]);
asm
mov al,Ch
xor al,x
mov Ch,al
end;
D[i]:=chr(Ch);
end;
RichEdit1.Lines.Add(D);
end;
end;
← →
ASMiD © (2004-05-07 18:39) [1]Вообще Ch bkb CH или ch - это все имя регистра, а транслятор внутри Asm твою переменную с таким именем в гробу видел и берет регистр и ничего тебе толком не возвращяет. Так что обзови ее как-нибудь подругому.
← →
WebErr © (2004-05-07 18:40) [2]
asm
xor Ch, x
end;
← →
WebErr © (2004-05-07 18:41) [3]Вернее, с учётом [1]:
asm
xor SomeValue, SomeCount
end;
← →
ASMiD © (2004-05-07 18:42) [4]
> WebErr ©
> asm
> xor Ch, x
> end;
Я от тебя такого не ожидал!
← →
WebErr © (2004-05-07 18:49) [5]
> ASMiD © (07.05.04 18:42) [4]
Я привык ещё с Сишных времён различать регистры в коде, поэтому анализ кода в языках с встроенным пофигизмом как Pascal и Assembler. ^^
← →
div © (2004-05-07 18:51) [6]вообще asm тут и не нужен ))) и Ch тоже... )
кстати где твое i: Integer ? )))
procedure TForm1.Button1Click(Sender: TObject);
var
s,
d: string[100];
x: byte;
i: Integer;
begin
s := Edit1.Text;
for x := 1 to 20 do
begin
for i := 1 to Length(S) do
D[i] := chr(byte(s[i]) xor x);
RichEdit1.Lines.Add(D);
end;
← →
Dll (2004-05-07 18:52) [7]Спасибо, ASMiD. Я и не заметил, что это тоже регистр :) Но появилась другая проблемка - появляется ошибка в строке RichEdit1.Lines.Add(D). С чем это может быть связано?
← →
ASMiD © (2004-05-07 18:53) [8]Извини за грубость.
Это я узнал еще в паскале, а сейчас может и нигде не пишут.
← →
div © (2004-05-07 18:57) [9]и нафиг string[100]?
s, d: string; - и фсе)
← →
ASMiD © (2004-05-07 18:58) [10]А на него все свойства правильно заданы?
← →
Dll (2004-05-07 19:00) [11]>и нафиг string[100]?
>s, d: string; - и фсе)
Если написать s, d: string, то ошибка появляется еще в строке D[i]:=chr(crr). Но почему?
← →
Anatoly Podgoretsky © (2004-05-07 19:01) [12]Обращение к невыделенной памяти D[i]
← →
div © (2004-05-07 19:02) [13]разве что сделать еще вот так:
...
s := Edit1.Text;
SetLength(d, Length(s);
...
извиняюсь )
← →
Dll (2004-05-07 19:03) [14]Все свойсва RichEdit пока по умолчанию.
← →
Dll (2004-05-07 19:09) [15]Все, спасибо большое. Действительно не хватало SetLength(d, Length(s)). Наверно, я еще сильно ламоват :)
← →
ASMiD © (2004-05-07 19:21) [16]Вообще-то это странно.
Я написал то же самое и прошло безо всяких SetLength.var
s:string[100];
begin
s:=Edit1.Text;
RichEdit1.Lines.Add(s);
end;
← →
Alex Konshin © (2004-05-07 20:42) [17]Ты еще больше удивишься, но с s: string это тоже сработает.
Все-таки почитай про тип String.
Страницы: 1 вся ветка
Текущий архив: 2004.05.23;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.038 c