Проверить программу - Assembler
Формулировка задачи:
Значения исходных данных, которые должны храниться в сегменте данных,
определяются выражениями:
Х1=№В*(-1)^№В
Х2=(-1)№В+1*(№Г*№В)
Х3=(-1)№В+2*(№Г*№В+№Г)
Х4=(-1)№В+3*№Г
где №В – 21, №Г – 351500
Помогите разобраться, правильно ли написана программа.
Листинг программы
- ; Сегмент стека
- Sseg SEGMENT STACK 'stack'
- DB 256 DUP (?)
- Sseg ENDS
- ; Сегмент данных
- Dseg SEGMENT 'data'
- x1 db 0ffh
- x2 db 0Dh
- x3 db 0e6h
- x4 db 0Dh
- x5 db ?
- x6 dw ?
- x7 db ?
- dvx db ?
- mdx db ?
- Dseg ENDS
- ; Сегмент кода
- Cseg SEGMENT 'code'
- ASSUME CS:Cseg, DS:Dseg, SS:Sseg
- ; Головная подпрограмма
- Main PROC FAR
- ; Подготовимся к возврату в операционную систему
- PUSH DS
- MOV AX, 0
- PUSH AX
- ; Настроим DS на наш сегмент данных
- MOV AX, Dseg
- MOV DS, AX
- ; Делаем вычисления
- mov ax,0
- ; X1+X2
- mov al,x1
- add al,x2
- mov x5,al
- ; X3*X2
- mov al,x2
- imul x3
- mov x6,ax
- ; X2&X4
- mov al,x2
- mov x7,al
- mov ah,x4
- and x7,ah
- ; Запись в стек X2
- mov ax,0
- mov al,x2
- push ax
- ;X3/X1
- mov al,x3 ;делимое
- cwd;подготовки к операции деления, для которой размер делимого в два раза больше размера делителя
- div x1 ;частное в al, остаток в ah
- mov dvx,al
- mov mdx,ah
- ; Завершение программы и передача управления первому оператору в PSP
- pop ax
- RET
- Main ENDP
- Cseg ENDS
- END Main
Решение задачи: «Проверить программу»
textual
Листинг программы
- mov ax, 4C00h
- int 21h
Объяснение кода листинга программы
- Устанавливается значение переменной
ax
равное4C00h
(это значение является кодом завершения программы для функции выхода из программы в DOS). - Выполняется прерывание
21h
(данное прерывание вызывает сервис операционной системы DOS).
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д