Как создать цикл с помощью сборки x86 для печати строк звездочек из введенных значений?
Мне удалось напечатать ряд звезд, но когда я пытаюсь напечатать другую строку из нового значения, она создает бесконечный цикл. Он останавливается на 0. Я хочу использовать сборку x86 и использую visual studio.
пример
вход:
1
5
8
0
выход:
*
*****
********
Что я уже пробовал:
код #include "файл stdafx.ч"
#include <stdlib.h>
void printChar(char c);
void printStr(char *strAddr);
void printInt(int someInt);
int numItems; //номер товара
int *items; // указатель на элементы
int anItem; //будет соответствовать количеству видимых звездочек
int wmain(int argc, _TCHAR* argv[])
{
items = (int *)malloc(1000);
numItems = 0;
делать
{
printf("введите элемент %d (0 означает конец данных): ", numItems + 1);
scanf("%d", &anItem);
предметы[numItems] = элемент;
numItems++;
} while (anItem != 0); //для ввода и чтения данных
_ассемблер
{
позвоните в printNewLine
мову Эси [предметы] //Эси указывает на начало 'numItems' ('элементы' указывает на адрес 'numItems')
mainLoop: mov eax, [esi] //eax имеет адрес памяти 'numItems'
мова [элемент], еах //памяти адрес 'элемент' имеет адрес памяти 'numItems'
mov eax, 0
starLoop: push eax //eax first in stack
мов ал, '*'
нажми ал
вызов printChar //печатает один *
pop eax //eax из стека
inc eax //eax увеличивается на 1
СМР еах, [элемент] //значение регистра eax по сравнению с 'элемент'
одна starLoop //если значение не равно значению 'элемент', starLoop опять начинается
отделка jmp
printNewLine:
нажмите '\r' // две строки, чтобы напечатать символ.
вызовите printChar
нажмите '\n' // две строки, чтобы напечатать еще один символ.
вызовите printChar
ret // и обратно в <откуда бы мы ни пришли>
finish : // ничего не делать
}
printf("нажмите enter, чтобы выйти\n");
char dummy[10]; //на всякий случай несколько ключей в буфере
scanf("%c", манекен); //пауза.
scanf("%c", dummy); //снова пауза.
}
void printChar(char c)
{
printf("%c", c); //%c означает как символ
}
void printStr(char *strAddr)
{
printf("%s", strAddr);
}
void printInt(int someInt)
{
printf("%d", someInt);
}
Richard MacCutchan
Вы только что создали новую учетную запись, чтобы повторить то, что вы уже опубликовали пару дней назад? и мы дали вам достаточно предложений, чтобы решить эту проблему. Главное предложение состоит в том, чтобы перестать использовать ассемблер и придерживаться C. Как только вы станете экспертом по си, Вы можете попробовать переключиться на ассемблер.
[no name]
Глупый комментарий "перестань использовать ассемблер и придерживайся языка Си"!
В мире есть люди, которые любят учиться....
Richard MacCutchan
Если у вас нет ничего полезного, чтобы добавить, то, пожалуйста, не заполняйте форумы глупыми комментариями.
[no name]
Тебе того же
Richard MacCutchan
Пожалуйста, либо повзрослей, либо найди какой-нибудь другой форум, чтобы досаждать людям.
[no name]
сухой
[no name]
Я знаю, как это делается в Си. Весь смысл этого заключался в том, чтобы изучить его в сборке x86. Прости, если я чем-то расстроил тебя. Это никогда не входило в мои намерения. Все, что мне было нужно, - это немного помощи, так как я уже испробовал много способов. Еще раз извини, если я сделал что-то не так.
Richard MacCutchan
Ну, несмотря на количество предложений, которые мы вам предоставили, вы все еще, кажется, не продвинулись дальше, чем в первый раз, когда вы опубликовали этот вопрос.
[no name]
Потому что я получил совет сделать это на языке Си и код на языке С. Я упомянул об этом более ясно в следующий раз, когда спросил (я хочу, чтобы это было в сборке), потому что я предположил, что не был ясен. Я не думал о последствиях этого - о том, что мои вопросы будут удалены, прежде чем я смогу даже получить решение, связанное с моей проблемой. Прости, что доставил тебе столько хлопот, когда ты просто помогал. К сожалению, это было не то, что я искал.
Richard MacCutchan
Хорошо, но вы смешиваете очень небольшое количество ассемблерного кода с большим количеством C. чего именно вы пытаетесь достичь?
Никто не пытается бороться с вами, мы просто пытаемся дать совет, чтобы помочь вам исправить ваш код. Но эти форумы-не самое лучшее место для изучения программирования в первую очередь. Есть много учебных пособий и руководств, которые можно найти в поиске google, что было бы более полезным для вас.
[no name]
Я действительно пришел сюда не для того, чтобы ссориться. Было бы полезно, если бы вы попробовали то же самое (похоже, что и вы с моей точки зрения).