есть программа,но нужно объяснить её по каждой строкке....если кто может помочь,плиз помогите intel_syntax noprefix global my_strcat type my_strcat,@ function my_strcat mov edx,[esp+4] find_end: mov al,BYTE PTR[edx] inc edx cmp al,0 jne find_end prepare: mov ecx,edx mov edx,[esp+8] copy: mov al,BYTE PTR[edx] inc edx mov BYTE PTR[ecx-1],al inc ecx cmp al,0 jne copy exit: mov eax,[esp+4] ret
IMHO Код (Text): Сам не знаю чей это синтаксис. intel_syntax noprefix global my_strcat type my_strcat,@ function ;Что-то очень похожее на объявление функции(процедуры, под программы) my_strcat ;Функция добавляет к строке другую строку. mov edx,[esp+4] ;Первый параметр переданый в функию. Указатель на ASCIIZ строку. ;<Поиск конца строки(нуля). find_end: mov al,BYTE PTR[edx] ;Читаем символ из памяти по адресу заданому в edx inc edx ;Увеличиваем на 1 edx. Переходим к следующему символу cmp al,0 ;Проверим на признак конца строки(ноль). jne find_end ;Если не конец переходим к началу поиска ;> prepare: mov ecx,edx ;В ecx запишем адрес байта следующего после ASCIIZ строки(НУЛЯ). mov edx,[esp+8] ;Второй параметр переданый в функию. Указатель на ASCIIZ строку. ;<Собственно добавление строки copy: mov al,BYTE PTR[edx] ;Читаем символ со строки которую нужно добавить inc edx ;Увеличиваем на 1 edx. Переходим к следующему символу, откуда читать mov BYTE PTR[ecx-1],al ;Добавим символ в строку. [ecx-1] потому, что у нас в ecx на 1 больше. inc ecx ;Увеличиваем на 1 ecx. Переходим к следующему символу, куда писать cmp al,0 ;Проверка на конец второй строки jne copy ;Если не конец переходим к началу добавления строки ;> exit: mov eax,[esp+4] ;Вернем указатель на начало строки. ASCIIZ_1 + ASCIIZ_2 ret ;Выход из функции (процедуры, под программы)
Mikl___ & OxBADC0DE & Clerk Причем тут tasm/masm? Обратите внимание на "intel_syntax noprefix". Что касается BYTE PTR'а, то он вообще не нужен, ибо один из операторов - байтовый регистр. ni11 Букварь по ассемблеру в руки.
q_q Опкод то и там и там одинаковый, но вот один компилятор скомпилет, другой будет ругатсо, вот и при том выбор.
Clerk Bla-bla ptr нужна компилятору в тех командах, в которых он не может определить размер операндов, например Код (Text): mov byte ptr [ebx],0 В коде #1 все предельно ясно.
GAS это. BYTE PTR это часть синтаксиса Intel. По крайней мере в gcc 3.x и gas от него есть поддержка ассемблера с синтаксисом Intel.