Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 为什么我的代码显示垃圾?_Assembly_X86 - Fatal编程技术网

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

Assembly 为什么我的代码显示垃圾?,assembly,x86,Assembly,X86,当我想打印列表中的每个数字时,我的代码显示垃圾,有什么问题吗?输出应如下所示: 给定的阵列为: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 I

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

给定的阵列为: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”,而不是显示为“=”

您没有意识到9以上的值由多个数字组成。这就是为什么值2和4是正确的;显示“第2”和“第4”数字字符,但数字23没有字符。您需要将该数字显示为2和3


您需要的是一个适当的int-to-string函数,将值输出为ascii。

此代码需要重新格式化!这是家庭作业吗?顺便说一下,不要使用制表符。它需要小写。世界上已经有足够多的叫喊了。我已经修正过这个密码一次了。为什么要回滚我的编辑?如果您希望在这里获得一些帮助,请学习使用格式化功能,或者至少接受其他用户的帮助。
LIST DB 2,23,11,4,15,32,"$"