assembly - 数据如何以字节形式加载到所需的内存字段?

标签 assembly x86-16 emu8086

我们可以在 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

关于assembly - 数据如何以字节形式加载到所需的内存字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40940052/

相关文章:

assembly - m80 宏汇编器 org 指令

file - 从程序集中的文件读取时,为什么会出现打开错误?

assembly - 我尝试打印号码时出错

debugging - DOS DEBUG 跟踪命令无法按我的预期工作

程序集 - 程序按预期工作,但第二次运行时,打印出乱码

assembly - 错误 'Mov wrong parameters'

assembly - 两个数组的总和,每个数组 n 个字节

C++ 到 pep/8 汇编语言帮助(链接数据结构)

linux - 对 %esp 的修改导致 SIGSEGV

Linux 汇编调试器