回 帖 发 新 帖 刷新版面

主题:求助,一个关于直接寻址的问题

全部代码如下:
问题:为何第19行即 MOV AL,[2002H] 编译时提示出错,可是书上有这种用法

DATA SEGMENT
     ORG  2000H
  DAT DB 'A','B','C','D','E','F','G'
DATA ENDS

STAK SEGMENT PARA STACK
  DW 100 DUP(?)
STAK ENDS

CODE SEGMENT
     ASSUME CS:CODE,DS:DATA,SS:STAK
START:  MOV  AX,DATA
        MOV  DS,AX
        MOV  AL,'A'
        CALL DISPCRLF
        MOV BL,'B'
        MOV AL,BL
        CALL DISPCRLF
        MOV AL,[2002H]
        CALL DISPCRLF
        MOV BX,2003H
        MOV AL,[BX]
        CALL DISPCRLF
        MOV AL,01H[BX]
        CALL DISPCRLF
        MOV DI,02H
        MOV AL,[BX][DI]
        CALL DISPCRLF
        MOV AL,01H[BX][DI]
        CALL DISPCRLF
        MOV  AH,4CH
        INT  21H
DISPCRLF PROC NEAR
        MOV  AH,2
        MOV  DL,AL
        INT  21H
        MOV  DL,0DH
        INT  21H
        MOV  DL,0AH
        INT  21H
        RET
DISPCRLF  ENDP
CODE  ENDS
      END  START

回复列表 (共3个回复)

沙发

把这一句改成:
        MOV AL,DS:[2002H]
这样就可以了,指向的是DS中的2002号单元

板凳

MOV AL,[2002H] 指令中偏移地址2002H不是默认放在DS中了吗?
那为什么还要段超越

3 楼

直接寻址方式是代码段中的地址
而寄存器寻址方式默认的是在DS或SS中

我来回复

您尚未登录,请登录后再回复。点此登录或注册