Вычислить значение выражения и записать в файл - 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.