打印变量不起作用

时间:2015-02-09 09:04:59

标签: assembly printing x86-16

你好这段代码应该带一个名字和一个数字,并打印出我给它的次数。 然而,当我在记忆中看到每件事看起来都正确时,我看到了名字, 但是当我以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

2 个答案:

答案 0 :(得分:2)

问题始于inputbuffer的错误定义。第一个字节必须是输入时要允许的字节数。第二个字节将是有效输入的字节/字符数。

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。这个程序是否运行?你不应该跳过那些数据线!

答案 1 :(得分:0)

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

试试吧