Проверить программу - 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

Код к задаче: «Проверить программу - Assembler»

textual
    mov ax, 4C00h
    int 21h

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


СОХРАНИТЬ ССЫЛКУ