Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .model small
- .stack 100h
- .data
- buf db 1 dup (6), 8 dup (?)
- buf_out db 7 dup(?)
- a dw 0
- x dw 0
- y1 dw ?
- y2 dw ?
- y dw ?
- m dw 0
- mes_a db "Input a: ", '$'
- mes_x db 13, 10, "Input x: ", '$'
- mes_res db 13, 10, "Result: ", '$'
- .code
- start:
- mov ax, @data
- mov ds, ax
- ;Ввод
- mov ax, 0900h
- mov dx, offset mes_a
- int 21h
- call input
- pop ax
- mov a, ax
- ;Вводим x
- mov ax, 0900h
- mov dx, offset mes_x
- int 21h
- call input
- pop ax
- mov x, ax
- ;Конец ввода
- ;Задание
- mov ax, x
- mov bx, 4
- idel bx
- test dx, 8000h
- jns @next2
- neg dx
- @next2:
- cmp dx, 4
- jne one
- two:
- mov ax, a
- add ax, x
- mov y1,ax
- jmp next
- one:
- mov ax,x
- mov y1,ax
- jmp next
- next:
- mov dx, 0
- mov ax,x
- cmp ax,a
- jl three
- four:
- mov ax,a
- mov bx,x
- imul bx
- mov y2,ax
- jmp exit
- three:
- mov ax,a
- sub ax,x
- mov y2,ax
- jmp exit
- exit:
- mov ax,y1
- mov bx,y2
- ;imul bx
- test ax, 8000h
- jns @jmp_next
- mov dx, 65535
- @jmp_next:
- imul bx
- mov y,ax
- ;Конец задания
- ;Вывод
- ;Перевод строки
- mov ax, 0900h
- mov dx, offset mes_res
- int 21h
- push y
- call out_func
- ;Конец вывода
- mov ax, 4C00h
- int 21h
- input proc
- ;Ввод
- ;Получаем строку от пользователя
- mov dx, offset buf
- mov ah, 0Ah
- int 21h
- xor cx, cx
- xor dx, dx
- xor ax, ax
- mov bx, 10 ;Множитель
- mov cl, buf[1] ;Счетчик
- mov si, offset buf
- ;mov si, 0 ;Смещение относительно начала массива
- cmp buf[2], 2Dh ;Проверяем на знак минуса
- jne @lp1 ;Если не минус
- inc si ;Увеличиваем смещение
- sub cx, 1 ;Уменьшаем счетчик
- @lp1:
- mul bl
- mov dl, [si+2]
- sub dx, 30h
- add ax, dx
- inc si
- loop @lp1
- cmp buf[2], 2Dh ;Проверяем на знак минуса
- jne @next ;Если не минус
- neg ax ;Делаем число отрицательным
- @next:
- ;Обмениваем значения с адресом возврата
- pop bx
- push ax
- push bx
- ;Обнуляем регистры
- xor ax, ax
- xor bx, bx
- xor cx, cx
- xor dx, dx
- ;xor di, di
- xor si, si
- ret
- input endp
- out_func proc
- pop bx ;Сохраняем адрес возврата
- pop ax ;Извлекаем число из стека
- push bx ;Возвращаем адрес обратно
- mov bx, 10 ;Делитель
- xor cx, cx
- mov si, offset buf_out
- ;Проверяем, отрицательное ли число
- test ax, 8000h
- jns @lp
- mov byte ptr [si], '-'
- inc si
- neg ax
- ;Разбираем число на символы
- @lp:
- xor dx, dx
- div bx
- add dl, 30h
- push dx
- inc cx
- cmp ax, 0
- jne @lp
- mov ah, 02h
- ;Выводим число на экран
- @out_lp:
- pop dx
- mov [si], dl
- inc si
- loop @out_lp
- mov byte ptr [si], '$'
- mov ax, 0900h
- mov dx, offset buf_out
- int 21h
- xor ax, ax
- xor bx, bx
- xor dx, dx
- mov ah,0 ;Ожидание нажатия клавиши
- int 16h
- ret
- out_func endp
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement