【问题标题】:Output a number in microsoft MASM assembler在 microsoft MASM 汇编器中输出一个数字
【发布时间】: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,RESULTMOV SI,OFFSET RESULT。此外,DOS 中断的字符串终止符通常是 '$' 而不是零。

标签: windows assembly dos masm


【解决方案1】:
DATA SEGMENT
NUM1 WORD 000AH
NUM2 WORD 000BH
SUM DW 2 DUP(0)
RESULT DB '        $'
DATA ENDS

CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:  MOV AX,DATA
MOV DS,AX

;-----begin addition-----------------
MOV CX,0000H
MOV AX,NUM1
ADD AX,NUM2
MOV SUM,AX
JNC DISPLAY

INC CX
MOV SUM+2,CX
;------Display on screen------------
DISPLAY:
LEA DI,RESULT
ADD DI,0007H
MOV AX,SUM
MOV BX,000AH    ;BX=10 used as a constatnt in the following loop
LOOP1:
XOR DX,DX
DIV BX      ;quotient in AX remainder in DX
ADD DX,0030H

DEC DI
MOV [DI],DL
TEST AX,AX  ;check if ax is 0
JNZ LOOP1

MOV AH,09H
MOV DX,OFFSET RESULT
INT 21H
;-----end the program--------------
MOV AH,4CH
INT 21H
CODE ENDS
END START

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多