Округлить элемент массива до целого - Assembler
Формулировка задачи:
Здравствуйте господа! Требуется помощь начинающему. Задан массив дробных чисел, нужно округлить каждый элемент до целого.
Решение задачи: «Округлить элемент массива до целого»
textual
Листинг программы
.model small .stack 100h .data mas1 db 30 dup (0) ;massive msg1 db 10,13,"Аrray:",10,13,"$" Press db 10,13,"Press any key...$" .code start: mov ax,@data mov ds,ax ; input massive mov cx,30 mov si,0 input: mov ah,01h mov al,00h int 21h sub al,30h mov [mas1+si],al add si,1 loop input ;-- ; output massive lea dx,msg1 mov ah,09h int 21h mov cx,30 mov si,0 put1: mov ah,02h mov dl,[mas1+si] add dl,30h int 21h add si,1 loop put1 ;-- ; waiting lea dx,Press mov ah,09h int 21h mov ah,00h int 16h ;-- ;vihod iz programmi mov ax,4c00h int 21h ;-- end start
Объяснение кода листинга программы
Список элементов кода:
- .model small - описание сегментной модели памяти, используемой в программе.
- .stack 100h - определение стека подкачки размером в 100 байт.
- .data - сегмент данных, в котором будут храниться переменные и строки.
- mas1 db 30 dup (0) - описание массива на 30 элементов, каждый из которых будет содержать целое число.
- msg1 db 10,13,
Аrray:
,10,13,$
- определение строки, которая будет выводиться на экран при запуске программы. - Press db 10,13,
Press any key...$
- определение строки, которая будет выводиться на экран при нажатии клавиши. - .code - начало сегмента кода.
- start: - точка входа в программу.
- mov ax,@data - загрузка сегмента данных в регистр AX.
- mov ds,ax - установка сегмента данных в качестве текущего сегмента.
- mov cx,30 - инициализация счётчика цикла.
- mov si,0 - инициализация индекса для работы с массивом.
- input: - начало цикла для ввода элементов массива.
- mov ah,01h - подготовка к вводу символа.
- mov al,00h - инициализация регистра AX для ввода цифры.
- int 21h - ввод символа.
- sub al,30h - преобразование введенного символа в числовое значение.
- mov [mas1+si],al - запись полученного числа в массив.
- add si,1 - увеличение индекса для следующего элемента массива.
- loop input - переход к следующей итерации цикла.
- lea dx,msg1 - подготовка вывода строки на экран.
- mov ah,09h - подготовка к выводу строки на экран.
- int 21h - вывод строки на экран.
- mov cx,30 - инициализация счётчика цикла.
- mov si,0 - инициализация индекса для работы с массивом.
- put1: - начало цикла для вывода элементов массива.
- mov ah,02h - подготовка к выводу символа.
- mov dl,[mas1+si] - получение значения элемента массива.
- add dl,30h - преобразование числа в символ и добавление символа
а
для положительных чисел. - int 21h - вывод символа на экран.
- add si,1 - увеличение индекса для следующего элемента массива.
- loop put1 - переход к следующей итерации цикла.
- lea dx,Press - подготовка вывода строки на экран.
- mov ah,09h - подготовка к выводу строки на экран.
- int 21h - вывод строки на экран.
- mov ah,00h - подготовка к чтению нажатия клавиши.
- int 16h - чтение нажатия клавиши.
- mov ax,4c00h - завершение работы программы.
- int 21h - выход из программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д