Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 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; Нарушение авторских прав |