为什么我的代码会显示垃圾?

fre*_*esh 4 x86 assembly

当我想打印列表中的每个数字时,我的代码显示垃圾,有什么不对吗?输出应如下所示:

礼物阵列是: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  
Run Code Online (Sandbox Code Playgroud)

我想我知道为什么无论大于10的数字都显示为字符,但如何让它显示为"13"这样的数字不显示为"="?

Jen*_*ger 6

LIST DB 2,23,11,4,15,32,"$"
Run Code Online (Sandbox Code Playgroud)

您没有意识到超过9的值包含多个数字.这就是值2和4出现正确的原因; 显示"2nd"和"4th"数字字符,但是数字23没有字符.您需要将该数字显示为2 3.

你需要的是一个正确的int to string函数来输出ascii值.