Главная Случайная страница


Полезное:

Как сделать разговор полезным и приятным Как сделать объемную звезду своими руками Как сделать то, что делать не хочется? Как сделать погремушку Как сделать так чтобы женщины сами знакомились с вами Как сделать идею коммерческой Как сделать хорошую растяжку ног? Как сделать наш разум здоровым? Как сделать, чтобы люди обманывали меньше Вопрос 4. Как сделать так, чтобы вас уважали и ценили? Как сделать лучше себе и другим людям Как сделать свидание интересным?


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






St segment stack. db128 dup (?); это для системных нужд





db 128 dup (?); это для системных нужд

dw 300 dup (?); это для хранения наших чисел

St ends

code segment

assume cs:code,ds:code,ss:st

T1 db ′Вводите числа до нуля$′

T2 db ′Числа в обратном порядке:′,10,13,′$′

T3 db ′Ошибка – много чисел!′,10,13,′$′

program_start:

mov ax,code

mov ds,ax

mov dx, offset T1; Приглашение к вводу

Outstr

Newline

sub cx,cx; хороший способ для cx:=0

L: inint ax

cmp ax,0; проверка конца ввода

je Pech; на вывод результата

cmp ax,2

jb L

cmp ax,100

ja L; проверка диапазона

cmp cx,300; в стеке уже 300 чисел?

je Err

push ax; запись числа в стек

inc cx; счетчик количества чисел в стеке

jmp L

Pech: jcxz Kon; нет чисел в стеке

mov dx, offset T2

Outstr

L1: pop ax

outword ax,10; ширина поля вывода=10

loop L1

Kon: finish

Err: mov dx,T3

Outstr

Finish

code ends

end program_start

 

Заметим, что в нашей программе нет собственно переменных, а только строковые константы, поэтому мы не описали отдельный сегмент данных, а разместили эти строковые константы в кодовом сегменте. Можно считать, что сегменты данных и кода в нашей программе совмещены. Мы разместили строковые константы в начале сегмента кода, перед входной точкой программы, но с таким же успехом можно разместить эти строки и в конце кодового сегмента после последней макрокоманды finish.

Обратите внимание, как мы выбрали размер стека: 128 байт мы зарезервировали для системных нужд (как уже упоминалось, стеком будут пользоваться и другие программы, подробнее об этом будет рассказано далее) и 300 слов мы отвели для хранения введённых нами чисел. При реализации этой программы может возникнуть желание определять, что введено слишком много чисел, анализируя переполнение стека. Другими словами, вместо проверки

cmp cx,300; в стеке уже 300 чисел?

je Err

казалось бы, можно было поставить проверку исчерпания стека

cmp SP,2; стек уже полон?

jb Err

Это, однако, может повлечь за собой тяжёлую ошибку. Дело в том, что в стеке может остаться совсем мало места, а, как мы знаем, стек использует не только наша, но и другие программы, которые в этом случае будут работать неправильно.

Теперь, после того, как мы научились работать со стеком, вернёмся к дальнейшему рассмотрению команд перехода.







Date: 2015-10-18; view: 389; Нарушение авторских прав



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию