Другие языки программирования и технологии

Помогите с ассемблером

Помогите решить задачу по ассемблеру в TASM. Суть такова нужно написать программу с вводом данных и выводом на экран в 10-й системе. должно множиться два целых двухбайтовых числа через добавление (суммирование) .
такой алгоритм:
1)начало
2)ввести 1 число
3)ввести 2 число
4)посчитать
5)Вывести в 10-й системе
6)конец
ideal
model small
P386

segment data
Prompt1 db 'Введите 1-е число: $'
Prompt2 db 13,10,'Введите 2-е число: $'
Result db 13,10,'Результат перемножения: $'
X1 dw ?
X2 dw ?
Sign db ?
Res dd ?
ends data

segment code
    assume cs:code, ds:data, ss:stseg
start:
    mov ax,data
    mov ds,ax
    mov dx,offset Prompt1
    mov ah,9
    int 21h
;Ввод первого числа
    call Input
    mov [X1],ax
    mov dx,offset Prompt2
    mov ah,9
    int 21h
;Ввод второго числа
    call Input
    mov [X2],ax
;Получение модуля и знака 1-го числа
    mov ax,[X1]
    cwd
    xor ax,dx
    and dx,1
    mov [Sign],dl
    add ax,dx
    mov di,ax
;Получение модуля 2-го числа и знака произведения
    mov ax,[X2]
    cwd
    xor ax,dx
    and dx,1
    xor [Sign],dl
    add ax,dx
;Перемножение только операциями сложения
    mov cx,16
    movzx eax,ax
    xor ebx,ebx
Multipl:
    add ebx,ebx
    add di,di
    jnc NoAdd
    add ebx,eax
NoAdd:
    loop Multipl
    mov [Res],ebx
    mov dx,offset Result
    mov ah,9
    int 21h
;Вывод произведения на экран
    test byte ptr Sign,1
    jz Positive
    mov al,'-'
    int 29h
Positive:
    mov eax,[Res]
    call Print
    mov ah,8
    int 21h
    mov ah,4Ch
    int 21h

;Подпрограмма ввода числа
proc Input
    xor di,di
    mov ebx,10
inp0:
    call Inkey
    cmp al,0Dh
    je inp0
    cmp al,'+'
    je inp2
    cmp al,'-'
    jne inp1
    or ebx,80000000h
    jmp inp2
inp1:
    cmp al,0Dh
    je inp4
    sub al,'0'
    jb inp3
    cmp al,9
    ja inp3
    cbw
    xchg di,ax
    push dx
    mul bx
    pop dx
    add di,ax
inp2:
    mov ah,2
    int 21h
inp3:
    call Inkey
    jmp inp1
inp4:
    mov ax,di
    or ebx,ebx
    jns inp5
    neg ax
inp5:
    ret
endp Input

;Вспомогательная подпрограмма фильтрации нажимаемых клавиш
proc Inkey
    mov ah,8
    int 21h
    mov dl,al
    or al,al
    jnz ink1
    int 21h
    jmp Inkey
ink1:
    cmp al,0Dh
    je ink2
    cmp al,'-'
    je ink2
    cmp al,'+'
    je ink2
    cmp al,'0'
    jb Inkey
    cmp al,'9'
    ja Inkey
ink2:
    ret
endp Inkey

;Подпрограмма вывода числа на экран
proc Print
    xor cx,cx
    mov ebx,10
Prepare:
    xor edx,edx
    div ebx
    push dx
    inc cx
    or eax,eax
    jnz Prepare
PutChar:
    pop ax
    or al,30h
    int 29h
    loop PutChar
    ret
endp Print

ends code

segment stseg stack
    dw 100h dup (?)
ends stseg

    end start

Сергей Макаров
Сергей Макаров
51 590
Лучший ответ
Сансаныч, давай еврочервонец пожалуйста - помогать решить задачу по ассемблеру в TASM буду.