Может кто-нибудь объяснить функции этих трех инструкций?
ORG 1000H
MOV AX,CS
MOV DS,AX
Теоретически я знаю, что такое код, данные и дополнительные сегменты, но:
Как они реализованы в этой программе?
Почему весь сегмент перемещен в другой? (
MOV AX,CS
иMOV DS,AX
)
Что эти две инструкции фактически делают?
Я могу понять значение любой другой инструкции в этом коде, кроме выделенных трех инструкций.
(Программа работает нормально. Она принимает ввод до тех пор, пока не будет достигнуто 0 — есть mov ah,01h
и int 21h
, затем она сравнивает al
с '0'
, и если al
равно '0'
, она переходит к last
, в противном случае она переходит к back
.)
ASSUME CS:CODE
CODE SEGMENT
ORG 1000H
MOV AX,CS
MOV DS,AX
BACK:
MOV AH,01H
INT 21H
CMP AL,'0'
JZ LAST
JMP BACK
LAST:
MOV AX,4C00H
INT 21H
CODE ENDS
END
(Примечание редактора: .com
программы загружаются со смещением 100h
, при этом все сегментные регистры установлены равными друг другу. org 1000h
, вероятно, является опечаткой для org 100h
, потому что это выглядит как программа .com
. Эта программа не ломается, потому что не использует никаких абсолютные адреса, только относительные переходы.)