Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .MODEL SMALL
- .STACK 100h
- .DATA
- A db 75
- B db 75
- X dw ?
- K db 3
- Hello db 13,10,' X=31+a/b if a>b',13,10,' X=-9 if a==b',13,10,' X=(5*b-1)/a if a<b',13,10,'$'
- A_B db 13,10, ' a==b ====> X=-51',13,10,'$'
- Error_A db 13,10,' a<b and a==0 ----> divide by zero',13,10,'$'
- Error_B db 13,10,' a>b and b==0 ----> divide by zero',13,10,'$'
- ;X=3*a/b+10 if a<b
- ;X=-51, a=b
- ;X=(b-4)/a, a>b
- .CODE
- .386
- Start:
- mov ax,@data
- mov ds,ax
- mov ah,09
- mov dx,offset hello
- int 21h
- mov al,A ;занести значення з комірки пам’яті, визначеної міткою А, у регістр al
- cmp al,B ;порівняти значення регістру al та комірки пам’яті В
- jne A_n_B ;за умови, що вони нерівні, перейти на мітку A_n_B
- mov X,-51 ;інакше – занести значення константи -51 у пам’ять, визначену як X
- mov ah,09 ;вивести повідомлення, про рівність вхідних даних і значення результату
- mov dx,offset A_B
- int 21h
- jmp exit ;перейти на мітку exit
- ;X=3*a/b+10 if a<b
- A_g_B: jg A_n_b ;якщо вміст al > В, то перейти на мітку A_n_b
- cmp B,0 ;порівняти значення B з нулем
- je exit_B ;якщо вони рівні, тобто можливе ділення на нуль, перейти на мітку exit_А
- mov ah,80h ;занести у регістр ah константу 80h
- and ah,al ;виділити в регістрі ah знаковий розряд значення, занесеного у регістр al
- sar ah,8 ;розповсюдити знаковий розряд в регістрі ah
- imul K ;ax=a*3
- mov dx,8000h ;занести у регістр dh константу 8000h
- and dx,ax ;виділити в регістрі dx знаковий розряд значення, занесеного у регістр ax
- sar dx,15 ;розповсюдити знаковий розряд в регістрі dx
- mov bl,B ;занести у регістр bl значення з комірки пам’яті, визначеної міткою B
- mov bh,80h ;занести у регістр bh константу 80h
- and bh,bl ;виділити в регістрі bh знаковий розряд значення, занесеного у регістр bl
- sar bh,8 ;розповсюдити знаковий розряд в регістрі bh
- idiv bx ;поділити знакове число, що знаходиться у регістровій парі dx:ax на знакове число у регістрі bx
- add ax,10 ;додаємо до числа А 10
- mov X,ax ;перенести отриманий результат у комірку Х
- jmp exit ;перейти на мітку exit
- exit_A: mov ah,09 ;вивести повідомлення про ділення на нуль, при А==0
- mov dx,offset Error_A
- int 21h
- ;X=(b-4)/a, a>b
- A_n_b:
- cmp A,0 ;інакше – порівняти значення A з нулем
- je exit_A ;якщо вони рівні, тобто можливе ділення на нуль, перейти на мітку exit_A
- mov ah,80h ;занести у регістр ah константу 80h
- and ah,al ;виділити в регістрі ah знаковий розряд значення, занесеного у регістр al
- sar ah,8 ;розповсюдити знаковий розряд в регістрі ah
- mov dl,ah ;перенести знаковий розряд в регістр dl
- mov dh,dl ;перенести знаковий розряд в регістр dh
- mov bl,B ;занести у регістр bl значення з комірки пам’яті, визначеної міткою В
- mov bh,80h ;занести у регістр bh константу 80h
- and bh,bl ;виділити в регістрі bh знаковий розряд значення, занесеного у регістр bl
- sar bh,8 ;розповсюдити знаковий розряд в регістрі bh
- sub bx,4 ;відняли 4 від числа b
- idiv ax ;поділити знакове число, що знаходиться у регістровій парі dx:ax на знакове число ;у регістрі bx
- mov X,ax ;перенести отриманий результат у комірку Х
- jmp exit ;перейти на мітку exit
- exit_B: mov ah,09 ;вивести повідомлення про ділення на нуль, при В==0
- mov dx,offset Error_B
- int 21h
- jmp exit ;перейти на мітку exit
- exit:
- mov ah,4Ch ;завершення програми
- int 21h
- end Start
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement