0E4D:0127 88266802 MOV [0268],AH
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
Вывод: таким образом мы увидели, что данные, находящиеся по вышерассмотренному адресу не изменились. Отсюда можно сделать вывод о том, что код ехе-файла можно перемещать в памяти, так как адресация в нём осущетвляется не в пределах одного(кодового) сегмента.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.