Assembly 如何将数据作为字节加载到所需的内存字段?

Assembly 如何将数据作为字节加载到所需的内存字段?,assembly,x86-16,emu8086,Assembly,X86 16,Emu8086,我们可以在emu8086中编写ASSIGN DB 10、20、30、40、50命令,但它会将这些字节加载到随机内存字段中 如何将这些字节加载到所需的内存字段?例如,我想从A40EH开始定义这些字节 内存地址包含两部分:段和偏移量。段由操作系统指定,偏移量由数据本身确定。程序员可以控制偏移量。在您的情况下,如果您希望某些数据位于特定位置,您可以用大量字节填充数据段,直到获得所需位置,例如: .model large .stack 100h .data ▼ filler db

我们可以在emu8086中编写
ASSIGN DB 10、20、30、40、50
命令,但它会将这些字节加载到随机内存字段中


如何将这些字节加载到所需的内存字段?例如,我想从A40EH开始定义这些字节

内存地址包含两部分:段和偏移量。段由操作系统指定,偏移量由数据本身确定。程序员可以控制偏移量。在您的情况下,如果您希望某些数据位于特定位置,您可以用大量字节填充数据段,直到获得所需位置,例如:

.model large
.stack 100h
.data
            ▼
filler db 0A40Eh dup(?)               ;◄■■ BYTES 0 TO 0A40DH.
ASSIGN DB 10, 20, 30, 40, 50, 'END$'  ;◄■■ BYTES START AT 0A40EH.

.code
  mov ax, @data
  mov ds, ax

  mov ah, 9
  lea dx, ASSIGN
  int 21h             ;◄■■ DISPLAY ASSIGN TO CHECK IF WORKS.

  mov ah, 0
  int 16h             ;◄■■ WAIT FOR A KEY PRESS.

  mov ax, 4c00h
  int 21h

在运行时,还是在可执行文件本身中?在运行时,您只需在目标地址复制这些字节(例如,使用
rep movsb
指令)。在可执行文件本身中,检查链接器脚本的外观可能更为棘手,您必须在源代码中定位这些数据,以便它们“着陆”到所需的地址。这有点相关(提到
org
指令,以及如何填充未使用的空间):。。。如何检查emu8086 linker=的链接器脚本我不知道,我甚至不知道它使用的是什么链接器。顺便说一句,你最好知道,你在做什么,并仔细选择目标地址,这样你就知道你要覆盖什么以及为什么。在正常情况下,这个请求是没有意义的,所以如果你不确定自己在做什么,那么你很可能是做错了什么。你说的是A40EH段还是A40EH偏移量?@Jose Manuel Abarca Rodríguez不是segment,而是偏移量