装配增量和循环

时间:2013-12-02 07:25:36

标签: assembly x86 ascii dos bios

我想知道如何使用ASCII码使用循环和增量来显示这样的输出。

Aa Bb Cc ... Zz

这是我下面的工作代码,似乎有很多错误。它变成了一个无限循环。

请检查并帮助我。

感谢。

.model small
.stack 200h
.code

main proc

    mov ah, 0      
    mov al, 12h   ; Clear screen
    int 10h

    mov ah,3    
    mov bh,0     ; get cursor
    int 10h

    mov ah,2      
    mov bh,0      ;set cursor
    mov dl,12
    int 10h


    mov cx, 5      ; counter


t1:


    Mov dl, 65    ; A   
    mov ah, 2h
    int 21h

    add dl, 1


t2:

    Mov dl, 97    ; a
    mov ah, 2h
    int 21h

    add dl,1

loop t2

loop t1

    mov ah, 4ch
    mov al,00h
    int 21h



endp
end main

1 个答案:

答案 0 :(得分:2)

    mov cx, 5      ; counter
    Mov dl, 65    ; A   

t1:
    mov ah, 2h
    int 21h

    add dl, 32    ; 97 - 65 - convert to LC

    mov ah, 2h
    int 21h

    sub dl,31     ;remove the 32 added, but increment
    push dx       ;save DX on stack
    mov dl, 32    ;space character

    mov ah, 2h
    int 21h

    pop DX        ;return DX from stack

    loop t1

[根据Michael的评论修改 - Add dl,1 became sub dl,31]

(我已经省略了你的初始化和终止,这应该没问题)

您的问题是:

t1..t2 :使用DL加载'A'并输出;然后增加
t2..loop t2指令:使用DL加载'a'并输出;然后增加
       - 执行此操作5(CX)次内容。请注意,每次加载DL时都会加载'a'        - 并且CX将在每个循环中递减,因此当CX 成为 0时循环终止 loop t2 :接下来,循环回到t1并重复直到CX 成为 0。

因此,在loop t1CX已经为0,因此递减并且程序循环回到t1,因此A再次输出CX变为0,65534循环。