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