【发布时间】:2016-01-06 16:01:25
【问题描述】:
我有以下代码,它接受一个十六进制格式的数字并打印出它的十进制格式。
这个程序在 Turbo Debugger 中运行得还不错,但是当我在 DOS 中运行它时,我在输出数字后看到一些额外的符号:
.model small
.stack 100h
.486
.code
save proc
itm:
xor dx,dx
mov bx,10
div bx
add dl,30h
inc cx
pop bx
push dx
push bx
cmp ax,0
jne itm
ret
save endp
start:
mov ax, 0FFFFh
call save
mov ah, 02
print:
pop dx
int 21h
loop print
int 20h
end start
输出:
C:\TASM>lab31
65535 ò Φ■╤ 9°☻░╧♠UWSîÄPA÷0ó♥┴∞└εê$♦ó♥α♦▲ê$ó♦Σê←ë♦ó♥☻╨sÄ÷♣t╣ ╞ ÷┤ⁿ8sê¬ê²≤&mî│░ⁿ┘╗♥÷ t<sÿ☻╪╟♣I☼>♥b!├─4&Gê&_ëΩî∞[┴éΦ
z│Φ ☺\│Φ ♀fδ[♥3¡ïA1èG┴├═≥uè ç♦└┌é─Ω╕↕ëX╪♥♦♫↕Y^▼Z╖
←tÇ5▲♦▼δá♦├☻├ █
☻┬! C└(A∞1▬:↕ÿ├ƒ♥╞[%█☼C└≥░Φ
1357 46$♦♦
如您所见,65535 打印正常,但随后出现垃圾。当我在 Turbo Debugger 中运行程序时,它在写出 65535 后挂起。
【问题讨论】:
-
函数
2ofint 21h打印一个字符,而不是一个数字。您必须在打印前转换为字符串。 -
@owacoder 他正在打印字符。
-
我在您的代码中看到的一个问题是我看不到 CX 设置为零的位置(您将其用作字符计数器,但似乎没有对其进行初始化)
标签: assembly dos x86-16 tasm real-mode