Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- TITLE LAB4
- data segment
- enteer db 10, 13, '$'
- errorInput db 'Not good choice((($'
- firstNum db 'First operand r: $'
- secondNum db 'Second operand s: $'
- condNum db 'Enter condition x (1 or 0) -> $'
- trueNm db 'AH = 0 (x = 0) so z = (r+s)/(r-s)',13,10,'$'
- falseNm db 'AH != 0 (x != 0) so z = r/s + s/r + 10',13,10,'$'
- caseChoice db 'Select one of the equations you want to solve using r and s -> $'
- firstE db '1. If AH = 0 (x = 0) then z = (r+s)/(r-s), else z = r/s + s/r + 10',13,10,'$'
- secondE db '2. z = r(s+15)',13,10,'$'
- thirdE db '3. z = r^2 - rs + s^2',13,10,'$'
- fourthE db '4. z = r^2/(s+2)',13,10,'$'
- answer db 'The answer is : $'
- buff db 6,7 dup(?)
- r db ?
- s db ?
- cond db ?
- case db ?
- error db 'incorrect number$'
- data ends
- pips segment
- assume cs:pips, ds:data , se:code
- ;caseCheck:
- mov ax, data
- mov ds, ax
- xor ax, ax
- ;org 1000h
- ;pfollow1 dw 0
- ;pfollow2 dw 0
- ;pfollow3 dw 0
- ;pfollow4 dw 0
- follow1:
- call case1
- jmp endcase
- follow2: call case2
- jmp endcase
- follow3: call case3
- jmp endcase
- follow4: call case4
- jmp endcase
- endcase:
- mov ax,4c00h
- int 21h
- ;--------------------------------------------------
- case1 proc
- push ax
- lea dx,firstE
- mov ah, 09
- int 21h
- pop ax
- ;-------------------------------------- If w then e1 else e2
- cmp ah,1
- je trueChoicecase
- cmp ah,0
- je falseChoicecase
- ;error
- lea dx,errorInput
- mov ah, 09
- int 21h
- trueChoicecase:
- lea dx,TrueNm
- mov ah, 09
- int 21h
- mov bl,[r]
- add bl,[s]
- mov bh,[r]
- sub bh,[s]
- xor ax,ax
- mov al,bl
- div bh
- xor ah,ah;очищаем остаток
- ;ответ в al
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call far OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- jmp nextInstr
- falseChoicecase:
- lea dx,FalseNm
- mov ah, 09
- int 21h
- xor ax,ax
- mov al,[r]
- mov bl,[s]
- div bl
- xor ah,ah
- mov bh,al
- xor ax,ax
- mov al,[s]
- mov bl,[r]
- div bl
- xor ah,ah
- add al,bh
- add al,10
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- ret
- case1 endp
- ;--------------------------------------------------
- case2 proc
- push ax
- lea dx,secondE
- mov ah, 09
- int 21h
- pop ax
- mov al,[r]
- mov ah,[s]
- add ah,15
- mul ah
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- ret
- case2 endp
- ;--------------------------------------------------
- case3 proc
- push ax
- lea dx,thirdE
- mov ah, 09
- int 21h
- pop ax
- mov al,[r]
- mov bl,[r]
- mul bl
- mov cx,ax
- xor ax,ax
- mov al,[s]
- mov bl,[s]
- mul bl
- add cx,ax
- xor ax,ax
- mov al,[r]
- mov bl,[s]
- mul bl
- sub cx,ax
- mov ax,cx
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- ret
- case3 endp
- ;--------------------------------------------------
- case4 proc
- push ax
- lea dx,fourthE
- mov ah, 09
- int 21h
- pop ax
- mov al,[r]
- mov bl,[r]
- mul bl
- mov bl,[s]
- add bl,2
- div bl
- xor ah,ah
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- ret
- case4 endp
- ;--------------------------------------------------
- pips ends
- ;---------------------------------------------------------------------------------------
- code segment
- assume cs:code,ds:data,es:pips
- begin:
- mov ax, data
- mov ds, ax
- xor ax, ax
- mov ax, pips
- mov es, ax
- xor ax, ax
- ;--------------------------------------- InputNum,condition
- ;first Num r
- lea dx,firstNum
- mov ah, 09
- int 21h
- call InputInt
- mov [r],al
- xor ax,ax
- ;second Num s
- lea dx,secondNum
- mov ah, 09
- int 21h
- call InputInt
- mov [s],al
- xor ax,ax
- lea dx,CondNum
- mov ah, 09
- int 21h
- call InputInt
- mov ah,al
- ;-------------------------------------- If w then e1 else e2
- cmp ah,1
- je trueChoice
- cmp ah,0
- je falseChoice
- ;error
- lea dx,errorInput
- mov ah, 09
- int 21h
- trueChoice:
- lea dx,TrueNm
- mov ah, 09
- int 21h
- mov bl,[r]
- add bl,[s]
- mov bh,[r]
- sub bh,[s]
- xor ax,ax
- mov al,bl
- div bh
- xor ah,ah;очищаем остаток
- ;ответ в al
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- jmp nextInstr
- falseChoice:
- lea dx,FalseNm
- mov ah, 09
- int 21h
- xor ax,ax
- mov al,[r]
- mov bl,[s]
- div bl
- xor ah,ah
- mov bh,al
- xor ax,ax
- mov al,[s]
- mov bl,[r]
- div bl
- xor ah,ah
- add al,bh
- add al,10
- push ax
- lea dx,answer
- mov ah, 09
- int 21h
- pop ax
- call OutInt
- lea dx,enteer
- mov ah, 09
- int 21h
- ;----------------------------------------- Begin of case
- nextInstr:
- lea dx,firstE
- mov ah, 09
- int 21h
- lea dx,secondE
- mov ah, 09
- int 21h
- lea dx,thirdE
- mov ah, 09
- int 21h
- lea dx,fourthE
- mov ah, 09
- int 21h
- lea dx,caseChoice
- mov ah, 09
- int 21h
- call InputInt
- ;-------------------------------выбор кейса
- cmp al,1
- je nearfollow1
- cmp al,2
- je nearfollow2
- cmp al,3
- je nearfollow3
- cmp al,4
- je nearfollow4
- jmp errooor
- errooor:
- lea dx, error
- mov ah, 09
- int 21h
- mov ax, 4c00h
- int 21h
- nearfollow1:
- jmp far ptr follow1
- nearfollow2:
- jmp far ptr follow2
- nearfollow3:
- jmp far ptr follow3
- nearfollow4:
- jmp far ptr follow4
- ;---------------------------------why this idea don`t work?
- ; косвенный дальний переход (межсегментный по значению регистра = адресу)
- ;lea ax,follow1
- ;mov word ptr[pfollow1],ax
- ;lea ax,follow2
- ;mov word ptr[pfollow2],ax
- ;lea ax,follow3
- ;mov word ptr[pfollow3],ax
- ;lea ax,follow4
- ;mov word ptr[pfollow4],ax
- ;sub ax,1
- ;mov bx,ax
- ;shl bx,1
- ;add bx,1000h
- ;add bx,20h
- ;jmp far ptr es:bx
- ;--------------------------------------------------------
- cont:
- ;---------------------------------------EXIT
- mov ax, 4c00h
- int 21h
- ;---------------------------------------Proc:
- ;---------------------------------------Input
- InputInt proc
- push bx
- push cx
- push dx
- push di
- push si
- mov ah, 0Ah
- xor di, di
- lea dx, buff
- int 21h
- mov dl, 0Ah
- mov ah, 02
- int 21h
- xor ax,ax
- mov bx,10
- lea si, buff+2
- ii2:
- mov cl, [si]
- cmp cl, 0Dh ; 0Dh -- carriage return
- jz endin ; if zero or equal
- cmp cl, '0'
- jb er ; if smaller
- cmp cl, '9'
- ja er ; if greater
- sub cl, '0'
- mul bx
- add ax, cx
- inc si
- jmp ii2
- er:
- lea dx, error
- mov ah, 09
- int 21h
- int 20h
- endin:
- pop si
- pop di
- pop dx
- pop cx
- pop bx
- ret
- InputInt endp
- ;----------------------------------------Output
- OutInt proc
- xor cx,cx
- mov bx, 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
- ret
- OutInt endp
- ;---------------------------------------------------
- code ends
- ;---------------------------------------------------
- END begin
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement