Advertisement
Guest User

Untitled

a guest
May 19th, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. .MODEL SMALL
  2. .STACK 100h
  3. .DATA
  4. A   db  75
  5. B   db  75
  6. X   dw  ?
  7. K   db  3
  8.  
  9. 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,'$'
  10. A_B    db 13,10, '   a==b  ====>   X=-51',13,10,'$'
  11. Error_A db 13,10,'  a<b and a==0 ---->  divide by zero',13,10,'$'
  12. Error_B db 13,10,'  a>b and b==0 ---->  divide by zero',13,10,'$'
  13.  
  14.  
  15. ;X=3*a/b+10  if a<b
  16. ;X=-51, a=b
  17. ;X=(b-4)/a, a>b
  18. .CODE
  19. .386
  20. Start:  
  21.     mov ax,@data
  22.     mov ds,ax
  23.    
  24.     mov ah,09
  25.     mov dx,offset hello
  26.     int 21h
  27.  
  28.     mov al,A    ;занести значення з комірки пам’яті, визначеної міткою А, у регістр al
  29.     cmp al,B    ;порівняти значення регістру al та комірки пам’яті В
  30.     jne A_n_B   ;за умови, що вони нерівні, перейти на мітку A_n_B
  31.     mov X,-51   ;інакше – занести значення константи -51 у пам’ять, визначену як X
  32.     mov ah,09   ;вивести повідомлення, про рівність вхідних даних і значення результату
  33.     mov dx,offset A_B  
  34.     int 21h
  35.     jmp exit    ;перейти на мітку  exit
  36.  
  37.  
  38.     ;X=3*a/b+10  if a<b
  39.  
  40. A_g_B:  jg A_n_b    ;якщо вміст al > В, то перейти на мітку A_n_b
  41.    cmp B,0  ;порівняти значення B з нулем
  42.     je exit_B   ;якщо вони рівні, тобто можливе ділення на нуль, перейти на мітку exit_А
  43.  
  44.     mov ah,80h  ;занести у регістр ah константу 80h
  45.     and ah,al   ;виділити в регістрі ah знаковий розряд значення, занесеного у регістр al
  46.     sar ah,8    ;розповсюдити знаковий розряд в регістрі ah
  47.     imul K      ;ax=a*3
  48.     mov dx,8000h    ;занести у регістр dh константу 8000h
  49.     and dx,ax   ;виділити в регістрі dx знаковий розряд значення, занесеного у регістр ax
  50.     sar dx,15   ;розповсюдити знаковий розряд в регістрі dx
  51.     mov bl,B    ;занести у регістр bl значення з комірки пам’яті, визначеної міткою B
  52.     mov bh,80h  ;занести у регістр bh константу 80h
  53.     and bh,bl   ;виділити в регістрі bh знаковий розряд значення, занесеного у регістр bl
  54.     sar bh,8    ;розповсюдити знаковий розряд в регістрі bh
  55.     idiv bx     ;поділити знакове число, що знаходиться у регістровій парі dx:ax на знакове число у регістрі bx
  56.     add ax,10   ;додаємо до числа А 10
  57.     mov X,ax    ;перенести отриманий результат у комірку Х
  58.     jmp exit    ;перейти на мітку  exit
  59. exit_A: mov ah,09   ;вивести повідомлення про ділення на нуль, при А==0
  60.     mov dx,offset Error_A  
  61.     int 21h
  62.    
  63.     ;X=(b-4)/a, a>b
  64. A_n_b:  
  65.     cmp A,0     ;інакше – порівняти значення A з нулем
  66.     je exit_A   ;якщо вони рівні, тобто можливе ділення на нуль, перейти на мітку exit_A
  67.     mov ah,80h  ;занести у регістр ah константу 80h
  68.     and ah,al   ;виділити в регістрі ah знаковий розряд значення, занесеного у регістр al
  69.     sar ah,8    ;розповсюдити знаковий розряд в регістрі ah
  70.     mov dl,ah   ;перенести знаковий розряд в регістр dl
  71.     mov dh,dl   ;перенести знаковий розряд в регістр dh
  72.     mov bl,B    ;занести у регістр bl значення з комірки пам’яті, визначеної міткою В
  73.     mov bh,80h  ;занести у регістр bh константу 80h
  74.     and bh,bl   ;виділити в регістрі bh знаковий розряд значення, занесеного у регістр bl
  75.     sar bh,8    ;розповсюдити знаковий розряд в регістрі bh
  76.     sub bx,4    ;відняли 4 від числа b
  77.     idiv ax     ;поділити знакове число, що знаходиться у регістровій парі dx:ax на знакове число ;у регістрі bx
  78.     mov X,ax    ;перенести отриманий результат у комірку Х
  79.     jmp exit    ;перейти на мітку  exit
  80. exit_B: mov ah,09   ;вивести повідомлення про ділення на нуль, при В==0
  81.     mov dx,offset Error_B  
  82.     int 21h
  83.     jmp exit    ;перейти на мітку  exit
  84.    
  85.  
  86.    
  87. exit:  
  88.     mov ah,4Ch  ;завершення програми
  89.     int 21h
  90.     end Start
  91. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement