汇编阵列数据存储

时间:2016-08-10 14:08:11

标签: assembly emu8086

这是我目前正在做的最新动态。我对如何使用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进行输入和输出,只能结束程序(返回)

1 个答案:

答案 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 (?)