Округлить элемент массива до целого - 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

Объяснение кода листинга программы

Список элементов кода:

  1. .model small - описание сегментной модели памяти, используемой в программе.
  2. .stack 100h - определение стека подкачки размером в 100 байт.
  3. .data - сегмент данных, в котором будут храниться переменные и строки.
  4. mas1 db 30 dup (0) - описание массива на 30 элементов, каждый из которых будет содержать целое число.
  5. msg1 db 10,13,Аrray:,10,13,$ - определение строки, которая будет выводиться на экран при запуске программы.
  6. Press db 10,13,Press any key...$ - определение строки, которая будет выводиться на экран при нажатии клавиши.
  7. .code - начало сегмента кода.
  8. start: - точка входа в программу.
  9. mov ax,@data - загрузка сегмента данных в регистр AX.
  10. mov ds,ax - установка сегмента данных в качестве текущего сегмента.
  11. mov cx,30 - инициализация счётчика цикла.
  12. mov si,0 - инициализация индекса для работы с массивом.
  13. input: - начало цикла для ввода элементов массива.
  14. mov ah,01h - подготовка к вводу символа.
  15. mov al,00h - инициализация регистра AX для ввода цифры.
  16. int 21h - ввод символа.
  17. sub al,30h - преобразование введенного символа в числовое значение.
  18. mov [mas1+si],al - запись полученного числа в массив.
  19. add si,1 - увеличение индекса для следующего элемента массива.
  20. loop input - переход к следующей итерации цикла.
  21. lea dx,msg1 - подготовка вывода строки на экран.
  22. mov ah,09h - подготовка к выводу строки на экран.
  23. int 21h - вывод строки на экран.
  24. mov cx,30 - инициализация счётчика цикла.
  25. mov si,0 - инициализация индекса для работы с массивом.
  26. put1: - начало цикла для вывода элементов массива.
  27. mov ah,02h - подготовка к выводу символа.
  28. mov dl,[mas1+si] - получение значения элемента массива.
  29. add dl,30h - преобразование числа в символ и добавление символа а для положительных чисел.
  30. int 21h - вывод символа на экран.
  31. add si,1 - увеличение индекса для следующего элемента массива.
  32. loop put1 - переход к следующей итерации цикла.
  33. lea dx,Press - подготовка вывода строки на экран.
  34. mov ah,09h - подготовка к выводу строки на экран.
  35. int 21h - вывод строки на экран.
  36. mov ah,00h - подготовка к чтению нажатия клавиши.
  37. int 16h - чтение нажатия клавиши.
  38. mov ax,4c00h - завершение работы программы.
  39. int 21h - выход из программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы