Assembly 我应该在数据段中加载什么?
我正在研究emulator,它应该模拟特定的程序。我有COM文件和源文件。现在我需要模拟这个特定的指令(这是我在DosBox调试器中看到的): 我知道这意味着将偏移量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程序,不需要自己设置任何段寄
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