Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.05.25;
Скачать: CL | DM;

Вниз

Ассемблер   Найти похожие ветки 

 
Игорь М.   (2008-04-09 09:37) [0]

Если есть тут специалисты в Ассемблере, то скажите плиз. Каким оператором нужно сравнивать два значения ?


 
@!!ex ©   (2008-04-09 09:40) [1]

> [0] Игорь М.   (09.04.08 09:37)

Каких значения?


 
Rouse_ ©   (2008-04-09 09:41) [2]

cmp


 
@!!ex ©   (2008-04-09 09:44) [3]

> [2] Rouse_ ©   (09.04.08 09:41)

Это не подходит для строк и векторов.


 
Rouse_ ©   (2008-04-09 09:48) [4]


> Это не подходит для строк и векторов.

Почему?


 
@!!ex ©   (2008-04-09 09:52) [5]

> [4] Rouse_ ©   (09.04.08 09:48)

А как ей сравнивать вектора и строки?
Перебирать каждое значение и сравнивать по отдельности?


 
clickmaker ©   (2008-04-09 09:53) [6]


> [3] @!!ex ©   (09.04.08 09:44)

а как выглядит на ассемблере строка или вектор?


 
Simpson   (2008-04-09 09:53) [7]

Borland C++ 4.5 вот так думает.
.286p
ifndef ??version
?debug macro
endm
publicdll macro name
public name
endm
$comm macro name,dist,size,count
comm dist name:BYTE:count*size
endm
else
$comm macro name,dist,size,count
comm dist name[size]:BYTE:count
endm
endif
?debug V 301h
?debug S "noname00.cpp"
?debug C E99C6689380C6E6F6E616D6530302E637070
_TEXT segment byte public "CODE"
_TEXT ends
DGROUP group _DATA,_BSS
assume cs:_TEXT,ds:DGROUP
_DATA segment word public "DATA"
d@ label byte
d@w label word
_DATA ends
_BSS segment word public "BSS"
b@ label byte
b@w label word
_BSS ends
_TEXT segment byte public "CODE"
  ;
  ; int main(){
  ;
assume cs:_TEXT,ds:DGROUP
_main proc near
push bp
mov bp,sp
  ;
  ; int i=3,ii=4;
  ;
mov dx,3
mov bx,4
  ;
  ;   if(i > ii)
  ;
cmp dx,bx
jle short @1@86
  ;
  ;   ii = i;
  ;
mov bx,dx
@1@86:
  ;
  ; return 0;
  ;
xor ax,ax
pop bp
ret
  ;
  ; }
  ;
pop bp
ret
_main endp
?debug C E9
?debug C FA00000000
_TEXT ends
_DATA segment word public "DATA"
s@ label byte
_DATA ends
_TEXT segment byte public "CODE"
_TEXT ends
_s@ equ s@
public _main
end



 
@!!ex ©   (2008-04-09 09:54) [8]

> [6] clickmaker ©   (09.04.08 09:53)

Как последовательность байт. :)


 
KSergey ©   (2008-04-09 09:57) [9]

> @!!ex ©   (09.04.08 09:52) [5]
> А как ей сравнивать вектора и строки?
> Перебирать каждое значение и сравнивать по отдельности?

А это можно сделать как-то иначе? :)

Правда, я не спец в ассемблере современных x86, может тама есть готовые команды дял этого, наравне с командами пакетной обработки последовательности байт...


 
clickmaker ©   (2008-04-09 09:57) [10]


> [8] @!!ex ©   (09.04.08 09:54)

ну cmpsw, cmpsd для ускорения
но все равно же cmp )


 
Сергей М. ©   (2008-04-09 10:02) [11]


> cmp


cmp - это ж не оператор, а мнемоника машинструкции времени выполнения

Мож автор имел ввиду оператор (например, макропроцессора) времени компиляции ?)


 
@!!ex ©   (2008-04-09 10:07) [12]

> [9] KSergey ©   (09.04.08 09:57)

Команды для сравнения строк есть уже лет 20. :))
SSE для сравнени векторов - поменьше. Лет 10.


> [10] clickmaker ©   (09.04.08 09:57)

Ну на самом деле, просто настроение побуквоедствовать было. :)


 
Anatoly Podgoretsky ©   (2008-04-09 16:36) [13]

> @!!ex  (09.04.2008 09:44:03)  [3]

А ты разве про строки и вектора спрашивал, я внимательно прочитал вопрос, ты спрашивал про сравнение.
Но после ответа мог бы включить голову и посмотреть справку по CMP и рядом бы обнаружил еще несколько, в том числе и для строк (в понятии ассемблера).


 
Anatoly Podgoretsky ©   (2008-04-09 16:37) [14]

> @!!ex  (09.04.2008 09:52:05)  [5]

Если хочешь хорошее быстродействие, то именно так. Посмотри код в Дельфи, для оптимизации можно сравнивать по 4 символа за раз, если нет каких либо противопоказаний.


 
Anatoly Podgoretsky ©   (2008-04-09 16:37) [15]

> clickmaker  (09.04.2008 09:53:06)  [6]

> а как выглядит на ассемблере строка или вектор?

DB .....


 
Anatoly Podgoretsky ©   (2008-04-09 16:39) [16]

> @!!ex  (09.04.2008 10:07:12)  [12]

А так ты нас испытывал?


 
@!!ex ©   (2008-04-09 17:22) [17]

> [14] Anatoly Podgoretsky ©   (09.04.08 16:37)

тоесть в цикле cmp будет работать быстрее чем cmpsw или pcmpEQb или CMPps
И зачем вообще придумали MMX и SSE, если операции быстрее делать перебором?


 
Sapersky   (2008-04-09 18:38) [18]

тоесть в цикле cmp будет работать быстрее чем cmpsw

http://www.fastcode.dk/fastcodeproject/fastcodeproject/60.htm

Для CompareMem наиболее быстрым оказался именно cmp в развёрнутом цикле. В BDS2006 эта версия включена вместо стандартной CompareMem на строковых CMPSD/CMPSB.
Хотя для какой-то специфичной обработки (не просто сравнения байт до первого отличия) может быть лучше и MMX/SSE.


 
Anatoly Podgoretsky ©   (2008-04-09 22:09) [19]

> @!!ex  (09.04.2008 17:22:17)  [17]

Я тоже в свое время удивился, когда переходил с 486 на Пентиум.
Агрегатные функции резко снижают производительность.
У меня на сайте есть две статьи по BASM прочитай, наверно почерпнешь полезное для себя.



Страницы: 1 вся ветка

Текущий архив: 2008.05.25;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.018 c
15-1207911636
Виталий
2008-04-11 15:00
2008.05.25
DracDrop и TlistView


4-1188981076
dzr_gregory
2007-09-05 12:31
2008.05.25
Windows 2003 сервер терминалов и Delphi


2-1209358089
молодой
2008-04-28 08:48
2008.05.25
вопрос доступа


2-1209029866
deras
2008-04-24 13:37
2008.05.25
Как добавить элемент в DBLookupComboBox?


2-1209551617
Vlad Oshin
2008-04-30 14:33
2008.05.25
tTreeView, помогите с датами в узлах