Форум: "Прочее";
Текущий архив: 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