这是我目前正在做的最新动态。我对如何使用S2中存储的数据在整个屏幕中搜索相同的单词感到困惑。如果发现突出显示该单词。
DOSBOX - 编译器:A86
org 100h
;-----------------------------------------------------
lea bp, S1
mov cx, 35
mov al, 1
mov ah, 13h
mov bh, 0
mov dl, 0
mov dh, 25
mov bl, 7
int 10h
;---------------------------------------------------------- ; Asks input'
mov di,1
start:
mov ah, 0
int 16h
mov dx,ax
mov ah, 0eh
cmp dx,4d00h
je start2
int 10h
mov S2[di], al
inc di
jmp start
start2 :
mov cx,di
mov di,1
mov si,0
relop :
mov ah,[si]
cmp ah,S2[di]
mov al, 13h
mov ah, 0
int 10h ; set graphics video mode.
mov al, 1100b
mov cx, 10
mov dx, 20
mov ah, 0ch
int 10h ; set pixel.
inc di
add si,2
je relop
mov ah, 13h
lea bp, S2
mov al, 1
mov bh, 0
mov bl, 7
mov dl, 0
mov dh, 25
int 10h
MOV AH, 4CH
INT 21H
S1 DB "EENTER THE WORD TO FIND ON SCREEN : "
S2 db 1 dup (?)
; ========= data ===============
我不能使用int 21h进行输入和输出,只能结束程序(返回)
答案 0 :(得分:1)
mov dl, 0 mov dh, 25
您在屏幕外打印提示! Coords从零开始,对于行,它们在标准文本屏幕上的范围为0到24。
mov si,0 relop : mov ah,[si] cmp ah,S2[di] mov al, 13h mov ah, 0 int 10h ; set graphics video mode.
如果您想从屏幕上阅读,那么您绝对不应该在此检索循环的每次迭代中设置新屏幕!此外,将SI寄存器初始化为0将不会到达输入字的第一个字符。
解决方案:
在屏幕的第一行(mov dh,0
)显示35个字符长的提示。现在您知道输入的字将位于视频存储器偏移地址70,但是在视频存储器段中。
mov ax,0B800h
mov es,ax
mov si,70
relop :
es mov ah,[si] <-- This is the ASCII code of the 1st inputted character
最好还做出这些更正:
S1 DB "ENTER THE WORD TO FIND ON SCREEN : "
S2 db 44 dup (?)