【发布时间】:2020-09-02 06:50:21
【问题描述】:
DOSSEG
.MODEL SMALL
.STACK
.DATA
PUBLIC SECTOR
SECTOR DB 'R', 'o', 'b', 'e', 'r', 't', 'o', '$'
.CODE
EXTRN WRITE_CHAR:PROC
INDEX PROC
; ==================================== 1)
MOV AX, DGROUP
MOV DS, AX
XOR BX, BX
MOV CX, 7
L1:
MOV DL, SECTOR[BX]
CALL WRITE_CHAR
INC BX
LOOP L1
; ==================================== 2)
MOV AH, 09h
MOV DX, 000Ah
INT 21h
MOV AH, 4Ch
INT 21h
RET
INDEX ENDP
END INDEX
此汇编代码设法使用“相对基”系统打印字符串(参见注释代码 1)。 此代码工作正常。
现在我知道 AH 中的函数 09h 使用 INT 21h 允许我显示位于内存中的字符串的所有字符,直到到达字符 $(参见注释代码 2)。 我直接将偏移地址放在了我要打印的字符串的第一个字符所在的内存位置的DX(MOV DX,000Ah)中。
我想了解如何插入此地址,从 SECTOR [0] 或简单地从 SECTOR 获取它,因为它指向该内存区域中字符串的第一个元素。
我尝试使用以下指令,但没有成功: MOV DX, Word ptr SECTOR
注意:WRITE_CHAR 过程只是一段代码,它从它的 ASCII 代码开始打印一个字符。 如有必要,我也可以报告该代码,但对于我遇到的问题似乎没有必要。
【问题讨论】:
-
MOV DX, OFFSET SECTOR? -
YES ... 这是将该地址写入 DX 寄存器的正确指令。你能把它作为一个确定的答案吗?在关于 OFFSET 的维基百科解释中,我找到了定义,现在一切都清楚了。再次感谢。
标签: assembly x86-16 addressing-mode