Текущий архив: 2004.04.04;
Скачать: CL | DM;
Вниз
В чем разница? Найти похожие ветки
← →
dmk © (2004-03-17 21:45) [0]mov edx, [eax].FPlanes
и
mov edx, eax.FPlanes
Оба варианта компилятор воспринимает нормально.
Subj
← →
Cobalt © (2004-03-17 21:56) [1]Осталось только взглянуть в View\Debug Windows\CPU
И увидеть разницу.
← →
dmk © (2004-03-17 22:49) [2]Никакой разницы не заметил.
← →
Andy BitOff © (2004-03-17 23:19) [3]Никакой разницы нет, во всяком случае для дельфи, но принято (с незапамятных времен) писать mov edx, [eax.FPlanes], что в тексте сразу читается как, edx ИЗ ...
← →
Andy BitOff © (2004-03-17 23:21) [4]А вот при записи mov dl,byte ptr [eax.FPlanes] скопки обязательны. Или dx,word ptr [eax.FPlanes]
← →
Defunct © (2004-03-17 23:52) [5]dmk © (17.03.04 21:45)
Смысл [eax] такой: ячейка памяти по адресу, записанному в EAX
Когда вы пишете EAX.FieldX, компилятор автоматически распознает, что речь идет о ячейке памяти, так как в процессоре нет никаких полей прикрепленных к регистру EAX, и автоматически подствляет []
Впринципе, когда вы работаете с какими-то заранее известными для компилятора елементами, например, компилятор точно знает, что речь идет о регистре или и ячейке памяти или о поле объекта и известен точный размер хотябы одного из операндов, то компилятор такую конструкцию пропустит.
Например.Var S:ShortString
Mov EAX,S
Компилятор точно знает, что S это область памяти, и точно знает, что разрядность регистра EAX - 32бита, отсюда вам сразу формирутся такая команда:MOV EAX, Dword Ptr DS:[Offset S]
Согласитесь компилятор нам здорово помогает. Но нужно точно понимать, что происходит, иначе можно получить серьезные глюки.
Например, даже в приведенном примере, ведь не вся строка попадет в EAX.
← →
dmk © (2004-03-18 00:25) [6]Спасибо за разъяснение.
← →
Defunct © (2004-03-18 00:46) [7]Andy BitOff ©
Позвольте с вами не согласиться, длинна данных компилятору известна.mov dl,byte ptr [eax.FPlanes]
вполне можно записать как:Mov DL, EAX.FPlanes
Компилятор доподлино знает, что копируется 1 байт.
← →
Andy BitOff © (2004-03-18 01:33) [8]> Defunct ©
Да =) Я потом специально проверил. Согласен. Просто привычка, вторая натура. Как привык, так и не думая и пишешь, хотя, опять же хороший стиль (может я консервативен? =).
Хотя это до сих пор верно для Tasm"а.
← →
Defunct © (2004-03-18 01:52) [9]Andy BitOff © (18.03.04 01:33) [8]
> Как привык, так и не думая и пишешь, хотя, опять же хороший стиль (может я консервативен? =).
Привычка у вас полезная, позволяет избежать многих неявных ошибок. Но вот пример ситуации когда <Тип> Ptr [адрес] обязателен, был выбран немного неудачно.
Вот пример ситуации когда нужно указывать и длинну и скобочки обязательно:Mov Word Ptr [ebp+55], 8Fh
В этой команде компилятор ну никак не сможет установить размер данных, если ее записать так:Mov [ebp+55], 8Fh
; ОШИБКАMov ebp+55, 8Fh
; А это уже полный бред
Так что как видите есть моменты, где без <Тип> Ptr [] ну никак не обойтись.
Страницы: 1 вся ветка
Текущий архив: 2004.04.04;
Скачать: CL | DM;
Память: 0.49 MB
Время: 0.029 c