Вычислить значение выражения и записать в файл - 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
Листинг программы
org  100h
jmp  start
 
mess    db  'Input A: 20',13,10      ;<--------------------+
        db  'Input B: 13',13,10                           ;|
        db  'Input C: 26',13,10                           ;|
        db  'Input D: 15',13,10                           ;|
        db  '----------------------',13,10                ;|
        db  'A*B + C*D = 650 $'      ; данные на экране ---+
fSize   =   80*6                     ; размер файла 6 строк
fName   db  'screen.txt',0           ; имя файла
buff    db  fSize dup(' ')           ; буфер для выходного файла
 
start:
   mov   ax,3              ; видео/режим 80х25
   int   10h
   mov   ah,9
   mov   dx,mess
   int   21h
 
; Сбрасываем видео/буфер в локальный буфер ------------------
   push  ds                ;
   push  0B800h            ;
   pop   ds                ;
   xor   si,si             ; DS:SI - источник
   mov   di,buff           ; ES:DI - приёмник
   mov   bx,6              ; кол-во повторов цикла (строк)
save:                      ;
   mov   cx,80             ; сохранять будем по 1 строке
@@:                        ;
   lodsw                   ; чтение с в/буфера (с атрибутом)
   stosb                   ; запись в л/буфер (без атрибута)
   loop  @b                ;
   mov   ax,0A0Dh          ; после каждой строки,
   stosw                   ;       ..вставляем CRLF
   dec   bx                ; уменьшаем счётчик строк
   jnz   save              ; мотаем цикл 6 раз..
 
; Сохранение содержимого экрана в файл -----------------------
   pop   ds                ;
   mov   ah,3Ch            ; создать файл!
   mov   dx,fName          ;
   mov   cx,20h            ; режим R/W
   int   21h               ;
   mov   bx,ax             ; дескриптор в ВХ
 
   mov   ah,40h            ; запись!
   mov   dx,buff           ;
   mov   cx,fSize          ; кол-во байт
   int   21h               ;
 
   mov   ah,3Eh            ; закрыть!
   int   21h               ;
 
exit:
   xor   ax, ax
   int   16h
   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