6822

Исследование организации переходов в программе

Лабораторная работа

Информатика, кибернетика и программирование

Исследование организации переходов в программе Контрольные вопросы Назовите три типа команды безусловного перехода. JMP - переход безусловный: переход типа short (короткий переход) - если адрес перехода находится в пределах от...

Русский

2013-01-08

213.5 KB

15 чел.

Исследование организации переходов в программе

Контрольные вопросы

  1.  Назовите три типа команды безусловного перехода.

JMP – переход безусловный:

  •  переход типа short (короткий переход) — если адрес перехода находится в пр еделах от -127 до +128 байт от команды JMP;
    •  переход типа near (ближний переход) — если адрес перехода находится в том же сегменте памяти, что и команда JMP;
    •  переход типа far (дальний переход) — если адрес перехода находится в другом сегменте. Дальний переход может выполняться и в тот же самый сегмент, если в сегментной части операнда указано число, совпадающее с текущим значением CS;

  1.            Какой может быть длина перехода в разных типах команды JMP?

Команда JMP для перехода в пределах -127 до + 127 байт имеет тип SHORT. Ассемблер генерирует в этом случае однобайтовый операнд от 00 до FF. Команда JMP, превосходящая эти пределы, получает тип FAR, для которого генерируется другой машинный код и двухбайтный операнд. Ассемблер в первом просмотре исходной программы определяет длину каждой команды. Однако команда JMP может быть длиной два или три байта. Если к просмотру команды JMP ассемблер уже вычислил значение операнда то он генерирует двухбайтную команду, а если не вычислил то трехбайтную.    

         JMP NAME; безусловный переход к команде с символическим адресом

         NAME.

          jmp short name – переход к метке name, отстоящей не более

          чем на – 128 или +127 байтов.

          jmp near name – переход к метке name,  отстоящей не более

          чем на 65535 байтов, в одном сегменте.

          jmp name – аналогично jmp near name;

 

  1.  Содержимое каких регистров модифицируется при выполнении безусловных переходов разных типов?

                 Команда jmp в зависимости от типа своего операнда изменяет

        содержимое либо только одного регистра eip, либо обоих регистров cs и

        eip.

        Если операнд в команде jmp — метка в текущем сегменте команд, то

        ассемблер формирует машинную команду, операнд которой является

        значением со знаком, являющимся смещением перехода относительно

        следующей за jmp команды. При этом виде перехода изменяется только

        регистр eip/ip.

  1.  Какова максимальная длина условного перехода?

Команда условного перехода содержит значение расстояния между концом команды условного перехода и операндом, которое приближается к командному указателю. Это расстояние должно быть в пределах – 128 до + 127 байт. В случае перехода за эти граници ассемблер выдаст сообщение об ошибке.  

  1.  Каким образом может быть указан адрес перехода?

          JA NAME или JNBE NAME – условный переход, если, например, в

         результате сравнения CMP DST, SRC приемник по абсолютной

         величине больше источника, то перейти к метке name.

         JB NAME или JNAE NAME – условный переход, если, например, в

         результате сравнения CMP DST, SRC приемник по абсолютной

         величине меньше источника, то перейти к метке name команды

         выполняются по результатам выполнения операций над беззнаковыми

         числами.

         JZ NAME или JE NAME – перейти, если результат операции влияющей

         на флаг нуля - нулевой (переход по «нулю»).

         JNZ NAME или JNE NAME – переход по «не нулю» команды

         выполняются по результатам выполнения операций над

         числами со знаком.

        Адрес перехода можно указать следующим образом.

   Например:

   JA  0AFH, JB  0BAH, JC  02CH.

   Или так:

        Сравнение  чисел bigval_1 и bigval_2

        mov        eax,dword ptr bigval_1[8]

        cmp        eax,dword ptr bigval_2[8] ; сравнить старшие слова

        jg         greater – переход

        jl         less – переход

        mov        eax,dword ptr bigval_1[4]

        cmp        eax,dword ptr bigval_2[4] ; сравнить средние слова

        jg         greater – переход 

        jl         less – переход

        mov        eax,dword ptr bigval_1

        cmp        eax,dword ptr bigval_2    ; сравнить младшие слова

        jg         greater – переход  

        jl         less – переход 

        equal:

        greater:

        less:

  1.  Какие флаги могут быть использованы в командах условного перехода после выполнения команды сложения?

         Команда сложения устанавливает в ноль флаги of и cf, если размер

         результата соответствует регистру назначения. Если эти флаги отличны

         от нуля, то это означает, что результат слишком велик для отведенных

         ему регистром назначения рамок и необходимо указать больший по

         размеру регистр для успешного завершения данной операции

         умножения.

  1.  Приведите возможные команды условных переходов, если после сравнения беззнаковых чисел D1 и D2 оказалось:

    а)  D1=D2 – JE или JZ

    б)  D1 D2 – JBE или JNA

    в)  D1>D2 – JA или JNBE   

  1.  Приведите возможные команды условных переходов, если после сравнения чисел со знаками P1 и P2 оказалось:  

     а)  Р1 Р2 – JNE или JNZ

     б)  Р1<Р2 – JL или JNGE  

     в)  Р1 Р2 – JGE или JNL

  1.  Какие команды могут использоваться для организации циклов?

LOOP, LOOPZ, LOOPE – команды повторения цикла.

LOOPNE, LOOPNZ – выход из цикла по «нулю».  

  1.   Какова максимальная длина переходов при организации циклов?

         Смещение метки, являющейся операндом LOOP, не должно выходить

         из диапазона -128...+127 байт. Это смещение, как и в командах

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

        адреса следующей за LOOP команды.

  1.   Какие признаки, кроме СХ=0, могут быть использованы при организации циклов?

         LOOP NAME – эта команда неявно уменьшает (CX) на 1 и

          осуществляет переход к ближней метке, если (CX) не равно 0.

          Например:

          ....

          mov cx,64h – блок операторов от метки syc до loop syc

          syc:   .... – будет выполнен 100 раз.

          ....

          loop syc

          LOOPZ NAME или LOOPE NAME кроме того осуществляет проверку

          ZF флага. Поэтому цикл заканчивается по условию, когда (CX) = 0 или

          (ZF) = 0 или и то и другое вместе. Т.е. эта команда служит для                   

          обнаружения первого ненулевого результата.

          LOOPNZ, LOOPNE - выход из цикла по «нулю».

  1.   Как осуществляется переход к процедурам разных типов?

          CALL SUBR – вызов процедуры с адресом SUBR.

  1.   Назовите варианты команды возврата из процедуры.

RET – возврат из подпрограммы к оператору следующему

         непосредственно за CALL.

 

Задание для выполнения программы

       Ввиду того, что девятого варианта нет,  пришлось выполнить все имеющиеся шесть вариантов.

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

   она обеспечивала:

        

№ варианта

Заменить

1

а)  ‘a’ на  ‘A

б)  все заглавные  строчными

2

а) строчные от ‘a’ до ‘f’ заглавными

б)  все заглавные строчными

3

а) строчные ‘b’и’c’ заглавными

б)  все заглавные строчными

4

а) строчные от ‘f’ до’z’ заглавными

б)  все заглавные строчными

5

а)символ  ’( ’  на символ  ‘) ’

б)  все заглавные строчными

6

а) ‘Z’ на ‘z

б)  все заглавные строчными

 

Листинг программы VAR 1

 TITLE  VAR1 - ЗАМЕНА a ­  A, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ

;---------------------------------------------------------------------------------------

Сегмент данных

DATASG    SEGMENT   PARA

VAR       DB         ' Вариант № 1              ' ,13,10,' ------------',13,10,'$'

VARR    DB         'Исходный текст         ' ,13,10,' -------------',13,10,'$'

TEXTT   DB ' Serduk Vladimir LEONIDOVICH' ,13,10, '---',13,10,'$'

VAR_1   DB         ' Замена всех А на а ' ,13,10,'$'

VAR_2     DB       'в) Замена всех заглавных строчными' ,13,10,'$'  

MYTEXT   DB 'Serduk Vladimir LEONIDOVICH' ,13,10, '----------',13,10,'$'

 DATASG ENDS

Сегмент стека

STACKSG  SEGMENT      'Stack'  

 DB 27 DUP(?)

STACKSG   ENDS

Назначение соответствия между адресами сегментов и сегментными регистрами  

 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG

Сегмент кода

CODESG SEGMENT PARA  'Code'

BEGIN PROC  FAR

;--------------------------------------------------------------------------------------;  

 MOV  AH, 00H;AH        функция задания режима экрана 

                   MOV  AL, 03H;AL        ЦВ текстовый, 25 строк по 80 знаков.

                   INT  10H    

                   

;--------------------------------------------------------------------------------------;

 PUSH  DS                            в стек

 SUB  AX,AX                              обнулили AX

 PUSH  AX                          AX в стек

 MOV  AX, DATASG        DATASG в AX

 MOV  DS, AX                   AX в DS

 LEA  BX, MYTEXT                 вывод MYTEXE в BX

 MOV  CX, 20H                20H в CX, резервируем память в CX   

;-----------------------------------------------------------------------------------;  

          LEA  DX,VAR                          вывод варианта 

 MOV  AH, 09H                вывод на экран

 INT  21H                                  прерывание 21H 

;-----------------------------------------------------------------------------------;

                   

 LEA  DX,VARR                        вывод VARR в dx

 MOV  AH, 09H                 вывод на экран

 INT  21H                                   прерывание 21H 

 LEA  DX,TEXTT                       вывод TEXTT 

 MOV  AH, 09H                  вывод на экран

 INT  21H                                   прерывание 21H 

 LEA  DX,VAR_1                       вывод VAR_1 

 MOV  AH, 09H                 вывод на экран

 INT  21H                                  прерывание 21H 

 

 

;-----------------------------------------------------------------------------------;

Метка – MT1

MT1:

                   MOV AH, [BX]                     BX т.е текст MYTEXT в AH побайтно

 CMP  AH, 61H                      сравнение AH с a – малое английское

 JB  MT2                              переход на МТ2   

 CMP  AH, 61H                       сравнение AH c а – малое английское

 JA  MT2                             переход на МТ2  

 CALL COR                   вызов процедуры  COR

Метка – MT2  

MT2:

                   INC  BX                                  увеличиваем BX на 1  

 LOOP MT1                              цикл со счетчиком если 1 то на МТ1

                                                                     иначе дальше

 LEA  DX, MYTEXT               вывод MYTEXE

 MOV  AH, 09H               вывод на экран

 INT  21H                                прерывание 21H 

 JMP       WERT                       безусловный переход на WERT

;----------------------------------------------------------------------------;  

 RET                                          выход из процедуры

BEGIN   ENDP                                            конец процедуры   

COR PROC  NEAR                           процедура  COR  

 NOP                                         нет операции

 AND  AH, 0DFH                     преобразование строчных букв в

                                                                    заглавные – логическое умножение

 MOV  [BX], AH             AH в BX 

 RET                                          выход из процедуры

COR ENDP                                                 конец процедуры

 

;----------------------------------------------------------------------------;

;----------------------------------------------------------------------------;

Метка.

WERT:

BEGINN PROC FAR

 

 PUSH  DS                           в стек

 SUB  AX,AX                              обнулили AX

 PUSH  AX                          AX в стек

 MOV  AX, DATASG        DATASG в AX

 MOV  DS, AX                   AX в DS

 LEA  BX, MYTEXT                 вывод MYTEXE в BX

 MOV  CX, 20H                 20H в CX резервируем память в CX   

;-----------------------------------------------------------------------------------;  

          LEA  DX,VAR_2                      Вывод VAR_2 

 MOV  AH, 09H                вывод на экран

 INT  21H                                  прерывание 21H 

;-----------------------------------------------------------------------------------;

Метка МТТ1

MTT1:

                   MOV  AH, [BX]                 MYTEXT в AH побайтно

 CMP  AH, 41H                  сравнение AH с А – большой английское

 JB  MTT2                      переход на МТТ2   

 CMP  AH, 5AH                сравнение AH c Z – большой английское

 JA  MTT2                      переход по сравнению на МТТ2  

 CALL CORR           вызов процедуры  CORR

Метка МТТ2

MTT2:

                   INC  BX                             увеличиваем BX на 1

 LOOP MTT1                      цикл со счетчиком если 1 то на МТТ1

                                                               иначе дальше

 LEA  DX, MYTEXT         вывод MYTEXE

 MOV  AH, 09H         вывод на экран

 INT  21H                           вызов прерывания 21H

 JMP       TREW                  безусловный переход на TREW

;----------------------------------------------------------------------------;      

 RET                                    выход из процедуры

 

 BEGINN   ENDP                        конец процедуры       

CORR PROC  NEAR           процедура COR  

 NOP                                   нет операции

 ADD AH,20H                    преобразовать заглавные в строчные

 MOV  [BX], AH       AH в BX

 RET                                    выход из процедуры

CORR ENDP                                 конец процедуры

;-------------------------------------------------------------   

TREW:

           mov ax,00h

  int 16h                                        ждем нажатие любой клавиши

;-------------------------------------------------------------              

           MOV AX,4C00H     символьная функция возврата  

           INT 21H                         в MS DOS.  

                         

CODESG ENDS

 END BEGIN

Результат работы программы VAR 1

 

Листинг программы VAR 2

 TITLE  VAR1 - ЗАМЕНА a ­  A, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ

;---------------------------------------------------------------------------------------

Сегмент данных

DATASG    SEGMENT   PARA

VAR       DB         ' Вариант № 1              ' ,13,10,' ------------',13,10,'$'

VARR    DB         'Исходный текст         ' ,13,10,' -------------',13,10,'$'

TEXTT   DB ' Serduk Vladimir LEONIDOVICH' ,13,10, '---',13,10,'$'

VAR_1   DB         ' Замена всех А на а ' ,13,10,'$'

VAR_2     DB       'в) Замена всех заглавных строчными' ,13,10,'$'  

MYTEXT   DB 'Serduk Vladimir LEONIDOVICH' ,13,10, '----------',13,10,'$'

 DATASG ENDS

Сегмент стека

STACKSG  SEGMENT      'Stack'  

 DB 27 DUP(?)

STACKSG   ENDS

Назначение соответствия между адресами сегментов и сегментными регистрами  

 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG

Сегмент кода

CODESG SEGMENT PARA  'Code'

BEGIN PROC  FAR

……………………………

Метка – MT1

MT1:

                   MOV AH, [BX]                     BX т.е текст MYTEXT в AH побайтно

 CMP  AH, 61H                      сравнение AH с a – малое английское

 JB  MT2                              переход на МТ2   

 CMP  AH, 66H                       сравнение AH c f – малое английское

 JA  MT2                             переход на МТ2  

 CALL COR                   вызов процедуры  COR

Метка – MT2  

MT2:

                   INC  BX                                  увеличиваем BX на 1  

 LOOP MT1                              цикл со счетчиком если 1 то на МТ1

                                                                     иначе дальше

 LEA  DX, MYTEXT               вывод MYTEXE

 MOV  AH, 09H               вывод на экран

 INT  21H                                прерывание 21H 

 JMP       WERT                       безусловный переход на WERT

;----------------------------------------------------------------------------;  

 RET                                          выход из процедуры

BEGIN   ENDP                                            конец процедуры   

COR PROC  NEAR                           процедура  COR  

 NOP                                         нет операции

 AND  AH, 0DFH                     преобразование строчных букв в

                                                                    заглавные – логическое умножение

 MOV  [BX], AH             AH в BX 

 RET                                          выход из процедуры

COR ENDP                                                 конец процедуры

……………………………………………………………………..

 

BEGIN   ENDP                                            конец процедуры   

……………………………………………………………………..

;-------------------------------------------------------------   

TREW:

           mov ax,00h

  int 16h                                        ждем нажатие любой клавиши

;-------------------------------------------------------------              

           MOV AX,4C00H     символьная функция возврата  

           INT 21H                         в MS DOS.  

                         

CODESG ENDS

 END BEGIN

 

Результат работы программы VAR 2

Листинг программы VAR 3

 TITLE  VAR1 - ЗАМЕНА a ­  A, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ

;---------------------------------------------------------------------------------------

Сегмент данных

DATASG    SEGMENT   PARA

VAR       DB         ' Вариант № 1              ' ,13,10,' ------------',13,10,'$'

VARR    DB         'Исходный текст         ' ,13,10,' -------------',13,10,'$'

TEXTT   DB ' Serduk Vladimir LEONIDOVICH' ,13,10, '---',13,10,'$'

VAR_1   DB         ' Замена всех А на а ' ,13,10,'$'

VAR_2     DB       'в) Замена всех заглавных строчными' ,13,10,'$'  

MYTEXT   DB 'Serduk Vladimir LEONIDOVICH' ,13,10, '----------',13,10,'$'

 DATASG ENDS

Сегмент стека

STACKSG  SEGMENT      'Stack'  

 DB 27 DUP(?)

STACKSG   ENDS

Назначение соответствия между адресами сегментов и сегментными регистрами  

 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG

Сегмент кода

CODESG SEGMENT PARA  'Code'

BEGIN PROC  FAR

…………………………………………………………………..

Метка – MT1

MT1:

                   MOV AH, [BX]                     BX т.е текст MYTEXT в AH побайтно

 CMP  AH, 61H                      сравнение AH с b – малое английское

 JB  MT2                              переход на МТ2   

 CMP  AH, 66H                       сравнение AH c c – малое английское

 JA  MT2                             переход на МТ2  

 CALL COR                   вызов процедуры  COR

Метка – MT2  

MT2:

                   INC  BX                                  увеличиваем BX на 1  

 LOOP MT1                              цикл со счетчиком если 1 то на МТ1

                                                                     иначе дальше

 LEA  DX, MYTEXT               вывод MYTEXE

 MOV  AH, 09H               вывод на экран

 INT  21H                                прерывание 21H 

 JMP       WERT                       безусловный переход на WERT

;----------------------------------------------------------------------------;  

 RET                                          выход из процедуры

BEGIN   ENDP                                            конец процедуры   

COR PROC  NEAR                           процедура  COR  

 NOP                                         нет операции

 AND  AH, 0DFH                     преобразование строчных букв в

                                                                    заглавные – логическое умножение

 MOV  [BX], AH             AH в BX 

 RET                                          выход из процедуры

COR ENDP                                                 конец процедуры

……………………………………………………………………..

 

BEGIN   ENDP                                            конец процедуры   

……………………………………………………………………..

;-------------------------------------------------------------   

TREW:

           mov ax,00h

  int 16h                                        ждем нажатие любой клавиши

;-------------------------------------------------------------              

           MOV AX,4C00H     символьная функция возврата  

           INT 21H                         в MS DOS.  

                         

CODESG ENDS

 END BEGIN

 

Результат работы программы VAR 3

 

 

Листинг программы VAR 4

 TITLE  VAR1 - ЗАМЕНА a ­  A, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ

;---------------------------------------------------------------------------------------

Сегмент данных

DATASG    SEGMENT   PARA

VAR       DB         ' Вариант № 1              ' ,13,10,' ------------',13,10,'$'

VARR    DB         'Исходный текст         ' ,13,10,' -------------',13,10,'$'

TEXTT   DB ' Serduk Vladimir LEONIDOVICH' ,13,10, '---',13,10,'$'

VAR_1   DB         ' Замена всех А на а ' ,13,10,'$'

VAR_2     DB       'в) Замена всех заглавных строчными' ,13,10,'$'  

MYTEXT   DB 'Serduk Vladimir LEONIDOVICH' ,13,10, '----------',13,10,'$'

 DATASG ENDS

Сегмент стека

STACKSG  SEGMENT      'Stack'  

 DB 27 DUP(?)

STACKSG   ENDS

Назначение соответствия между адресами сегментов и сегментными регистрами  

 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG

Сегмент кода

CODESG SEGMENT PARA  'Code'

BEGIN PROC  FAR

…………………………………………………………………..

Метка – MT1

MT1:

                   MOV AH, [BX]                     BX т.е текст MYTEXT в AH побайтно

 CMP  AH, 61H                      сравнение AH с f – малое английское

 JB  MT2                              переход на МТ2   

 CMP  AH, 66H                       сравнение AH c z – малое английское

 JA  MT2                             переход на МТ2  

 CALL COR                   вызов процедуры  COR

Метка – MT2  

MT2:

                   INC  BX                                  увеличиваем BX на 1  

 LOOP MT1                              цикл со счетчиком если 1 то на МТ1

                                                                     иначе дальше

 LEA  DX, MYTEXT               вывод MYTEXE

 MOV  AH, 09H               вывод на экран

 INT  21H                                прерывание 21H 

 JMP       WERT                       безусловный переход на WERT

;----------------------------------------------------------------------------;  

 RET                                          выход из процедуры

BEGIN   ENDP                                            конец процедуры   

COR PROC  NEAR                           процедура  COR  

 NOP                                         нет операции

 AND  AH, 0DFH                     преобразование строчных букв в

                                                                    заглавные – логическое умножение

 MOV  [BX], AH             AH в BX 

 RET                                          выход из процедуры

COR ENDP                                                 конец процедуры

……………………………………………………………………..

 

BEGIN   ENDP                                            конец процедуры   

……………………………………………………………………..

;-------------------------------------------------------------   

TREW:

           mov ax,00h

  int 16h                                        ждем нажатие любой клавиши

;-------------------------------------------------------------              

           MOV AX,4C00H     символьная функция возврата  

           INT 21H                         в MS DOS.  

                         

CODESG ENDS

 END BEGIN

 

Результат работы программы VAR 4

 

Листинг программы VAR 5

 TITLE  VAR1 - ЗАМЕНА a ­  A, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ

;---------------------------------------------------------------------------------------

Сегмент данных

DATASG    SEGMENT   PARA

VAR       DB         ' Вариант № 1              ' ,13,10,' ------------',13,10,'$'

VARR    DB         'Исходный текст         ' ,13,10,' -------------',13,10,'$'

TEXTT   DB ' Serduk Vladimir LEONIDOVICH' ,13,10, '---',13,10,'$'

VAR_1   DB         ' Замена всех А на а ' ,13,10,'$'

VAR_2     DB       'в) Замена всех заглавных строчными' ,13,10,'$'  

MYTEXT   DB 'Serduk Vladimir LEONIDOVICH' ,13,10, '----------',13,10,'$'

 DATASG ENDS

Сегмент стека

STACKSG  SEGMENT      'Stack'  

 DB 27 DUP(?)

STACKSG   ENDS

Назначение соответствия между адресами сегментов и сегментными регистрами  

 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG

Сегмент кода

CODESG SEGMENT PARA  'Code'

BEGIN PROC  FAR

…………………………………………………………………..

Метка – MT1

MT1:

                   MOV AH, [BX]                     BX т.е текст MYTEXT в AH побайтно

 CMP  AH, 61H                      сравнение AH с символом (

 JB  MT2                              переход на МТ2   

 CMP  AH, 66H                       сравнение AH c символом (

 JA  MT2                             переход на МТ2  

 CALL COR                   вызов процедуры  COR

Метка – MT2  

MT2:

                   INC  BX                                  увеличиваем BX на 1  

 LOOP MT1                              цикл со счетчиком если 1 то на МТ1

                                                                     иначе дальше

 LEA  DX, MYTEXT               вывод MYTEXE

 MOV  AH, 09H               вывод на экран

 INT  21H                                прерывание 21H 

 JMP       WERT                       безусловный переход на WERT

;----------------------------------------------------------------------------;  

 RET                                          выход из процедуры

BEGIN   ENDP                                            конец процедуры   

COR PROC  NEAR                           процедура  COR  

 NOP                                         нет операции

 AND  AH, 0DFH                     преобразование символа ‘(‘ в символ

                                                                     ‘)’ – логическое умножение

 MOV  [BX], AH             AH в BX 

 RET                                          выход из процедуры

COR ENDP                                                 конец процедуры

……………………………………………………………………..

 

BEGIN   ENDP                                            конец процедуры   

……………………………………………………………………..

;-------------------------------------------------------------   

TREW:

           mov ax,00h

  int 16h                                        ждем нажатие любой клавиши

;-------------------------------------------------------------              

           MOV AX,4C00H     символьная функция возврата  

           INT 21H                         в MS DOS.  

                         

CODESG ENDS

 END BEGIN

 

Результат работы программы VAR 5

 

Листинг программы VAR 6

 TITLE  VAR1 - ЗАМЕНА a ­  A, ВСЕ ЗАГЛАВНЫЕ СТРОЧНЫМИ

;---------------------------------------------------------------------------------------

Сегмент данных

DATASG    SEGMENT   PARA

VAR       DB         ' Вариант № 1              ' ,13,10,' ------------',13,10,'$'

VARR    DB         'Исходный текст         ' ,13,10,' -------------',13,10,'$'

TEXTT   DB ' Serduk Vladimir LEONIDOVICH' ,13,10, '---',13,10,'$'

VAR_1   DB         ' Замена всех А на а ' ,13,10,'$'

VAR_2     DB       'в) Замена всех заглавных строчными' ,13,10,'$'  

MYTEXT   DB 'Serduk Vladimir LEONIDOVICH' ,13,10, '----------',13,10,'$'

 DATASG ENDS

Сегмент стека

STACKSG  SEGMENT      'Stack'  

 DB 27 DUP(?)

STACKSG   ENDS

Назначение соответствия между адресами сегментов и сегментными регистрами  

 ASSUME SS:STACKSG, CS:CODESG,  DS:DATASG

Сегмент кода

CODESG SEGMENT PARA  'Code'

BEGIN PROC  FAR

…………………………………………………………………..

Метка – MT1

MT1:

                   MOV AH, [BX]                     BX т.е текст MYTEXT в AH побайтно

 CMP  AH, 61H                      сравнение AH с символом Z заглавное

 JB  MT2                              переход на МТ2   

 CMP  AH, 66H                      сравнение AH c символом Z заглавное

 JA  MT2                             переход на МТ2  

 CALL COR                   вызов процедуры  COR

Метка – MT2  

MT2:

                   INC  BX                                  увеличиваем BX на 1  

 LOOP MT1                              цикл со счетчиком если 1 то на МТ1

                                                                     иначе дальше

 LEA  DX, MYTEXT               вывод MYTEXE

 MOV  AH, 09H               вывод на экран

 INT  21H                                прерывание 21H

 JMP       WERT                       безусловный переход на WERT

;----------------------------------------------------------------------------;  

 RET                                          выход из процедуры

BEGIN   ENDP                                            конец процедуры   

COR PROC  NEAR                           процедура  COR  

 NOP                                         нет операции 

 AND  AH, 0DFH                     преобразовать символа Z –большое

                                                                    в z малое

 MOV  [BX], AH             AH в BX

 RET                                          выход из процедуры

COR ENDP                                                 конец процедуры

……………………………………………………………………..

 

BEGIN   ENDP                                            конец процедуры   

……………………………………………………………………..

;-------------------------------------------------------------   

TREW:

           mov ax,00h

  int 16h                                        ждем нажатие любой клавиши

;-------------------------------------------------------------              

           MOV AX,4C00H     символьная функция возврата 

           INT 21H                         в MS DOS.  

                         

CODESG ENDS

END BEGIN

 

Результат работы программы VAR 6

 


 

А также другие работы, которые могут Вас заинтересовать

63797. Смертность как медико–социальная проблема 34 KB
  Изучается по свидетельствам о смерти. В 3 х дневный срок со дня смерти регистрация умерших в загсе или поселковом совете. Регистрация проводится на основании медицинских свидетельств о смерти в загсе...
63798. Характеристика детской смертности 28 KB
  Показатель младенческой С = Число детей умерших до года Число родившихся 1000; Показатель мл. С по Ратсу для сельского населения = Число детей умерших за год 012 мес. С по Вахитову Альбицкому для города = Число умерших в возрасте до года 1000 4 5 от данного года 1 5 от предыдущего года...
63800. Заболеваемость и методы её изучения 28.5 KB
  Населения характеризует распространение заболеваний среди всего населения или отдельных его групп в расчете на 1000 или 10000 человек. имеют важнейшее значение для научной организации системы медико-санитарного обслуживания населения...
63801. Характеристика уровней и структур причин заболеваемости 27 KB
  В структуре причин с возрастом все большую роль играют несчастные случаи и инфекционные заболевания. У женщин до 20 лет болезни связанные с беременностью с возрастом больше проявляются хронические заболевания. После 60 лет выявляются на 1 больного 25 3 заболевания...
63802. Заболеваемость с временной утратой трудоспособности 26 KB
  Единицей наблюдения при изучении заболеваемости с ВУТ является каждый случай временной нетрудоспособности в связи с заболеванием или травмой в данном году. Учетным документом служит листок нетрудоспособности который является не только медицинским...
63803. Инвалидность и инвалидизация населения 24.5 KB
  В России средний уровень инвалидности колеблется от 40 до 49 на 10000 жителей. 3 группы инвалидности: 1 группа полная утрата способности к регулярному профессиональному труду в обычных условиях и нуждающихся в постоянном уходе.
63805. Организация медицинской помощи городскому населению 25.5 KB
  В настоящее время в России основными стационарными учреждениями являются центральные районные городские областные и республиканские больницы. В первую группу входят больницы которые обслуживают только местное население и выполняют локальные функции.