如何在寄存器中写入地址?

问题描述

DOSSEG
.MODEL SMALL

.STACK

.DATA

    PUBLIC  SECTOR
SECTOR  DB  'R','o','b','e','r','t','$'


.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行业

注意:WRITE_CHAR过程只是一段代码,该代码从ASCII码开始向我打印一个字符。 如有必要,我也可以报告该代码,但是对于我遇到的问题似乎没有必要。

解决方法

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

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

MOV DX,OFFSET SECTOR