汇编语言统计一组数中的正数,负数和零的个数并显示.为什么输出超过10的时候显示的是ASCII码了代码如下:DATA SEGMENTDD1 db 1,4,-5,-2,23,43,24,-12,0,25,-56,0,-64,0,83,52,58,0,9,12COUNT db $-dD1m1 db '1,4,-5,-2,23,4
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/12 04:32:52
![汇编语言统计一组数中的正数,负数和零的个数并显示.为什么输出超过10的时候显示的是ASCII码了代码如下:DATA SEGMENTDD1 db 1,4,-5,-2,23,43,24,-12,0,25,-56,0,-64,0,83,52,58,0,9,12COUNT db $-dD1m1 db '1,4,-5,-2,23,4](/uploads/image/z/3180314-2-4.jpg?t=%E6%B1%87%E7%BC%96%E8%AF%AD%E8%A8%80%E7%BB%9F%E8%AE%A1%E4%B8%80%E7%BB%84%E6%95%B0%E4%B8%AD%E7%9A%84%E6%AD%A3%E6%95%B0%2C%E8%B4%9F%E6%95%B0%E5%92%8C%E9%9B%B6%E7%9A%84%E4%B8%AA%E6%95%B0%E5%B9%B6%E6%98%BE%E7%A4%BA.%E4%B8%BA%E4%BB%80%E4%B9%88%E8%BE%93%E5%87%BA%E8%B6%85%E8%BF%8710%E7%9A%84%E6%97%B6%E5%80%99%E6%98%BE%E7%A4%BA%E7%9A%84%E6%98%AFASCII%E7%A0%81%E4%BA%86%E4%BB%A3%E7%A0%81%E5%A6%82%E4%B8%8B%EF%BC%9ADATA+SEGMENTDD1+db+1%2C4%2C-5%2C-2%2C23%2C43%2C24%2C-12%2C0%2C25%2C-56%2C0%2C-64%2C0%2C83%2C52%2C58%2C0%2C9%2C12COUNT+db+%24-dD1m1+db+%271%2C4%2C-5%2C-2%2C23%2C4)
汇编语言统计一组数中的正数,负数和零的个数并显示.为什么输出超过10的时候显示的是ASCII码了代码如下:DATA SEGMENTDD1 db 1,4,-5,-2,23,43,24,-12,0,25,-56,0,-64,0,83,52,58,0,9,12COUNT db $-dD1m1 db '1,4,-5,-2,23,4
汇编语言统计一组数中的正数,负数和零的个数并显示.为什么输出超过10的时候显示的是ASCII码了
代码如下:
DATA SEGMENT
DD1 db 1,4,-5,-2,23,43,24,-12,0,25,-56,0,-64,0,83,52,58,0,9,12
COUNT db $-dD1
m1 db '1,4,-5,-2,23,43,24,-12,0,25,-56,0,-64,0,83,52,58,0,9,12',0dh,0ah,'gz= '
gz db 0
db 0dh,0ah,'z= '
z db 0
db 0dh,0ah,'lz= '
lz db 0
db 0dh,0ah,'11041905 12','$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
MAIN PROC FAR
START:MOV AX,DATA
MOV DS,AX
MOV SI,OFFSET DD1
MOV CH,0
MOV CL,COUNT
AGAIN:
MOV AL,[SI]
CMP AL,0
JG GG
JL LL
INC Z
JMP N1
GG:
INC GZ
JMP N1
LL:
INC LZ
N1:
INC SI
LOOP AGAIN
MOV AL,30H
ADD GZ,AL
ADD Z,AL
ADD LZ,AL
MOV AH,9
MOV DX,OFFSET M1
INT 21H
MOV AH,4CH ;返回DOS
INT 21H
MAIN ENDP
CODE ENDS
END START
怎么才能显示正确的数字呢?
汇编语言统计一组数中的正数,负数和零的个数并显示.为什么输出超过10的时候显示的是ASCII码了代码如下:DATA SEGMENTDD1 db 1,4,-5,-2,23,43,24,-12,0,25,-56,0,-64,0,83,52,58,0,9,12COUNT db $-dD1m1 db '1,4,-5,-2,23,4
0到9的ASCII码是30H-39H 大于这个数就应该是显示其它的字符.
需要用函数进行转换再写入,先把GZ Z IZ定义为2字节,函数参数共两个:
bx为要写入的地址,al为要转换的数字.
这样调用:mov bx,offset gz
mov al,gz
call display
display:
push ax ;保护现场
push cx
push dx
mov dh,al ;暂时存放al的值
mov ch,2
mov cl,4
shr al,cl ;先写入高位
d1:
and al,0fh
cmp al,10
jb d2
add al,7
d2:
add al,48
mov dl,al
mov [bx],dl ;写入dl
mov al,dh
inc bx
dec ch
jnz d1
pop dx ;恢复现场
pop cx
pop ax
ret