Служба спасения студентов
Служба спасения для студентов

СибГУТИ Лабораторная 2 Архитектура ЭВМ скачать бесплатно

Скачать бесплатно
ИССЛЕДОВАНИЕ ОРГАНИЗАЦИИ ПЕРЕХОДОВ В ПРОГРАММЕ
 
1. ЦЕЛЬ РАБОТЫ
   Изучение механизма передачи управления в программе;
   получение практических навыков отладки разветвляющихся программ.
 
2. РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
2.1. Абель П.  Язык Ассемблера для IBM PC и программирования /Пер. c англ. М.:Высш.шк., 1992,c 93-115.
2.2. Белецкий Я. Энциклопедия языка Си: Пер. c польск.-М.:Мир,1992,с 394-406.
 
3. ПОДГОТОВКА К РАБОТЕ
3.1. Изучить методические указания.
3.2. Подготовить ответы на контрольные вопросы.
3.3. Проанализировать приведенную ниже программу CHANGE, дополнить каждую команду комментарием.
3.4. Ввести свой собственный текст на английском языке, содержащий строчные и заглавные буквы.
3.5. Изменить программу так, чтобы в соответствии с вариантом задания 
(Таб 5.1.) она обеспечивала:
Таблица 5.1.
№варианта Заменить
8 а) строчные ‘b’и’c’ заглавными
б) все заглавные строчными
 
 
 
 
 
Текст программы “lab5_a.asm” с комментариями
 
 
;---------------------------------------------------------------------------------------
 
DATASG    SEGMENT   PARA
MYTEXT   DB 'DbcddJJJJjbHHHHHcbkkkkuubUC' ,13,10, '$'
DATASG ENDS
 
STACKSG SEGMENT      'Stack'
DB 12 DUP(?)
STACKSG   ENDS
 
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX, DATASG
MOV DS, AX
LEA BX, MYTEXT ; Записываем в BX адрес строки
MOV CX, 27   ; 27 - количество символов в строке
MT1: MOV AH, [BX] ; Заносим в AH текущий символ строки
CMP AH, 62H  ; Сравниваем символ строки с 'b'
JE      MT3
CMP AH, 63H  ; Сравниваем символ строки с 'c'
JE      MT3
JMP MT2      ; Если символ строки не равен 'b' и 'c', то пропускаем
MT3:
CALL COR      ; Вызываем процедуру изменения символа строки
MT2: INC BX       ; Смещаемся на следующий символ строки
LOOP MT1         ; Идем на начало цикла
LEA DX, MYTEXT
MOV AH, 09H
INT 21H      ; Выводим строку на экран
                MOV AH, 08h      ; Ожидаем нажатия любой клавиши
                INT 21H
RET
BEGIN   ENDP
COR PROC NEAR
NOP
SUB AH, 32   ; Уменьшаем код символа на 32
MOV [BX], AH ; Записываем измененный символ в строку
RET
COR ENDP
CODESG ENDS
END BEGIN
Текст программы “lab5_b.asm”  с комментариями
;---------------------------------------------------------------------------------------
 
DATASG    SEGMENT   PARA
MYTEXT   DB 'DbcddJJJJjbHHHHHcbkkkkuubUC' ,13,10, '$'
DATASG ENDS
STACKSG SEGMENT      'Stack'
DB 12 DUP(?)
STACKSG   ENDS
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG
PUSH DS
SUB AX,AX
PUSH AX
MOV AX, DATASG
MOV DS, AX
LEA BX, MYTEXT ; Записываем в BX адрес строки
MOV CX, 27   ; 27 - количество символов в строке
MT1: MOV AH, [BX] ; Заносим в AH текущий символ строки
CMP AH, 41H  ; Сравниваем символ строки с 'A'
JB MT2      ; Если символ строки меньше 'A', то пропускаем
CMP AH, 5AH  ; Сравниваем символ строки с 'Z'
JA MT2      ; Если символ строки больше 'Z', то пропускаем
CALL COR      ; Вызываем процедуру изменения символа строки
MT2: INC BX       ; Смещаемся на следующий символ строки
LOOP MT1         ; Идем на начало цикла
LEA DX, MYTEXT
MOV AH, 09H
INT 21H      ; Выводим строку на экран
                MOV AH, 08h      ; Ожидаем нажатия любой клавиши
                INT 21H
RET
BEGIN   ENDP
COR PROC NEAR
NOP
ADD AH, 32   ; Увеличиваем код символа на 32
MOV [BX], AH ; Записываем измененный символ в строку
RET
COR ENDP
CODESG ENDS
END BEGIN
 
Контрольные вопросы
1. Назовите три типа команды безусловного перехода.
JMP SHORT L – близкий короткий переход.
JMP L – близкий длинный переход.
JMP FAR PTR L – дальний переход.
2. Какой может быть длина перехода в разных типах команды JMP?
JMP SHORT L – от -128 до +127.
JMP L – от -215 до 215 - 1.
JMP FAR PTR L – в другой сегмент.
3. Содержимое каких регистров модифицируется при выполнении безусловных переходов разных типов?
JMP SHORT L – модифицирует регистр ip.
JMP L – модифицирует регистр ip.
JMP FAR PTR L – модифицирует регистры cs и ip.
4. Какова максимальная длина условного перехода?
От –128 до + 127 байт.  
5. Каким образом может быть указан адрес перехода?
Адрес перехода может быть указан меткой.
Командой JMP можно еще сделать косвенный переход:
JMP r16 или JMP m16
6. Какие флаги могут быть использованы в командах условного перехода после выполнения команды сложения?
Это флаги: ZF, SF, CF, OF.
7. Приведите возможные команды условных переходов, если после сравнения беззнаковых чисел D1 и D2 оказалось: 
     а)  D1=D2 – JE или JZ
     б)  D1 D2 – JBE или JNA
     в)  D1>D2 – JA или JNBE   
8. Приведите возможные команды условных переходов, если после сравнения чисел со знаками P1 и P2 оказалось:  
      а)  Р1 Р2 – JNE или JNZ
      б)  Р1<Р2 – JL или JNGE  
      в)  Р1  Р2 – JGE или JNL
9. Какие команды могут использоваться для организации циклов?
LOOP, LOOPE, LOOPNE, LOOPZ, LOOPNZ.  
10. Какова максимальная длина переходов при организации циклов?
          От –128 до + 127 байт.
11. Какие признаки, кроме СХ=0, могут быть использованы при организации циклов?
Команды LOOPZ и LOOPE осуществляет проверку флага ZF. Цикл заканчивается по условию, когда (CX) = 0 или (ZF) = 0. 
Команды LOOPNZ и LOOPNE осуществляет проверку флага ZF. Цикл заканчивается по условию, когда (CX) = 0 или (ZF) = 1. 
12. Как осуществляется переход к процедурам разных типов?
Если физический адрес ячейки памяти, содержащей команду CALL, и начальная ячейка процедуры лежат внутри сегмента, то для передачи управления процедуре используется внутрисегментная команда CALL. Адрес возврата (содержимое регистра IP) загружается в текущий стек.
Программа может передавать управление процедуре, находящейся в произвольном месте памяти, используя межсегментную команду CALL. Выполняя ее, процессор автоматически осуществляет следующие операции:
указатель стека уменьшается на 2. Содержимое регистра CS, базовый адрес текущего командного сегмента, переносится в ячейку  -  вершину стека;
указатель стека вновь уменьшается на 2. В стек загружается перемещаемый адрес команды (содержимое регистра IP), следующей за командой CALL.
13. Назовите варианты команды возврата из процедуры.
Последней командой, выполняемой перед выходом из процедуры, должна быть команда RET, по которой содержимое вершины стека (являющееся адресом возврата) считывается в указатель команд IP.
Последней машинной командой, выполняемой перед выходом из процедуры, вызванной межсегментной командой вызова, должна быть команда RET. При осуществлении команды межсегментного возврата процессор автоматически выполняет следующие операции:
слово из вершины стека  считывается в указатель команд IP. Для определения новой вершины стека содержимое регистра SP увеличивается на 2;
слово, занимающее новую вершину стека, переписывается обратно в регистр CS. Содержимое регистра SP вновь возрастает на 2.
Заявка на расчет