Как перейти в другой сегмент памяти - Assembler
Формулировка задачи:
У нас есть exe и com программа как в ней перейти в другой сегмент памяти. (Например в 3000H)
Exe Page 60,80 TITLE MAXIMUM STACKG SEGMENT PARA STACK "stack" DW 32 DUP(?) STACKG ENDS DATASG SEGMENT PARA "code" X DW-3 Y DW-77 R DW? DATASG ENDS CODESG SEGMENT PARA "Code" BEGIN PROC FAR ASSUME CS:COODESG, DS: DATASG, SS:STACSG, ES:NOTHING PUSH DS XOR AX, AX PUSH AX MOV AX, DATASG MOV DS, AX MOV AX, X MOV BX, Y MOV R, AX CMP AX, BX JNS .1 MOV R, BX .1:RET BEGIN ENDP CODESG ENDS END BEGIN COM PAGE 60,132 TITLE MAXIMUM CODESG SEGMENT PARA "Code" ASSUME CS:CODESG,DS: DATASG,SS:STACSG,ES:NOTHING ORG 100H BEGIN JMP MAIN X DW-3 Y DW-77 R DW? MAIN PROC NEAR MOX AX, X MOV BX, Y MOV R, AX CMP AX, BX JNS .1 MOV R, BX .1 RET MAIN ENDP CODESG ENDS END BEGIN
Решение задачи: «Как перейти в другой сегмент памяти»
textual
Листинг программы
db 0EAh ; jmp far dw 0,3000h ; 3000h:0000h
Объяснение кода листинга программы
- Переменная
jmpfar
содержит значение 0EAh, которое является командой перехода в другой сегмент памяти. - Переменная
seg
содержит значение 0,3000h, которое состоит из двух частей: 3000h - сегмент памяти, в который нужно перейти, и 0000h - смещение в этом сегменте, на которое нужно перейти. - Для перехода в другой сегмент памяти используется команда
jmp far
, которая указывает на пару сегмент-смещение в переменнойseg
. - Команда
jmp far
может быть использована только в реальном режиме работы процессора, когда сегментный регистр указывает на код сегмента, а не на сегмент данных или сегмент стека. - Для выполнения команды
jmp far
в коде должны быть присутствовать два операнда: сегмент и смещение. - В данном коде сегмент указан как 0,3000h, а смещение не указано.
- При выполнении команды
jmp far
процессор переходит к указанному сегменту памяти и выполняет код, начиная с указанного смещения. - Если в коде не указано смещение, то процессор переходит к первому байту сегмента, что может привести к неопределенному поведению или ошибке.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д