TASM打印字符串的字符

时间:2016-04-19 23:45:47

标签: windows assembly tasm

我正在尝试逐个字符地打印字符串,迭代它。这就是我所拥有的:

.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

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

如何通过char打印char?

1 个答案:

答案 0 :(得分:2)

这是Tasm的一个工作示例,它不会破坏字符串的开头。

由于稍后移动增量并将je替换为jnz

,因此跳转少一次
.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