Assembly 我应该在数据段中加载什么?

Assembly 我应该在数据段中加载什么?,assembly,emulation,dos,i386,Assembly,Emulation,Dos,I386,我正在研究emulator,它应该模拟特定的程序。我有COM文件和源文件。现在我需要模拟这个特定的指令(这是我在DosBox调试器中看到的): 我知道这意味着将偏移量017B的值从DS(数据段)移到CL寄存器中。但是DS中应该包含什么呢 我尝试模拟的程序(源文件): .386p .微型模型 代码段使用16 假设cs:code 组织100小时 开始: mov-ax,3h int 10h ... mov cl,byte ptr ds:[keylen]对于像您拥有的.COM程序,不需要自己设置任何段寄

我正在研究emulator,它应该模拟特定的程序。我有COM文件和源文件。现在我需要模拟这个特定的指令(这是我在DosBox调试器中看到的):

我知道这意味着将偏移量
017B
的值从
DS
(数据段)移到
CL
寄存器中。但是
DS
中应该包含什么呢

我尝试模拟的程序(源文件):

.386p
.微型模型
代码段使用16
假设cs:code
组织100小时
开始:
mov-ax,3h
int 10h
...

mov cl,byte ptr ds:[keylen]对于像您拥有的.COM程序,不需要自己设置任何段寄存器。操作系统程序加载器已将它们全部设置为指向程序的开头

指令
mov cl,字节ptr ds:[keylen]
将按原样工作。
您甚至不必显式地指定段。您还可以写入
mov-cl、字节ptr[keylen]
甚至
mov-cl[keylen]

现在,如果您坚持手动设置
DS
分段寄存器,您可以编写:

mov ax, cs
mov ds, ax
另一种方法是:

mov ah, 62h   ;DOS.GetPSP
int 21h       ; -> BX
mov ds, bx

使用COM程序(组织为100h`的微型模型)CS=DS=ES=SS=在将控制权转移到程序之前用于该程序的PSP段。这只适用于COM(而不是EXE)这可能对您有一些用处:(加上可能是PSP结构,如果代码从
cs:0000 cs:00FF
范围内获取内容)。@MichaelPetch我知道,这是COM程序谢谢您的回复。我不确定你们是否理解我的问题。我试图模仿这个程序,我知道我应该把DS指向哪里。但我不知道整个数据部分应该是什么。
mov ax, cs
mov ds, ax
mov ah, 62h   ;DOS.GetPSP
int 21h       ; -> BX
mov ds, bx