【问题标题】:how can I write an address in a register?如何在寄存器中写入地址?
【发布时间】: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


【解决方案1】:

MOV DX, Word ptr SECTOR 读取位于SECTOR 的第一个单词并将值放入DX。 Word ptr 所做的只是告诉汇编器您要读取一个单词(在这种情况下应该是多余的,因为目标操作数的大小是已知的)。

您正在寻找的是OFFSET 运算符;如:

MOV DX, OFFSET SECTOR

【讨论】:

    猜你喜欢
    • 2014-09-11
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-12
    相关资源
    最近更新 更多