Программа Assembly 8086: Подсчет символов - PullRequest
0 голосов
/ 10 декабря 2011

Мне нужна помощь в написании программы, которая должна подсчитывать количество раз, когда буква появляется (в верхнем или нижнем регистре) в строке.Вы можете жестко закодировать строку или прочитать ее из консоли.Ваша программа должна отображать окончательный счетчик для каждой буквы алфавита.

Пример

Ввод:

«Остерегайтесь ошибок ввышеуказанный код;Я только доказал это правильно, не попробовал это.ŒДональд Кнут ”

Выход:

A: 4, B: 3, C: 3, D: 5, E: 9, F: 1, G:1, Н: 3, I: 5, J: 0, К: 1, л: 2, М: 0, N 5, O: 8, Р: 1, Q: 0, Р: 5, S 1,T: 7, U: 2, V: 3, W: 1, X: 0, Y: 1, Z: 0

Я думаю, что знаю структуру, но так как у меня нет 26регистры для работы, я должен был бы хранить значение для каждой увеличенной буквы в своем собственном сегменте памяти.Как мне подойти к этому.Спасибо.

Ответы [ 2 ]

1 голос
/ 10 декабря 2011

Учтите, что вы можете заблокировать кусок памяти и назначить определенное количество байтов для каждого числа.Затем, чтобы добраться до конкретной буквы, используйте целочисленное значение буквы, умноженное на длину ячейки.

Например, если вы выбрали четыре байта (типичная целочисленная длина) для каждой ячейки, вы отложите 4 * 256 байтов и добавите в нее что-то вроде $ STARTOFARRAY + (4 * 97), иувеличить это целое число.

0 голосов
/ 10 декабря 2011

Выделите блок памяти, достаточно большой, чтобы вместить 26 элементов (каждый элемент может составлять 1 байт, 2 байта, 4 байта или столько, сколько вам нужно). Простой способ - создать этот блок памяти в разделе .bss, используя db / dw / dd. Каждый элемент в этом блоке будет соответствовать букве алфавита.

Теперь, когда у вас есть блок памяти, вам нужен какой-то способ индексации в нем. Здесь у вас есть две альтернативы:

  • Если символ находится в диапазоне ['A', 'Z'], вычтите 'A', чтобы получить индекс, если символ находится в диапазоне ['a', 'z'], вычтите 'a', чтобы получить индекс, в противном случае игнорируйте символ .

  • Преобразование прописных букв в строчные или наоборот. Если вы посмотрите на таблицу ASCII , вы увидите, что строчные буквы имеют большее значение, чем заглавные буквы. Оттуда вы сможете понять, как преобразовать символ в нижний регистр. Если у вас есть строчный символ, вычтите из него 'a', чтобы получить индекс.

Получив индекс, используйте его в своем блоке памяти, добавляя индекс, умноженный на размер каждого элемента, к адресу начала блока. Когда у вас есть адрес этого элемента, inc оставьте его.

Повторяйте, пока все символы не будут прочитаны, а затем напечатайте результат. Если вам нужно написать функцию печати самостоятельно, обратите внимание, что она становится немного менее тривиальной для вывода чисел с более чем одной цифрой. Больше не нужно добавлять '0', чтобы получить ASCII-эквивалент этого числа для его печати. ​​

...