Вычислить значение выражения и записать в файл - 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
Объяснение кода листинга программы
- Переменная
fSize
инициализируется значением 80*6, что означает размер файла в 6 строк по 80 символов в строке. - Переменная
fName
содержит имя файлаscreen.txt
. - Переменная
buff
инициализируется как буфер размером 80*6, заполненный пробелами. - Код переходит к метке
start
, которая является точкой входа в программу. - Код выводит на экран приглашение для ввода данных, используя переменную
mess
. - Код сбрасывает видео/буфер в локальный буфер, используя метку
save
. - Код сохраняет содержимое экрана в файл, используя переменную
fName
. - Код закрывает файл и завершает программу, используя метку
exit
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д