打印变量不起作用

Print variable does not work

你好,这段代码应该有一个名字和一个数字,并打印名字作为我给它的次数。 然而,当我查看内存时,一切看起来都是正确的,而且我看到了名字, 但是当我用 ah = 09h 来做 int21 时,它根本不打印名字 (它应该在 print 标签中打印名称。)

org 100h
FirstTime db ' Please type any number: $'
Error db 13,10,'Please type any VALID NUMBER: $'
MyName db 16 dup('$')

mov dx, offset MyName
mov ah, 0Ah
int 21h

mov dx, offset FirstTime
enter:
;Start message/error
mov ah, 09h
int 21h

;Get input - 
mov ah,01h
int 21h
mov bl,al 

;Validation check -
cmp bl, 30h
jae above

;false - return + error msg
mov dx, offset Error
jmp enter


;true
above:
cmp bl,39h
jbe printname
;false - return + error msg
mov dx, offset Error
jmp enter  


;print name(true) - 
printname: 

;dose it 0?
cmp bl, 30h
je finito

;Print name! woho its (not) working!
print:
mov dx, offset MyName
mov ah, 09h
int 21h

dec bl
cmp bl, 30h
jne print

finito:                    
hlt
mov dx, offset MyName
add dx, 2
mov ah, 09h
int 21h

试一试

问题始于输入缓冲区的错误定义。第一个字节必须是您希望输入的字节数。第二个字节将是有效输入的 bytes/characters 的数量。

MyName db 14,0,16 dup('$') ;At least 1 "$" will remain.

mov dx, offset MyName
mov ah, 0Ah
int 21h

这也意味着您必须相应地更改 PRINT。

print:
mov dx, 2 + offset MyName
mov ah, 09h
int 21h

ps。这个程序有 运行 吗?你不应该跳过那些数据线吗?