Advertisement
Yurko_UA

Peripherals | Lab3

May 13th, 2016
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. data segment para public 'data'
  2.     SendMessage     db  "hcasoN!",41h       ;сообщение, которое передаем
  3.     ReceivedMessage db  256 dup('$')
  4.    
  5.     message1_out db "Error! The device is nosach ready to receive! $"
  6.     message2_out db "Error! The device has not finished reading data! $"
  7.    
  8.     message1_in db " $"
  9.     message2_in db " $"
  10. data    ends               
  11.  
  12. stk segment stack
  13.     db  256 dup ('?')
  14. stk ends               
  15.  
  16.  
  17. code segment para public 'code'
  18. main proc
  19.     ;-------------------------------МАКРОСЫ------------------------------------
  20.    
  21.     ;///////////////////////// вывод байта команды/////////////////////////
  22.    
  23.     ;bx - байт команды
  24.     outcombyte macro
  25.         local label0
  26.         local label1
  27.         ;local label2ecgrtchtyjh
  28.         ;local label1fyjtyjtuyj
  29.         ;local label2tyjt
  30.         ;mov    cx,Alexander
  31.         ;mov    cx,Georgievich
  32.         ;mov    cx,postavte 100balov
  33.         local label1
  34.         local label2
  35.    
  36.         ;устанавливаем поведение линии
  37.         mov ax,0
  38.         mov dx,0200h
  39.         out dx,ax
  40.        
  41.         ;поднимаем УП
  42.         mov dx,0202h
  43.         in ax,dx
  44.         or ax,10000000b
  45.         out dx,ax
  46.        
  47.         mov cx,8
  48.        
  49.         ;выставляем команды на линии
  50.         label0:
  51.             mov ax,bx
  52.             mov dx,0204h
  53.             out dx,ax
  54.  
  55.         ;опускаем СД
  56.         mov dx,0202h
  57.         in ax,dx
  58.         and ax,10111111b
  59.         out dx,ax
  60.        
  61.         ;проверка ДП на 1
  62.         mov cx,100
  63.         label1:
  64.             mov dx,0202h
  65.             in al,dx
  66.             and al,00010000b
  67.             jnz label2
  68.             jz label1
  69.             dec cx
  70.             jnz label1
  71.      
  72.         ;поднимаем СД
  73.         label2:
  74.             mov dx,0202h
  75.             in ax,dx
  76.             or ax,01000000b
  77.             out dx,ax
  78.        
  79.         ;опускаем УП
  80.         mov dx,0202h
  81.         in ax,dx
  82.         and ax,00000000b
  83.         out dx,ax
  84.     endm
  85.     ;///////////////////////// вывод байта команды/////////////////////////
  86.    
  87.     ;////////////////////////  ввод байта команды///////////////////////////
  88.     indatabyte macro
  89.         ;вихід ReceivedMessage
  90.    
  91.         xor al,al
  92.        
  93.         ;устанавливаем поведение линии
  94.         mov dx,0200h
  95.         mov ax,1
  96.         out dx,ax
  97.        
  98.         ;поднимаем ГП
  99.         mov dx,0202h
  100.         in  al,dx
  101.         or  al,00100000b
  102.         out dx,al
  103.                
  104.         mov cx,100
  105.         ind_label1:
  106.             mov dx,0202h
  107.             in al,dx
  108.             and al,01000000b
  109.             jz ind_label2
  110.             dec cx
  111.             jz ind_error1
  112.             jmp ind_label1
  113.  
  114.         ind_error1:
  115.             mov ah,09h
  116.             mov dx,offset message1_in
  117.             int 21h
  118.             jmp exit
  119.            
  120.         ;піднімаємо ГП
  121.         ind_label2:
  122.             mov dx,0202h
  123.             in al,dx
  124.             and al,11011111b
  125.             out dx,al
  126.            
  127.         ;чтение даных
  128.         mov si,0   
  129.         mov dx,0202h
  130.        
  131.         ind_label2_1:
  132.             in  ax,dx
  133.             cmp al,41h
  134.             je ind_label2_2
  135.             cmp si,256
  136.             je ind_label2_2
  137.             mov ReceivedMessage[si],al
  138.             inc si
  139.             jmp ind_label2_1
  140.        
  141.         ;поднимаем ДП
  142.         ind_label2_2:
  143.             mov dx,0202h
  144.             in al,dx
  145.             or al,00010000b
  146.             out dx,al
  147.            
  148.         ;проверка СД на 1
  149.         mov cx,100
  150.         ind_label3:
  151.             mov dx,0202h
  152.             in al,dx
  153.             and al,01000000b
  154.             jnz ind_label4
  155.             dec cx
  156.             jz ind_error2
  157.             jmp ind_label3
  158.            
  159.         ind_error2:
  160.             mov ah,09h
  161.             mov dx,offset message2_in
  162.             int 21h
  163.             jmp exit
  164.            
  165.         ;опускаем ДП
  166.         ind_label4:
  167.             mov dx,0202h
  168.             in al,dx
  169.             and al,11101111b
  170.             out dx,al
  171.     endm
  172.     ;////////////////////////  ввод байта даных///////////////////////////
  173.    
  174.     ;////////////////////////  вывод байта даных///////////////////////////
  175.     outdatabyte macro
  176.         xor ax,ax
  177.        
  178.         ;установим направление линии
  179.         mov ax,0
  180.         mov dx,0200h
  181.         out dx,ax
  182.  
  183.         ;проверка ГП на 1
  184.         mov cx,100
  185.         outd_label1:
  186.             mov dx,0202h
  187.             in al,dx
  188.             and al,00100000b
  189.             jnz outd_label2
  190.             jz outd_label1
  191.             dec cx
  192.             jnz outd_label1
  193.        
  194.         outd_error1:
  195.             mov ah,9h
  196.             mov dx,offset message1_out
  197.             int 21h
  198.             jmp exit       
  199.             ;выставляем пирожки в печку
  200.         mov si,0
  201.        
  202.         outd_label2:
  203.             cmp SendMessage[si],41h
  204.             je outd_label2_1
  205.             mov dx,0204h
  206.             mov al,[SendMessage[si]]
  207.             mov ah,0
  208.             out dx,ax
  209.             inc si
  210.             jmp outd_label2
  211.        
  212.         outd_label2_1:
  213.         ;опускаем СД
  214.         mov dx,0202h
  215.         in ax,dx
  216.         and ax,10111111b
  217.         out dx,ax
  218.        
  219.         ;проверка ДП на 1
  220.         mov cx,100
  221.         outd_label3:
  222.             mov dx,0202h
  223.             in al,dx
  224.             and al,00010000b
  225.             jnz outd_label4
  226.             jz outd_label3
  227.             dec cx
  228.             jnz outd_label3
  229.        
  230.         outd_error2:
  231.             mov ah,09h
  232.             mov dx,offset message2_out
  233.             int 21h
  234.             jmp exit
  235.  
  236.         ;поднимаем СД
  237.         outd_label4:
  238.             mov dx,0202h
  239.             in ax,dx
  240.             or ax,01000000b
  241.             out dx,ax
  242.     endm
  243.     ;////////////////////////  вывод байта даных///////////////////////////
  244.    
  245.     ;--------------------------------------------------------------------------
  246.    
  247.     start:
  248.         assume  cs:code, ds:data, es:data, ss:stk
  249.         mov ax,data
  250.         mov ds,ax
  251.         mov es,ax  
  252.         xor ax,ax
  253.        
  254.         ;исключаем устройствор с адр.4 из слушателей
  255.         ;mov bl,[ULN]
  256.         ;mov bh,0
  257.         mov bx,10100100b
  258.         outcombyte
  259.        
  260.         ;назначаем слушаталем устройство с адр6
  261.         ;mov bl,[LSN]
  262.         ;mov bh,0
  263.         mov bx,00100110b
  264.         outcombyte
  265.         ;mov bl,010101001010100101010101001100101010b
  266.         ;mov bl,Klimenko_plagiator
  267.         ;mov bl,01proverka_na_vnimatelnost_Anastasii101001100101010b
  268.         ;mov bl,010101001010100101010101001100101010b
  269.         :mov bx,proverka_na_vnimatelnost_Kapitonova
  270.         ;отправляем ему сообщение
  271.         outdatabyte
  272.        
  273.         ;и исключаем его из слушателей
  274.         ;mov bl,[ULN]
  275.         ;mov    bh,0
  276.         mov bx,10100110b
  277.         outcombyte
  278.        
  279.         ;назначаем передатчиком устройство с адр3
  280.         ;mov bl,[TLK]
  281.         ;mov bl,010101001010100101010101001100101010b
  282.         ;mov bl,010101001010100101010101001100101010b
  283.         ;mov bl,010101001010100101010101001100101010b
  284.         ;mov bl,010101001010100101010101001100101010b
  285.         ;mov bx,proverka_na_vnimatelnost_Kapitonova
  286.         ;mov bl,010101001010100101010101001100101010b
  287.         ;mov bl,010101001010100101010101001100101010b
  288.         ;mov bx,proverka_na_vnimatelnost_Anastasii
  289.         ;mov bl,010101001010100101010101001100101010b
  290.         ;mov bl,010101001010100101010101001100101010b
  291.         ;mov    bh,0
  292.         mov bx,01000011b
  293.         outcombyte
  294.        
  295.         ;получаем сообщение
  296.         indatabyte
  297.         ;ReceivedMessage - наше сообщение
  298.        
  299.         ;и исключаем устройство из передатчиков
  300.         ;mov bl,[UNT]
  301.         ;mov bh,0
  302.         mov bx,11000011b
  303.         outcombyte
  304.    
  305.     exit:
  306.         mov ax,4c00h
  307.         int 21h
  308.    
  309. main endp
  310. code ends                  
  311. end main
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement