Вычислить значение выражения и записать в файл - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите. Вычислить значение выражения: c ) A * B + C * D d ) A / B + C / D Операции умножения и деления операндов выполнить с помощью подпрограммы. Переменные, входящие в уравнения вводятся с клавиатуры А=20, B=13, C=26, D=15 в формате hex. Программу оформить с запросами на ввод данных. Выполнить программу для не менее четырех значений A, B , C , D . Результаты ( в hex формате ) вместе с интерфейсом ввода записать в файл.

Решение задачи: «Вычислить значение выражения и записать в файл»

textual
Листинг программы
  1. org  100h
  2. jmp  start
  3.  
  4. mess    db  'Input A: 20',13,10      ;<--------------------+
  5.         db  'Input B: 13',13,10                           ;|
  6.         db  'Input C: 26',13,10                           ;|
  7.         db  'Input D: 15',13,10                           ;|
  8.         db  '----------------------',13,10                ;|
  9.         db  'A*B + C*D = 650 $'      ; данные на экране ---+
  10. fSize   =   80*6                     ; размер файла 6 строк
  11. fName   db  'screen.txt',0           ; имя файла
  12. buff    db  fSize dup(' ')           ; буфер для выходного файла
  13.  
  14. start:
  15.    mov   ax,3              ; видео/режим 80х25
  16.    int   10h
  17.    mov   ah,9
  18.    mov   dx,mess
  19.    int   21h
  20.  
  21. ; Сбрасываем видео/буфер в локальный буфер ------------------
  22.    push  ds                ;
  23.    push  0B800h            ;
  24.    pop   ds                ;
  25.    xor   si,si             ; DS:SI - источник
  26.    mov   di,buff           ; ES:DI - приёмник
  27.    mov   bx,6              ; кол-во повторов цикла (строк)
  28. save:                      ;
  29.    mov   cx,80             ; сохранять будем по 1 строке
  30. @@:                        ;
  31.    lodsw                   ; чтение с в/буфера атрибутом)
  32.    stosb                   ; запись в л/буфер (без атрибута)
  33.    loop  @b                ;
  34.    mov   ax,0A0Dh          ; после каждой строки,
  35.    stosw                   ;       ..вставляем CRLF
  36.    dec   bx                ; уменьшаем счётчик строк
  37.    jnz   save              ; мотаем цикл 6 раз..
  38.  
  39. ; Сохранение содержимого экрана в файл -----------------------
  40.    pop   ds                ;
  41.    mov   ah,3Ch            ; создать файл!
  42.    mov   dx,fName          ;
  43.    mov   cx,20h            ; режим R/W
  44.    int   21h               ;
  45.    mov   bx,ax             ; дескриптор в ВХ
  46.  
  47.    mov   ah,40h            ; запись!
  48.    mov   dx,buff           ;
  49.    mov   cx,fSize          ; кол-во байт
  50.    int   21h               ;
  51.  
  52.    mov   ah,3Eh            ; закрыть!
  53.    int   21h               ;
  54.  
  55. exit:
  56.    xor   ax, ax
  57.    int   16h
  58.    int   20h

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

  1. Переменная fSize инициализируется значением 80*6, что означает размер файла в 6 строк по 80 символов в строке.
  2. Переменная fName содержит имя файла screen.txt.
  3. Переменная buff инициализируется как буфер размером 80*6, заполненный пробелами.
  4. Код переходит к метке start, которая является точкой входа в программу.
  5. Код выводит на экран приглашение для ввода данных, используя переменную mess.
  6. Код сбрасывает видео/буфер в локальный буфер, используя метку save.
  7. Код сохраняет содержимое экрана в файл, используя переменную fName.
  8. Код закрывает файл и завершает программу, используя метку exit.

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


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

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

8   голосов , оценка 3.75 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут