Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;посчитать емкость стека
- .model small
- .code
- org 100h ;смещение в COM на 256
- start:
- lea ax,endgame ;узнаем адрес конца
- mov bx,sp
- sub bx,ax ;разница адресов
- sub bx,4 ;учет, что займем место в стеке его размером (x2)
- push bx ;запись в стек доступного размера байт
- sub bx,12 ;12 каких то символов ??? каких?
- ;UPD по словам Чернова стек использует дебагер сам код и еще какая-то хрень. забить и не обращать внимания
- push bx ;пуш в стек с учетом этих символов
- mov cx,bx ;записываем в cx кол-во свободных байт в стека
- mov ah,09 ;9 фкнкция 21 прерывания (вывод сообщения)
- mov dx,offset string
- int 21h
- push ss:[-4] ;пуш в стек параметра для функции print (значение размера доступого размера стека)
- call print
- shr cx,1 ;подготовка к 2 байтовой записи (деление на 2, т.к. push/pop работает с 2 байтами)
- mov ax,8888h ;что записывем (просто восьмерки)
- lp:
- push ax ;записываем в стек содержимое AX
- loop lp
- mov ax,4c00h ;завершение программы (по дебагеру можно посмотреть сколько занял стек)
- int 21h
- print proc
- push ax
- push bp
- mov bp,sp ;сохраняем указаетль стека в BP
- mov ax,[bp+6] ;получение параметра
- push cx
- push bx
- push dx
- mov bx, offset HexTabl ;указатель на таблицу
- mov di, offset asHex ;указатель на представление
- mov cx,ax ;сохранение ax
- and al,0Fh ;работа с первой тетрадой
- xlat ;записываем в al соответсвие строки по bx по индексу al
- mov [di+3],al ;запись в символа в hex
- mov al,cl ;восстановление al
- and al,0F0h ;работа со старшей тетрадой
- shr al,4 ;смещение вправо
- xlat ;записываем в al соответсвие в bx по индексу al
- mov[di+2],al ;запись в символа в hex
- ;работа со старшим байтом (ax был сохранен в cx)
- mov al,ch
- and al,0Fh
- xlat
- mov [di+1],al
- mov al,ch
- and al,0F0h
- shr al,4
- xlat
- mov[di],al
- mov ah,09h
- mov dx, offset asHex
- int 21h ;вывод строки
- ;восстановление испозованных регистров
- pop dx
- pop bx
- pop cx
- pop bp
- pop ax
- ret 2 ;сброс стека на 2 байта (были передан входным параметром)
- endp
- string db 'Available stack size is $'
- HexTabl db '0123456789ABCDEF' ;таблица для сравнения
- asHex db '0000h ', '$' ;место для вывода hex числа
- label endgame word ;метка для конца кода
- end start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement