为什么我的功能不起作用? (部件)

时间:2013-07-14 16:45:02

标签: assembly

我想创建一个函数,在屏幕上打印一个名为sol的数组。每个字符之间的距离应该与其他字符之间的距离为3“字符”  但是,当我运行我的代码时,只打印数组的第一行。

这是我的Dseg代码:

line db 0
col db 0
temp db 3
indexc dw 0
sol db   'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
S_LEN = $- sol
            db   'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'
            db   '*', '*', '*', '*', '*', '*', '*', '*'
            db   '*', '*', '*', '*', '*', '*', '*', '*'
            db   '*', '*', '*', '*', '*', '*', '*', '*'
            db   '*', '*', '*', '*', '*', '*', '*', '*'
            db   'p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'
            db   'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'
S_LEN2 = $- sol

我的职责是:

 PutPlayers Proc    
    push ax bx cx dx si

InitiolazingVar:

    mov temp, offset sol
    mov line, 1
    mov col, 1
    mov si, 1
Again:  
    ;location 
        mov dl, col
        mov dh, line
        mov bx, 0
        mov ah, 2h
        int 10h



    ;printing the char
        mov al, ds:[temp][si]
        mov bl, 33
        mov cx, 1h
        mov bh, 0
        mov ah, 9h
        int 10h

        add col, 3h
        inc si
        cmp si, 9
        jnz Again


        add temp, S_LEN
        mov si, 1h
        mov col, 1h
        add line, 3h

        cmp line, 19h
        jnz Again

        pop si dx cx bx ax
        ret
PutPlayers endp 

那么,你能帮帮我吗?

1 个答案:

答案 0 :(得分:0)

乍一看,我不喜欢这个指示:

mov al, ds:[temp][si]

我认为你期望它会从地址读取一个字节,该字节等于[temp]的内容和SI的内容之和。

但事实并非如此。该指令实际上使用address_of_temp + si。不使用[temp]的内容。

这里我建议只使用si作为指针,并考虑有关循环结束的其他比较。