Assembly 为什么我的代码显示垃圾?
当我想打印列表中的每个数字时,我的代码显示垃圾,有什么问题吗?输出应如下所示: 给定的阵列为:2G;4?PT为什么这是垃圾 总数为:7人 代码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
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,"$"