【发布时间】:2013-10-29 15:30:11
【问题描述】:
我知道如何输出一个字符串。如何输出一个数字? 我正在使用 MS DOS 用windows assembler 6.11编译
这是我尝试过的。但它打印垃圾
我已经根据下面的 cmets 编辑了我的代码。
[编辑]
DATA SEGMENT
NUM1 DW 0001H
NUM2 DW 0002H
SUM DW 2 DUP(0)
RESULT DW ?
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
MOV CX,00H
MOV AX,NUM1
ADD AX,NUM2
JNC DISPLAY
INC CX
MOV SUM+2,CX
DISPLAY:
MOV SI,RESULT
ADD SI,9
MOV AX,0
MOV [SI],AX
MOV BX,10
LOOP1:
XOR DX,DX
DIV BX
ADD DL,'0'
DEC SI
MOV [SI],DL
TEST AX,AX
JNZ LOOP1
MOV AX,SI
LEA SI,RESULT
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
CODE ENDS
END START
【问题讨论】:
-
您必须先将数字转换为字符串,然后打印该字符串。
-
@Michael 做了一些搜索。一种方法是包含库中的 c 函数。看起来很复杂。是否有像 MOV AH,09H 这样的 DOS 直接调用字符串?
-
不需要使用任何 C 函数。参见例如stackoverflow.com/questions/19309749/…
-
@Michael 有用的答案。但是,尽管我尽力提取您使用的代码,但我的问题仍未解决。我在上面添加了编辑后的代码。 PS我是初学者
-
我链接的代码是用 NASM 语法编写的。
MOV SI,RESULT在 MASM 语法中应该是LEA SI,RESULT或MOV SI,OFFSET RESULT。此外,DOS 中断的字符串终止符通常是'$'而不是零。