Арифметические операции в языке программирования Assembler
Формулировка задачи:
здрастуйте
подскажите как сделать так что бы в результат выводило " значение с минусом" или "целое" или "дробей" а то ток с минусом кидает каждый раз
MODEL SMALL
STACK 100h
DATASEG
Question DB 10,13,'Close program? - [Y/N]$'
Set_X DB 13,10,'X = $'
Result DB 13,10,'Y = $'
error_ db "incorrect number$"
buff db 6,7 Dup(?)
CODESEG
start:
mov ax,@Data
mov ds,ax ; ?????????? ??????? DS ????? ?????, ??? ??? ???????? ?? ??????? ?????
mov dx,OFFSET Set_X ; ????????? ?? ????????????-?????????
mov ah,09h ; ??????? DOS ?????? ???????
int 21h
;************************************************************************************
;********* ?????????? ????? ? ?????????? ? ???????????? ???? ? ??????? ???????? ************
;********????????? ? ???????? AX*********
;************************************************************************************
mov ah,0ah
xor di,di
mov dx,offset buff ; ?????? ??????
int 21h ; ???????? ???????
mov dl,0ah
mov ah,02
int 21h ; ???????? ??????? ???????
; ?????????? ????? ??????
mov si,offset buff+2 ; ????? ?????? ??????? ???????
cmp byte ptr [si],"-" ; ???? ?????? ?????? ?????
jnz ii1
mov di,1 ; ???????????? ??????
inc si ; ? ?????????? ????
ii1:
xor ax,ax
mov bx,10
ii2:
mov cl,[si] ; ????? ?????? ? ?????f
cmp cl,0dh ; ??????????? ?? ??? ?? ????????
jz endin
; ???? ?????? ?? ????????, ?? ??????????? ???? ?? ????????????
cmp cl,'0' ; ???? ???????? ???????? ?????? <0
jl er
cmp cl,'9' ; ???? ???????? ???????? ?????? >9
ja er
sub cl,'0' ; ?????? ? ??????? ?????
mul bx ; ???????????? ?? 10
add ax,cx ; ??????? ?? ?????
inc si ; ????????? ?? ????????? ??????
jmp ii2 ; ??????????
er: ; ???? ???? ???????, ?? ???????? ???????????? ??? ?? ? ????????
mov dx, offset error_
mov ah,09
int 21h
int 20h
; ??? ??????? ? ?????? ????????? ????? ??????????? ? ax
endin:
cmp di,1 ; ???? ???????????? ?????????, ??
jnz ii3
neg ax ; ????? ????? ?????????
ii3:
;************************************************************************************
;**************** ?????????? ??????? ?????????? ? ????????????? ????? ********************
;
mov bx,ax
mov ax,4
sub ax,bx
test ax,ax
jns div_5
neg ax
div_5:
mov cx, 5
div cx
mov bx, ax
mul bx
mul bx
jp write_neg
add ax, 1
mov cx, ax
write_neg:
neg ax
add ax, 1
mov cx,ax
mov dx,OFFSET Result ; ?????? ??
mov ah,09h ; ??????? DOS ?????? ????????????
int 21h ; ??????? ?????????? ????????????
xchg cx,ax
;************************************************************************************
;************* ??????? ??????? ???????????? ????? ? ??????? ? ?????? ?? ?? ????? ************
;************************************************************************************
; ??????????? ????? ?? ????
test ax, ax
jns oi1
; ???? ???? ???'????, ???????? ????? ? ???????? ???? ??????.
mov cx, ax
mov ah, 02h
mov dl, '-'
int 21h
mov ax, cx
neg ax
; ????????? ???? ?????? ??????? ? CX.
oi1:
xor cx, cx
mov bx, 10 ; ?????? ??. 10 ??? ?????????? ? ?.?.
oi2:
xor dx,dx
div bx
; ?????? ????? ?? ?????? ??. ? ??????? ???????? ??????? ?????.
; ??????? ???????? ?? ???????, ???? ????????? ?? ? ????.
push dx
inc cx
; ? ? ??????? ?????????? ?? ? ????, ?????????? ??? ????? ???????
; ????? ??????, ???? ?? ?????????? ????, ?? ???????, ?? ????
; ????? ???? ????.
test ax, ax
jnz oi2
; ????? ?????????? ?? ??????.
mov ah, 02h
oi3:
pop dx
; ?????? ??????? ?????, ?????????? ?? ? ?????? ? ????????.
add dl, '0'
int 21h
; ????????? ????? ??????? ?????, ??????? ???? ??????????.
loop oi3
;************************************************************************************
;************ ?????????? ??????? ???????????? ????? ? ??????? ? ?????? ?? ?? ????? ***********
;************************************************************************************
mov dx,OFFSET Question
mov ah,09h
int 21h
mov ah,01h
int 21h
cmp al,'y'
jz closethatshit
jmp start
closethatshit:
mov ah,04ch ; ??????? DOS ?????????? ????????
int 21h ; ????????? ????????
end startРешение задачи: «Арифметические операции в языке программирования Assembler»
textual
Листинг программы
endin: cmp di, 1 jnz ii3 neg ax ii3: ;************************************************************************************ xor dx, dx mov bx, ax mov ax, 4 sub ax, bx jns ii4 mov dx, -1 ii4: mov cx, 5 idiv cx