Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- org 100h
- jmp start
- off_one dw ?
- seg_one dw ?
- par1 db ?
- par2 db ?
- buf db 8 dup ('0'), '$'
- s1 db 'Hello one$'
- s2 db 'Hello two$'
- s3 db 'And hello one more time$'
- start:
- mov off_one, one
- mov seg_one, seg one
- mov al, 'H'
- call far off_one
- mov al, 'E'
- call far off_one
- mov al, 'L'
- call far off_one
- mov al, 'L'
- call far off_one
- mov al, 'O'
- call far off_one
- call endl
- mov par1, 33
- mov par2, 63
- call two
- call endl
- push offset s1
- push offset s2
- push offset s3
- call three
- jmp exit
- exit:
- mov ax, 4C00h
- int 21h
- ; Переход на новую строку в консоли
- endl:
- push ax ; сохранение ax
- mov ah, 0eh
- mov al, 0ah ; новая строка
- int 10h
- mov al, 0dh ; возврат каретки
- int 10h
- pop ax ; восстановление ax
- ret
- one proc far
- push ax
- mov ah, 0eh
- int 10h
- pop ax
- ret
- one endp
- two proc
- push ax
- push di
- mov al, par1
- lea di, buf
- call byte_to_bin_str
- lea di, buf
- call print_str
- call endl
- mov al, par2
- lea di, buf
- call byte_to_bin_str
- lea di, buf
- call print_str
- pop di
- pop ax
- ret
- two endp
- three proc
- push bp ; пролог
- mov bp, sp ; пролог
- mov di, [bp+8] ; доступ s1
- call print_str
- call endl
- mov di, [bp+6] ; доступ к s2
- call print_str
- call endl
- mov di, [bp+4] ; доступ к s3
- call print_str
- call endl
- pop bp ; эпилог
- ret 12
- three endp
- ; процедура вывода строки на консоль
- ; di - адрес строки
- print_str:
- push ax
- mov ah,9 ; функция DOS 09h - вывод строки
- xchg dx,di ; обмен значениями DX и DI
- int 21h ; обращение к функции DOS
- xchg dx,di ; обмен значениями DX и DI
- pop ax
- ret
- ; процедура преобразования байта в строку в двоичном виде
- ; al - байт.
- ; di - буфер для строки (8 символов). Значение регистра не сохраняется.
- byte_to_bin_str:
- push cx ; сохранение CX
- mov cx,8 ; счётчик цикла
- btbs_lp:
- rol al,1 ; циклический сдвиг AL влево на 1 бит
- jc btbs_1 ; если выдвинутый бит = 1, то переход
- mov byte[di],'0' ; добавление символа '0' в строку
- jmp btbs_end
- btbs_1:
- mov byte[di],'1' ; добавление символа '1' в строку
- btbs_end:
- inc di ; инкремент DI
- loop btbs_lp ; команда цикла
- pop cx ; восстановление CX
- ret ; возврат из процедуры
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement