Advertisement
Guest User

l5

a guest
Apr 21st, 2019
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. org     100h
  3. jmp     start
  4. off_one dw ?
  5. seg_one dw ?
  6. par1 db ?
  7. par2 db ?
  8. buf db 8 dup ('0'), '$'
  9.  
  10. s1 db 'Hello one$'
  11. s2 db 'Hello two$'
  12. s3 db 'And hello one more time$'
  13.  
  14. start:
  15.    
  16.     mov off_one, one
  17.     mov seg_one, seg one
  18.    
  19.     mov     al, 'H'
  20.     call far   off_one
  21.     mov     al, 'E'
  22.     call far   off_one  
  23.     mov     al, 'L'
  24.     call far   off_one
  25.     mov     al, 'L'
  26.     call far   off_one
  27.     mov     al, 'O'
  28.     call far   off_one  
  29.     call    endl
  30.    
  31.     mov     par1, 33
  32.     mov     par2, 63
  33.     call    two
  34.     call    endl  
  35.  
  36.     push    offset s1
  37.     push    offset s2
  38.     push    offset s3  
  39.     call    three
  40.  
  41. jmp exit
  42.  
  43.  
  44.  
  45. exit:
  46.     mov     ax, 4C00h    
  47.     int     21h
  48.  
  49. ; Переход на новую строку в консоли    
  50. endl:
  51.     push    ax          ; сохранение ax
  52.     mov     ah, 0eh
  53.    
  54.     mov     al, 0ah     ; новая строка      
  55.     int     10h
  56.    
  57.     mov     al, 0dh     ; возврат каретки
  58.     int     10h
  59.     pop     ax          ; восстановление ax
  60.     ret  
  61.  
  62.    
  63. one proc far
  64.     push    ax
  65.     mov     ah, 0eh
  66.     int     10h
  67.     pop     ax
  68.     ret  
  69. one endp
  70.  
  71. two proc
  72.     push    ax
  73.     push    di    
  74.    
  75.     mov     al, par1
  76.     lea     di, buf
  77.     call    byte_to_bin_str
  78.     lea     di, buf
  79.     call    print_str
  80.    
  81.     call    endl    
  82.    
  83.     mov     al, par2
  84.     lea     di, buf
  85.     call    byte_to_bin_str
  86.     lea     di, buf
  87.     call    print_str      
  88.    
  89.     pop     di
  90.     pop     ax
  91.     ret
  92. two endp  
  93.  
  94. three proc
  95.     push    bp         ; пролог
  96.     mov     bp, sp     ; пролог  
  97.    
  98.     mov     di, [bp+8] ; доступ s1
  99.     call    print_str
  100.     call    endl                            
  101.    
  102.     mov     di, [bp+6] ; доступ к s2    
  103.     call    print_str
  104.     call    endl                          
  105.    
  106.     mov     di, [bp+4] ; доступ к s3
  107.     call    print_str
  108.     call    endl  
  109.    
  110.     pop     bp         ; эпилог      
  111.     ret     12
  112. three endp
  113.  
  114. ; процедура вывода строки на консоль
  115. ; di - адрес строки
  116. print_str:
  117.     push ax
  118.     mov ah,9                ; функция DOS 09h - вывод строки
  119.     xchg dx,di              ; обмен значениями DX и DI
  120.     int 21h                 ; обращение к функции DOS
  121.     xchg dx,di              ; обмен значениями DX и DI
  122.     pop ax
  123.     ret
  124.  
  125. ; процедура преобразования байта в строку в двоичном виде
  126. ; al - байт.
  127. ; di - буфер для строки (8 символов). Значение регистра не сохраняется.
  128. byte_to_bin_str:
  129.     push cx                 ; сохранение CX
  130.     mov cx,8                ; счётчик цикла
  131.  
  132. btbs_lp:
  133.     rol al,1                ; циклический сдвиг AL влево на 1 бит
  134.     jc btbs_1               ; если выдвинутый бит = 1, то переход
  135.     mov byte[di],'0'        ; добавление символа '0' в строку
  136.     jmp btbs_end
  137. btbs_1:
  138.     mov byte[di],'1'        ; добавление символа '1' в строку
  139. btbs_end:
  140.     inc di                  ; инкремент DI
  141.     loop btbs_lp            ; команда цикла
  142.  
  143.     pop cx                  ; восстановление CX
  144.     ret                     ; возврат из процедуры
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement