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

db128 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

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

L: inint ax

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

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

cmp ax,2

jb L

cmp ax,100

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

cmpcx,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 слов мы отвели для хранения введённых нами чисел. При реализации этой программы может возникнуть желание определять, что введено слишком много чисел, анализируя переполнение стека. Другими словами, вместо проверки

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

je Err

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

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

jb Err

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

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








Дата добавления: 2015-10-05; просмотров: 1040;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.