如何在寄存器中写入地址?
how can I write an address in a register?
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,字指针扇区
注意:WRITE_CHAR 过程只是一段代码,它从 ASCII 码开始向我打印一个字符。
如果有必要,我也可以报告该代码,但对于我遇到的问题似乎没有必要。
MOV DX, Word ptr SECTOR
读取位于 SECTOR
的第一个单词并将值放入 DX
。 Word ptr
所做的只是告诉汇编程序您要读取一个单词(在这种情况下应该是多余的,因为目标操作数的大小已知)。
您要查找的是 OFFSET
运算符;如:
MOV DX, OFFSET SECTOR
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,字指针扇区
注意:WRITE_CHAR 过程只是一段代码,它从 ASCII 码开始向我打印一个字符。 如果有必要,我也可以报告该代码,但对于我遇到的问题似乎没有必要。
MOV DX, Word ptr SECTOR
读取位于 SECTOR
的第一个单词并将值放入 DX
。 Word ptr
所做的只是告诉汇编程序您要读取一个单词(在这种情况下应该是多余的,因为目标操作数的大小已知)。
您要查找的是 OFFSET
运算符;如:
MOV DX, OFFSET SECTOR