ГЛАСНЫЕ В КОРНЯХ С ЧЕРЕДОВАНИЕМ
по дисциплине «Организация ЭВМ» Тема:«Ввод чисел. Перевод чисел в различные системы счисления»
Выполнил: студент гр. ВТ-31 Горбунов И.М. Проверил: Аленин А.А.
Димитровград, 2014 Задание на выполнение лабораторной работы Разработать программу перевода чисел из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную. Числа должны вводиться в десятичной системе счисления, а выводятся – в двоичной, восьмеричной и шестнадцатеричной.
Выполнение лабораторной работы Ввод числовой информации. Ввод числовой информации в ассемблерную программу обычно осуществляется в два этапа:
Для разработки алгоритма перевода введенной строки в число проанализируем структуру числа в позиционной системе счисления (в такой системе счисления вес цифры определяется ее местоположением в числе): 2398=2*1000+3*100+9*10+8=2*103+3*102+9*101+8*100 Таким образом, для перевода строки в число из введенной строки «2398» необходимо последовательно выделять цифры и производить суммирование произведений этих цифр и множителей соответствующих позиции цифры в числе. Если буфер для ввода строки был организован, например, следующим образом: BUF 05,00,05 DUP (?) то после ввода строки «2398» он будет выглядеть (в шестнадцатеричной системе счисления) так: 05,04,32,33,39,38,0d где первый байт – размер буфера, второй – количество введенных символов (без завершающего символа CR), третий, четвертый, пятый, шестой и седьмой – коды символов «2», «3», «9», «8» и «CR» соответственно. Легко заметить, что для того чтобы из кода цифры получить саму цифру необходимо из соответствующего кода вычесть 30h (шестнадцатеричный код нуля). Затем, последовательно в цикле (второй байт – количество введенных символов) выбирая цифры, формировать соответствующий множитель, вычислять произведение и производить суммирование. Нижеследующий фрагмент программы иллюстрирует описанный алгоритм (символы рассматриваются справа налево). ;Ввод числа в виде строки MOV AH,0AH;в AH номер функции LEA DX,BUF;DS:DX адрес буфера для ввода INT 21H ;Перевод строки в число, результат в DI MOV DI,0 LEA BX,BUF+1;в BX адрес второго элемента буфера MOV CX,[BX];в CX количество введенных символов XOR CH,CH MOV SI,1;в SI множитель MET: PUSH SI;сохраняем SI (множитель) в стеке MOV SI,CX;в SI помещаем номер текущего символа MOV AX,[BX+SI];в AX помещаем текущий символ XOR AH,AH POP SI;извлекаем множитель (SI)из стека SUB AX,30H;получаем из символа (AX) цифру MUL SI;умножаем цифру (AX)на множитель (SI) ADD DI,AX;складываем с результирующим числом MOV AX,SI;помещаем множитель (SI) в AX MOV DX,10 MUL DX;увеличиваем множитель (AX) в 10 раз MOV SI,AX;перемещаем множитель (AX) назад в SI LOOP MET;переходим к предыдущему символу Перевод чисел в различные системы счисления. В большинстве случаев перевод из одной системы счисления в другую осуществляется последовательным делением, в нашем случае, при переводе из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную алгоритм можно значительно упростить, заменив деление сдвигом. Перевод из десятичной системы счисления в двоичную осуществляется последовательными сдвигами на один бит вправо. Таким образом, значение очередного бита можно вычислить, проанализировав флаг переноса CF (если CF=1 то анализируемый бит был равен 1, и если CF=0, то анализируемый бит – 0). Перевод из десятичной системы счисления в восьмеричную осуществляется последовательными сдвигами на три бита вправо. После очередного сдвига все биты кроме трех младших обнуляются (например, наложением маски командой AND). Таким образом, в регистре получается восьмеричная цифра, для получения ее символьного отображения к значению в регистре необходимо прибавить код нуля (30h). Перевод из десятичной системы счисления в шестнадцатеричную осуществляется последовательными сдвигами на четыре бита вправо. После обнуления всех битов кроме четырех младших в регистре получается десятичный эквивалент шестнадцатеричной цифры (число от 0 до 15). Для его представления в шестнадцатеричной символьной форме необходимо организовать таблицу соответствия, которая в простейшем случае представляет собой следующую строку «0123456789ABCDEF». При перекодировании значение десятичного эквивалента используется как смещение в таблице относительно ее начала (перекодировка может осуществляться при помощи команды XLAT).
Рисунок 1 – контрольный пример для лабораторной работы №4
ГЛАСНЫЕ В КОРНЯХ С ЧЕРЕДОВАНИЕМ Встречаются однокоренные слова, в корне которых пишутся разные гласные. Это и есть корни с чередованием. Нужно хорошо запомнить, что «написание букв на месте безударных гласных в этих корнях не соответствует общему правилу, а подчиняется традиции». При написании гласной в этих корнях мы будем пользоваться особыми правилами. Эти правила можно объединить в 4 группы.
|