2011-02-10 97 views
4

我想要打印列表中的每个数字时,我的代码显示垃圾,有什么不对吗?输出应该是这样的:为什么我的代码显示垃圾?

给定的数组为:2G; 4 PT 这是为什么垃圾
总数为:7

代码

ASSUME CS:CODE , DS : DATA, SS: STK 
ORG 0000H 

DATA SEGMENT 
    LIST DB 2,23,11,4,15,32,"$" ; Given Array with last element $ to indicate end 
MESSAGE1 db "THE GIVEN ARRAY IS:$" ;message 1 
MESSAGE2 db "THE TOTAL NUMBER IS:$" ;message 2 
DATA ENDS 

;stack segment 
STK SEGMENT STACK 
DB 512 DUP (?) 
TOS LABEL WORD 
STK ENDS 

; code segment 
CODE SEGMENT  
    ORG 2000H 

START : 
MOV DX, DATA 
MOV DS, DX 
MOV DX, STK 
MOV SS, DX 
MOV SP, OFFSET TOS 
XOR AX, AX     ; Clear register 
XOR BX, BX     ; Initialise index register 

LEA DX, MESSAGE1 
MOV AH, 9h 
INT 21H 

LEA SI , list 

MOV CL,0 
MOV AL,"$" 

AGAIN: 
CMP AL,[SI] ; look for end of list 
JE over 
MOV DL, LIST[BX]    ; Move array numbers  
ADD DX, 30H  ; convert number to character. 
MOV AH, 2     ;display the number at the screen 
INT 21H 

INC SI 
INC BX 
INC CL 
Jmp AGAIN  

over:  
LEA DX, MESSAGE2 
MOV AH, 9h 
INT 21H 

PUSH CX   ; transfer cl to dl for int21/ah=2. 
POP DX 
ADD DX, 30H  ; convert number to character. 
MOV AH, 02H  ; prints the character in dl. 
INT 21H 
MOV AH, 4CH  ; exit. 
INT 21H 

CODE ENDS  
END START 

我我想知道为什么已经有数字大于10的数字会显示为字符,但是如何让它像“13”一样显示数字,不显示为“=”?

+1

此代码需要重新格式化!这是作业吗?顺便不要使用标签。 – 2011-02-10 04:56:59

回答

6
LIST DB 2,23,11,4,15,32,"$" 

您并未意识到9以上的值包含多个数字。这就是为什么值2和4出来是正确的;您显示“第二”和“4”号的人物,但没有字符数23.你需要显示数为2 3.

你需要的是一个适当的INT串函数输出ascii的值。