装配中的循环和常量

时间:2013-12-04 15:35:04

标签: loops assembly x86 constants

我只是想问一个问题。

如何显示此类输出“ 0_1_2_3_4_5_6_7_8_9

我需要在数字中使用循环,但是如何在每个循环中使下划线保持不变?

这是我的工作代码。

.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, 9     ; counter

    Mov ah, 2
    Mov dl, 48     ; display 0  
top:

    int 21h

    add dl, 47      ; display underscore
    mov ah, 2
    int 21h

    push dx

    add dl, -46     ; return to 1
    mov ah, 2
    int 21h

    pop dx



loop top    

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


endp

end main

我总是会这样做,请点击here

请帮帮我。

感谢。

2 个答案:

答案 0 :(得分:3)

这是相对于当前数字,除了数字为'0'时,它会给你不正确的结果:

add dl, 47      ; display underscore
mov ah, 2
int 21h

您还在错误的位置(相对于您更改其值的位置)推送和弹出dx

更好的方法是:

top:
int 21h         ; print digit

push dx         ; save dx 

mov dl,'_'
mov ah, 2
int 21h         ; print underscore

pop dx          ; restore dx
inc dl          ; next digit
loop top    

答案 1 :(得分:1)

这个很好用:

; 0_9.asm
; assemble with "nasm -f bin -o 0_9.com 0_9.asm"

    org  0x100        ; .com files always start 256 bytes into the segment

    mov cx, 9     ; counter
    mov dl, "0" ; 0

top:
    push dx
    push cx
    mov ah, 2
    int 21h

    mov dl, "_"      ; display underscore
    mov ah, 2
    int 21h

    pop cx
    pop dx
    inc dl
loop top  

    mov dl, "9"      ; display 9
    mov ah, 2
    int 21h


    mov ah, 4ch     ; "terminate program" sub-function
    mov al,00h
    int 21h