Арифметические операции в языке программирования 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

Оцени полезность:

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