Assembly 我如何在登记簿上写地址?
此汇编代码使用“相对基”系统打印字符串(请参见注释代码1)。 此代码工作正常 现在我知道AH中的函数09h使用INT 21h,允许我显示内存中字符串的所有字符,直到到达字符$(参见注释代码2)。 我直接将偏移地址放在要打印的字符串的第一个字符所在的内存位置的DX(MOV DX,000Ah)中 我想了解如何插入此地址,从扇区[0]或简单地从扇区获取它,因为这指向该内存区域中字符串的第一个元素 我尝试过,但没有成功,使用了以下说明: MOV DX,字ptr扇区 注意:WRITE_CHAR过程只是一段代码,它从ASCII码开始向我打印一个字符。Assembly 我如何在登记簿上写地址?,assembly,x86-16,addressing-mode,Assembly,X86 16,Addressing Mode,此汇编代码使用“相对基”系统打印字符串(请参见注释代码1)。 此代码工作正常 现在我知道AH中的函数09h使用INT 21h,允许我显示内存中字符串的所有字符,直到到达字符$(参见注释代码2)。 我直接将偏移地址放在要打印的字符串的第一个字符所在的内存位置的DX(MOV DX,000Ah)中 我想了解如何插入此地址,从扇区[0]或简单地从扇区获取它,因为这指向该内存区域中字符串的第一个元素 我尝试过,但没有成功,使用了以下说明: MOV DX,字ptr扇区 注意:WRITE_CHAR过程只是一段
如有必要,我也可以报告该代码,但对于我遇到的问题,似乎没有必要报告该代码。
MOV DX,Word ptr SECTOR
读取位于SECTOR
的第一个单词,并将值放入DX
。Word ptr所做的一切就是告诉汇编程序您要读取一个字(在本例中,这个字应该是冗余的,因为目标操作数的大小已知)
您要查找的是OFFSET
操作符;例如:
MOV-DX,偏移扇区
MOV-DX,偏移扇区
?是。。。这是将该地址写入DX寄存器的正确指令。你能把它作为一个明确的答案吗?在维基百科关于偏移量的解释中,我找到了这个定义,现在一切都清楚了。再次感谢。
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