Официальный сайт студ.городка НГТУ
Программирование и БД » использование ассемблерных вставок 

#1  12.01.11 20:08

использование ассемблерных вставок

обьясните ктонить программу:

char *asmfunc(char *S, char c)
{
char *r = 0;

L0:
asm { 
  mov SI,S;
  mov DL,c;
}

L1:
asm {
  mov AL,0;
  add AL,[SI];
  je L3;
  xor AL,DL;
  je L2;

  add SI,1;
  jmp L1;
}

L2:
asm mov r,SI;

L3:
return r;
}

Offline

#2  12.01.11 23:23

$up
Профиль

Re: использование ассемблерных вставок

символ c ищется в строке S

Исправлено $up (12.01.11 23:28)

Offline

#3  12.01.11 23:23

Re: использование ассемблерных вставок

$up написал(а):

ксорится

?

Offline

#4  12.01.11 23:35

$up
Профиль

Re: использование ассемблерных вставок

xor это исключающее или (читается ксор)

je это условный переход если результат предыдущей операции равен 0
xor двух одинаковых символов даст 0. Конец строки даст при сложении 0, т.к. в си строка заканчивается нулём.

в si помещается указатель на начало строки S и начинаем продвигаться по строке, увеличивая si, пока не дойдём до конца строки или не встретим символ c

если символ не нашли возвращаем 0, если нашли то возвращаем указатель на этот символ в строке.

Исправлено $up (12.01.11 23:50)

Offline

#5  29.01.11 21:01

Re: использование ассемблерных вставок

подобные mov SI,S - это скопировать из S в SI, как в оригинале на ассемблере )

add SI,1 - сложить (без переноса) значение SI с единицей, то есть если это в двоичном виде, то например 00011000 плюс 1, равно 00011001. Но у тебя наверное целочисленные, тогда просто как +1.

Исправлено Tomahawk (29.01.11 21:07)

Offline

#6  11.04.11 13:25

Re: использование ассемблерных вставок

как смысл в программе этого выражения:

xor AL,DL;

Offline

#7  11.04.11 16:47

Re: использование ассемблерных вставок

Aguero написал(а):

как смысл в программе этого выражения:

xor AL,DL;

биты из регистра AL скрещиваются по XOR-у("исключающему или") с битами регистра DL, результат будет в AL

XOR( "исключающее или")
0 0 = 0
1 0 = 1
0 1 = 1
1 1 = 0

Offline

#8  12.04.11 19:44

Re: использование ассемблерных вставок

mov AL,0;
  add AL,[SI]
типа обнулили строку и движемся по элементам?))

зачем переменная r ?))

Offline

#9  13.04.11 12:20

$up
Профиль

Re: использование ассемблерных вставок

Aguero написал(а):

mov AL,0;
  add AL,[SI]
типа обнулили строку и движемся по элементам?))

нет, это подготовка регистра AL для сложения с символом строки.
чтобы в зависимости от результата сложения делать условный переход je L3;

Aguero написал(а):

зачем переменная r ?))

чтобы вернуть результат работы функции

Offline

#10  14.04.11 12:13

Re: использование ассемблерных вставок

AL, DL по 8 бит, а какой размер у SI ?

Offline

#11  14.04.11 12:25

Re: использование ассемблерных вставок

add AL,[SI]  записываем в AL элемент, на который ссылается указатель?)

je L3 - переходим к L3, если конец массива, а почему именно в L3?)

Исправлено Aguero (14.04.11 12:27)

Offline

#12  14.04.11 13:44

$up
Профиль

Re: использование ассемблерных вставок

Aguero написал(а):

какой размер у SI

16

Aguero написал(а):

переходим к L3, если конец массива, а почему именно в L3?)

чтобы  в r ничего не записалось

Offline

#13  14.04.11 13:49

Re: использование ассемблерных вставок

$up, а можешь помочь с вопросом:
Какое максимальное количество оперативной памяти доступно процессорам семейства Intel x86 при работе в реальном режиме?

Offline

#14  14.04.11 15:40

$up
Профиль

Re: использование ассемблерных вставок

1 мегабайт, 20 бит адрес

Offline

#15  14.04.11 16:16

Re: использование ассемблерных вставок

$up написал(а):

1 мегабайт, 20 бит адрес

почему?.....

Offline

#16  15.04.11 10:48

$up
Профиль

Re: использование ассемблерных вставок

Aguero написал(а):

почему?.....

as designed...

Offline

Программирование и БД » использование ассемблерных вставок 

ФутЕр:)

© Hostel Web Group, 2002-2025.   Сообщить об ошибке

Сгенерировано за 0.031 сек.
Выполнено 11 запросов.