2013-10-29 2 views
0

문자열을 출력하는 방법을 알고 있습니다. 번호를 출력하려면 어떻게합니까? MS DOS를 사용하고 있습니다. Windows 어셈블러 6.11을 사용하여 컴파일Microsoft MASM 어셈블러에서 숫자를 출력하십시오.

다음은 내가 시도한 것입니다. 그러나 그것은 쓰레기를 인쇄합니다

아래의 설명에 따라 코드를 편집했습니다.

[EDITED]

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 
+1

먼저 문자열로 숫자를 변환 할 수 있고, 그 문자열을 인쇄 할 수 있습니다. – Michael

+0

@Michael 약간의 검색을 했습니까? 메소드는 라이브러리의 c 함수를 포함합니다. 복잡한 것 같습니다. 문자열에 대해 MOV AH, 09H와 같은 직접적인 DOS 호출이 있습니까? – user2756339

+1

C 함수를 사용할 필요가 없습니다. 예 : http://stackoverflow.com/questions/19309749/nasm-assembly-convert-input-to-integer/19312503#19312503 – Michael

답변

0
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