Помогите решить задачу по ассемблеру в 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

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

Сансаныч, давай еврочервонец пожалуйста - помогать решить задачу по ассемблеру в TASM буду.
Похожие вопросы
- Помогите по ассемблеру
- Архитектура ЭВМ помогите с ассемблером
- Помогите с ассемблером (задачей про матрицы) внутри...
- Помогите с ассемблером
- помогите с Ассемблером
- помогите с ассемблером. если можно с объяснениями...огромное спасибо
- помогите с ассемблером (i8085) Программа должна считать количество нулей в ячейке. Какие команды использовать?
- Помогите!!! задача ассемблер.
- Помогите с Ассемблером пожалуйста
- Помогите с ассемблером