Advertisement
Guest User

Untitled

a guest
Feb 24th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*разность двухбайтных чисел в двоично-десятичном коде 8-4-2-1. Программу можно расширить для чисел любой разрядности.
  2.  
  3. Алгоритм нахождения разности в двоично-десятичном коде такой:
  4. 1. Вычесть байт
  5. 2. Если произошел заем для младшей тетрады
  6.         тогда вычесть 0x06 для коррекции
  7. 3. Если произошел заем для старшей тетрады
  8.         тогда вычесть 0x60 для коррекции
  9. */
  10.  
  11. org 0
  12.     OP1     equ 0x9568
  13.     OP2         equ 0x4653
  14.     A1      equ 0x50
  15.     A2      equ 0x60
  16.     A3      equ 0x70
  17.     SIZE        equ 0x2
  18.  
  19.     mov A1, #LOW(OP1)
  20.     mov A1+1, #HIGH(OP1)
  21.     mov A2, #LOW(OP2)
  22.     mov A2+1, #HIGH(OP2)
  23.  
  24.     mov r0, #A1
  25.     mov r1, #A2
  26.     mov r2, #SIZE
  27.     mov dptr, #A3
  28.    
  29.     clr c
  30.     acall SUBST
  31.     jmp endmark
  32.    
  33. SUBST:
  34. BEGIN:
  35.     mov a, @r0
  36.     subb a, @r1
  37.     mov f0, c       //сохранение заема
  38.     jnb ac, low_done    //заема в младшей тетраде нет
  39.                      
  40.     //иначе вычесть 0х6
  41.     clr c
  42.     subb a, #0x06
  43.     orl c, f0  //восстановить основной заем
  44.     mov f0, c
  45. low_done:
  46.     jnc high_done   //основного заема нет
  47.  
  48.     //иначе корректировать старшую тетраду, вычесть 0x60
  49.     clr c
  50.     subb a, #0x60
  51.     setb c //восстановить заем
  52. high_done:   
  53.     //запись в память
  54.     movx @dptr, a
  55.     inc r0
  56.     inc r1
  57.     inc dptr
  58.     djnz r2, BEGIN
  59.     jnc OUT
  60.     mov a, #0xFF
  61.     movx @dptr, a
  62. OUT:
  63.     clr c
  64. RET
  65.  
  66. endmark:
  67. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement