TASM 打印字符串的字符

TASM Print characters of string

我试图逐个字符地打印一个字符串,遍历它。这就是我得到的:

.MODEL SMALL
.STACK 64
.DATA
    string DB 'Something',0
    len equ $-string

.CODE

    xor bx, bx    
    mov si, offset string
Char:
    mov al, byte[si + bx]
    inc bx
    cmp bx, len
    je Fin

    mov ah, 2
    mov dl, al
    int 21h

    jmp Char

Fin:
    mov ax, 4c00h
    int 21h
END

我不知道我是否获得了正确的字符串内存引用,因为它只显示奇怪的符号。我尝试将 30 添加到 dl,认为这是因为 ascii 表示。

如何逐个打印一个字符?

这是一个使用 Tasm 的工作示例,它没有破坏字符串的开头。

由于增量的移动和用 jnz

替换 je 它少了一次跳跃
.MODEL SMALL
.STACK 64
.DATA
    string DB 'Something'
    len equ $-string

.CODE

Entry:
    mov ax, @data   ;make DS point to our DATA segment
    mov ds, ax

    xor bx, bx      ;bx <-- 0
    mov si, offset string ;address of string to print

    mov ah, 2       ;we will use repeatedly service #2 of int 21h

Char:
    mov dl, [si + bx] ;dl is the char to print
    int 21h         ;ask DOS to output a single char

    inc bx          ;point to next char
    cmp bx, len     
    jnz Char        ;loop if string not finished

    mov ax, 4c00h
    int 21h         ;DOS exit program with al = exit code

END Entry