Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.05.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
Игорь М.   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.008 c
2-1208970958
dik
2008-04-23 21:15
2008.05.25
Редактирование рисунков кнопок


2-1209748683
Res
2008-05-02 21:18
2008.05.25
RegSetValueEx && REG_DWORD


15-1208028508
No_Dead
2008-04-12 23:28
2008.05.25
Почему бы «Журнал» не превратить в «доп. прочее»?


2-1209552720
Fr1K
2008-04-30 14:52
2008.05.25
Заваршение записи


2-1209063299
Артемка
2008-04-24 22:54
2008.05.25
mainmenu





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский