Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Invalid combination of opcode and operands


Автор: Bogdan1024 19.4.2007, 21:30
Пишу это в паскале
Код

var b:array[0..3] of byte;
var a:byte;
begin
  b[0] := 1;
  b[1] := 2;
  asm
    mov al, b[0]
    add al, b[1]
    mov a, al
  end;
  writeln(a);
end.

Не компилируется, пишет сабж. Почему? Ведь и там и там байт!

Автор: cardinal 19.4.2007, 21:37
А так проходит
Код

mov al, b

Точно не помню но может быть ошибка в квадратных скобках, для ассемблера можеть быть другой синтаксис...

Автор: Bogdan1024 19.4.2007, 21:48
Не, так тоже не проходит. В дэлфи, кстати, говорит, что у операндов разный размер (operand size doesn't match). Я ax подставлял, тоже не подходит.

Автор: anwe 19.4.2007, 22:39
Bogdan1024, пиши
Код

mov al, byte ptr b[0]

Надо явно указывать, ведь по сути b - это массив из 4-х байт то есть двойное слово. Это можно проверить так:
Код

mov eax, b

Ошибку не выдает. smile 

Автор: cardinal 19.4.2007, 23:06
Цитата(cardinal @  19.4.2007,  19:37 Найти цитируемый пост)
для ассемблера можеть быть другой синтаксис...

Код

mov al, byte ptr b[0]

Ну в прицнипе это я и имел в виду. Открой любую книгу, там будет пример с обращением к массиву...

Автор: Bogdan1024 20.4.2007, 21:24
Спасибо! А можно ещё оказывается так:
Код

mov si, offset k
mov ax, [si+что-то там]

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)