2016-04-19 3 views
1

Я пытаюсь напечатать строковый символ символом, итерации через него. Это то, что я получил: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 строки, потому что это только показывает мне странные символы. Я попытался добавить 30 к dl, думая, что это из-за представления ascii.

Как напечатать символ char?

+0

Попробуйте изменить '' .DATA' к .CODE'. –

+0

@RossRidge Пробовал, но получаю еще странные символы вывода –

+0

Хорошо, попробуйте следующие две строки в начале вашего кода 'mov ax, @ data; mov ds, ax'. Вам нужно отменить предыдущие изменения, которые я предложил. –

ответ

1

Вот рабочий пример с 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 
+0

Вы можете переместить 'mov ah, 2' вне цикла выше' Char: ', поскольку' int 21h/ah = 2' уничтожает _AL_ (последний символ напечатан в _AL_) –

+1

@MichaelPetch: Действительно. Я модифицировал программу таким образом, с дополнительными комментариями. – Seki

+0

Нет проблем. Я только быстро взглянул на него. Я заметил это, когда я снова наткнулся на этот Q. 'mov al, [si + bx]' 'mov dl, al' можно свести к' mov dl, [si + bx] ' –

Смежные вопросы