Задать вопрос

Как получить элемент символьного массива в ассемблере?

Есть код, приведенный ниже. Хочу подсчитать количество скобок "(" и ")". И вроде бы всё нормально, но в этой строке
mov cl, [eax + esi];//помещаем значение А[esi] в cl

ничего хорошего в cl не перемещается, каждый раз новая ерунда. А мне нужно в cl поместить значение в массиве A с индексом esi, чтобы потом сравнить его с кодом скобок(ведь 28h и 29h это коды скобок?)
В конец уже запутался, что делаю не так? помогите.

char *A = new char[100];
	strcpy(A, "1+2*(3-4)+(5*(6+7)-9)");
	char left = 0, right = 0;
	_asm{
	mov eax, A; //адрес А в eax


	mov esi, 0; //счетчик в 0
	mov al, 0;  //тут будем считать "(", код 28h
	mov ah, 0;  //а тут считать ")", код 29h
newiter:
	
	mov cl, [eax + esi];//помещаем значение А[esi] в cl ВОТ ТУТ ПРОБЛЕМА!!!
					 
					 
	cmp cl, 28h//сравниваем
	je m1;//если равны, то в m1
	cmp cl, 29h//сравниваем
	je m2;//если равны, то в m2
	cmp cl, 29h//снова сравниваем
	jne m3;//если не равны, то в m3


m1: 
	inc al;
	inc esi;
	cmp esi, 21;
	jne newiter;
m2:
	inc ah;
	inc esi;
	cmp esi, 21;
	jne newiter;
m3:
	inc esi;
	cmp esi, 21;
	jne newiter;

	mov left, al;
	mov right, ah;
				 }
  • Вопрос задан
  • 2398 просмотров
Подписаться 3 Оценить 1 комментарий
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вопрос на засыпку - а не связаны ли между собой регистры AL, AH и EAX?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы