【发布时间】:2015-03-17 23:05:25
【问题描述】:
练习是从键盘输入一个单词,搜索 DOS 环境,如果该单词存在,则显示 DOS 环境中包含该单词的行。
这是我的代码:
format binary
org 100h
start:
mov es,[ds:02ch]
xor si,si
;*****************************
;*****************************
mov ah,9
mov dx,string
int 21h
mov ah,10
mov dx,word
int 21h
mov ah,0
int 16h
;*****************************
;*****************************
xor di,di
xor bx,bx
start_while:
mov di,$-word
jge equal
mov dl,[es:si]
mov bl,dl
mov dl,[bx+di]
cmp dl,[string+di]
jne next_line
add di,1
jmp start_while
next_line:
inc si
cmp dl,0
jnz notexist
equal:
mov ah,2
int 21h
jmp end
notexist:
mov ah,9
mov dx,d_exist
int 21h
jmp end
end:
mov ah,08h
int 21h
ret
;**************************************
;**************************************
string db 'THE WORD:',10,13,"$"
word db 6
db 0
times 22 db "$"
d_exist db 'variable does not exist',10,13,"$'
编译器说:mov dl,[dl+di] 错误。 我是初学者,如何修复代码?我不知道。
【问题讨论】:
-
准确的完整错误信息是什么?
-
保留字用作符号。
-
您不能以
dl或dx为基础进行索引。您可以索引bp或bx(指定的基址寄存器),因此请尝试使用xor bx,bx、mov bl,dl、mov dl,[bx+di]。有关详细信息,请参阅 Google“x86 寻址模式”。 -
感谢您的回复。我用代码编辑了帖子上部。现在没有错误,但程序无法正常运行并且什么也没有显示。例如,以“comsp”开头的行不显示。如何解决?你有什么想法吗?
-
它甚至没有写出“THE WORD:”?