Перемещаемость кода. Анализ ехе- и сom-файлов, страница 2

0E4D:0127 88266802      MOV         [0268],AH                         

0E4D:012B 50            PUSH  AX                                

0E4D:012C 1E            PUSH  DS                                

0E4D:012D 50            PUSH  AX                                

0E4D:012E 2BC0          SUB AX,AX                             

-q

Листинг машинного кода после сдвига в памяти(mode.com)

-u 7000:0110 13f

7000:0110 E9482B        JMP 2C5B                              

7000:0113 80FC04        CMP AH,04                             

7000:0116 7319          JNB     0131                               

7000:0118 51            PUSH    CX                                

7000:0119 8ACA          MOV CL,DL                             

7000:011B D0E1          SHL   CL,1                              

7000:011D 32ED          XOR  CH,CH                              

7000:011F 80CD03        OR   CH,03                             

7000:0122 D2E5          SHL   CH,CL                             

7000:0124 2E            CS:                                         

7000:0125 222E8201      AND           CH,[0182]                          

7000:0129 2E            CS:                                         

7000:012A 890E6902      MOV         [0269],CX                         

7000:012E 59            POP      CX                                

7000:012F 7505          JNZ     0136                               

7000:0131 EA39E700F0    JMP         F000:E739                         

7000:0136 2E            CS:                                         

7000:0137 88266802      MOV           [0268],AH                         

7000:013B 50            PUSH   AX                                 

7000:013C 1E            PUSH   DS                                

7000:013D 50            PUSH   AX                                

7000:013E 2BC0          SUB   AX,AX                             

-q

До сдвига в памяти   при пошаговом выполнении программы ячеяки памяти CS:[0182] и CS:[0269] содержали такие данные:

    CS:[0182]= 00

                                                                            CS:[0269]= 00 00

            После выхода из отладчика и пошаговом выполнении части сдвинутой в памяти программы данные ячейки памяти содержали такие данные:

                                                                                                                          CS:[0182]= 2А

                                                                            CS:[0269]= 4С СС

Вывод:   таким образом мы увидели, что данные, находящиеся по вышерассмотренным адресам изменились. Это объясняется лишь тем, что адресация в com-файле ведётся  в пределах одного сегмента, что и требовалось доказать в данном опыте.

 Листинг машинного кода до сдвига в памяти(pas1.exe)

-u 14cf:0003 50

14CF:0003 9A00003815    CALL    1538:0000

14CF:0008 9A0D00D614    CALL    14D6:000D

14CF:000D 55            PUSH    BP

14CF:000E 89E5          MOV     BP,SP

14CF:0010 31C0          XOR     AX,AX

14CF:0012 9ACD023815    CALL    1538:02CD

14CF:0017 9ACC01D614    CALL    14D6:01CC

14CF:001C C70666005555  MOV     WORD PTR [0066],5555

14CF:0022 C70664000100  MOV     WORD PTR [0064],0001

14CF:0028 EB04          JMP     002E

14CF:002A FF066400      INC     WORD PTR [0064]

14CF:002E 8B3E6400      MOV     DI,[0064]

14CF:0032 D1E7          SHL     DI,1

14CF:0034 83BD000000    CMP     WORD PTR [DI+0000],+00

14CF:0039 7E02          JLE     003D

14CF:003B EB29          JMP     0066

14CF:003D 833E640009    CMP     WORD PTR [0064],+09

14CF:0042 75E6          JNZ     002A

14CF:0044 C70666005555  MOV     WORD PTR [0066],5555

14CF:004A BF7C01        MOV     DI,017C

14CF:004D 1E            PUSH    DS

14CF:004E 57            PUSH    DI

14CF:004F BF0000        MOV     DI,0000

-

Листинг машинного кода после сдвига в памяти(pas1.exe)

-u 7000:0013 60

7000:0013 9A00003815    CALL    1538:0000

7000:0018 9A0D00D614    CALL    14D6:000D

7000:001D 55            PUSH    BP

7000:001E 89E5          MOV     BP,SP

7000:0020 31C0          XOR     AX,AX

7000:0022 9ACD023815    CALL    1538:02CD

7000:0027 9ACC01D614    CALL    14D6:01CC

7000:002C C70666005555  MOV     WORD PTR [0066],5555

7000:0032 C70664000100  MOV     WORD PTR [0064],0001

7000:0038 EB04          JMP     003E

7000:003A FF066400      INC     WORD PTR [0064]

7000:003E 8B3E6400      MOV     DI,[0064]

7000:0042 D1E7          SHL     DI,1

7000:0044 83BD000000    CMP     WORD PTR [DI+0000],+00

7000:0049 7E02          JLE     004D

7000:004B EB29          JMP     0076

7000:004D 833E640009    CMP     WORD PTR [0064],+09

7000:0052 75E6          JNZ     003A

7000:0054 C70666005555  MOV     WORD PTR [0066],5555

7000:005A BF7C01        MOV     DI,017C

7000:005D 1E            PUSH    DS

7000:005E 57            PUSH    DI

7000:005F BF0000        MOV     DI,0000

-

До сдвига в памяти   при пошаговом выполнении программы ячеяка памяти DS:[0064]  содержала такие данные:

                      DS:[0064]= 20 20                                                                  

После выхода из отладчика и пошаговом выполнении части сдвинутой в памяти программы данная ячейки памяти содержала такие данные:

                                                                                                       DS:[0064]= 20 20          

Вывод:  таким образом мы увидели, что данные, находящиеся по вышерассмотренному адресу не изменились. Отсюда можно сделать вывод о том, что код ехе-файла можно перемещать в памяти, так как адресация в нём осущетвляется не в пределах одного(кодового) сегмента.