Как перейти в другой сегмент памяти - 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

Объяснение кода листинга программы

  1. Переменная jmpfar содержит значение 0EAh, которое является командой перехода в другой сегмент памяти.
  2. Переменная seg содержит значение 0,3000h, которое состоит из двух частей: 3000h - сегмент памяти, в который нужно перейти, и 0000h - смещение в этом сегменте, на которое нужно перейти.
  3. Для перехода в другой сегмент памяти используется команда jmp far, которая указывает на пару сегмент-смещение в переменной seg.
  4. Команда jmp far может быть использована только в реальном режиме работы процессора, когда сегментный регистр указывает на код сегмента, а не на сегмент данных или сегмент стека.
  5. Для выполнения команды jmp far в коде должны быть присутствовать два операнда: сегмент и смещение.
  6. В данном коде сегмент указан как 0,3000h, а смещение не указано.
  7. При выполнении команды jmp far процессор переходит к указанному сегменту памяти и выполняет код, начиная с указанного смещения.
  8. Если в коде не указано смещение, то процессор переходит к первому байту сегмента, что может привести к неопределенному поведению или ошибке.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы