初学汇编 一个小程序 有逻辑错误,,,,哪位帮下忙~~

songkai2008 2009-05-29 02:20:54
从一组20个数中找出正数和负数,存起来,并显示正负数的个数
SSEG SEGMENT STACK
STK DB 100 DUP (0)
SSEG ENDS
DSEG SEGMENT
DATA DB -1H,-2H,-3H,-4H,-5H,-6H,-7H,-8H,-9H,-10H,1H,2H,3H,4H,5H,6H,7H,8H,9H,10H
DATAP DB 20 DUP (0) ;用来存正数
DATAN DB 20 DUP (0) ;用来存负数
COUNT DB 0H ;控制循环
COUNTP DB 0H ;正数个数
COUNTN DB 0H ;负数个数
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
ASSUME SS:SSEG
START:
MOV AX,DSEG
MOV DS,AX
MOV AX,SSEG
LEA SI,DATA
LEA DI,DATAP
POSITIVE1:
CMP [SI+COUNT],0H
JL POSITIVE2
MOV CH,[SI+COUNT]
MOV [DI+COUNTP],CH
INC COUNTP
POSITIVE2:INC COUNT
CMP COUNT, 13H
JB POSITIVE1
MOV AX,COUNTP
AAM ;控制数字显示
ADD AX,3030H
MOV BX,AX
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
MOV AH,02H
INT 21H
MOV DL,' ' ;显示空格
MOV AH,02H
INT 21H
MOV CL,0H ;把计数器置零
MOV COUNT,CL
LEA DI,DATAN ;指针指向存负数的单元
NEGETIVE1:CMP [SI+COUNT],0H
JG NEGETIVE1
MOV CH,[SI+COUNT]
MOV [DI+COUNTN],CH
INC COUNTN
NEGETIVE2:INC COUNT
CMP COUNT, 13H
JB NEGETIVE1
MOV AX,COUNTN
AAM
ADD AX,3030H
MOV BX,AX
MOV DL,BH
MOV AH,02H
INT 21H
MOV DL,BL
JBE NEGETIVE1
MOV DL,COUNTN
ADD DL,30H
MOV AH,02H
INT 21H
MOV DL,' '
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
CSEG ENDS
END START


显示结果不正确,一执行就dos就死了
...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
friendly_ 2009-05-29
  • 打赏
  • 举报
回复
CMP [SI+COUNT],0H 有问题,COUNT取得是偏移地址是固定不变的,[SI+COUNT]则取得永远都是同一个地址的值,即ds:[COUNT]处的值,即控制循环的值
songkai2008 2009-05-29
  • 打赏
  • 举报
回复
SSEG SEGMENT STACK
STK DB 100 DUP (0)
SSEG ENDS
DSEG SEGMENT
DATA DB -1H,-2H,-3H,-4H,-5H,-6H,-7H,-8H,-9H,-10H,1H,2H,3H,4H,5H,6H,7H,8H,9H,10H
DATAP DB 20 DUP (0) ;用来存正数
DATAN DB 20 DUP (0) ;用来存负数
COUNT DB 0H ;控制循环
COUNTP DB 0H ;正数个数
COUNTN DB 0H ;负数个数
DSEG ENDS
改成
SSEG SEGMENT STACK
STK DB 100 DUP (0)
DATAP DB 20 DUP (0) ;用来存正数
DATAN DB 20 DUP (0) ;用来存负数
SSEG ENDS
DSEG SEGMENT
DATA DB -1H,-2H,-3H,-4H,-5H,-6H,-7H,-8H,-9H,-10H,1H,2H,3H,4H,5H,6H,7H,8H,9H,10H
COUNT DB 0H ;控制循环
COUNTP DB 0H ;正数个数
COUNTN DB 0H ;负数个数
DSEG ENDS

结果显示 20,0 现在问题变成如何比较带符号数了 估计是都按大于0算了,,,,,
songkai2008 2009-05-29
  • 打赏
  • 举报
回复
NEGETIVE1:CMP [SI+COUNT],0H
JG NEGETIVE1
改成NEGETIVE1:CMP [SI+COUNT],0H
JG NEGETIVE2

存的正负数正确 但是显示的正负数个数不对

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧