| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1256 人关注过本帖
标题:急求注释!急!急!急!
只看楼主 加入收藏
jhtyolg20002
Rank: 1
等 级:新手上路
帖 子:66
专家分:6
注 册:2007-3-29
收藏
 问题点数:0 回复次数:3 
急求注释!急!急!急!
此程序要达到的目的:
    (用汇编)编写一个程序,将一个包含有20个有符号数据的数组arrayM分成两个数组:正数数组arrayB和负数数组arrayC并分别把这两个数组中的数据显示出来.(是显示数据,不是个数)

希望大哥大姐,给添加注释, wolaixiazai仁兄曾给过注释,但因小弟太过愚笨,至今还有好多解
望大哥大姐给予注释,越详细越好!



DATA  SEGMENT               ;定义数据段
      ARRAYM  DB        2,-5,34,28,10,-9,-56,20,-25,-23,-46,-8,-14,-10,81,82,-97,30,-47,3
                           ;定义20个元素的数组
      ARRAYP  DB        20   DUP(?) ;定义正数的存储单元
      ARRAYN  DB        20   DUP(?) ;定义负数的存储单元
        PLUS  DB        ?           ;记录正数个数
      NEGATV  DB        ?           ;记录负数个数
        DATA  ENDS                  ;数据段结尾
        CODE  SEGMENT               ;定义代码段
              ASSUME    CS:CODE,DS:DATA         ;规定CS,DS的内容
        MAIN  PROC      FAR         ;主程序
      START:  MOV       AX,DATA     ;程序从START开始,将DATA的值放到AX积存器中
              MOV       DS,AX       ;将AX的值赋值给数据段中,即定位数据段
              LEA       SI,ARRAYM   ;取ARRAYM 这个内存单元的值的地址放到SI中
              LEA       DI,ARRAYP
              LEA       BX,ARRAYN
              MOV       CX,20       ;设置循环次数
       LOP1:  MOV       AX,0        ;把0传送到AX
              MOV       AL,[SI]     ;把[SI]中的内容传送到AL
              TEST      AL,80H      ;判断数的正负
              JZ        LOP2        ;元素为正数则跳出
              MOV       [BX],AL     ;否则为负数则存入负数数组
              INC       NEGATV      ;负数计数
              INC       BX          ;修改原数组地址
              JMP       AGAIN0      ;无条件转入AGAIN0
       LOP2:  MOV       [DI],AL     ;将正数存入正数数组
              INC       PLUS        ;正数计数
              INC       DI          ;修改数组地址
     AGAIN0:  INC       SI          ;修改原数组地址
              LOOP      LOP1        ; 循环LOP1段,执行一次,CX减1,直到CX为0,循环停止
               
              MOV       CL,PLUS
              CMP       CL,0        ;与0比较
              JE        LP1         ;数组个数为0则跳转
              MOV       BX,OFFSET ARRAYP        ;输出正数组
     AGAIN1:  MOV       DL,10
              MOV       AL,[BX]     ;把[BX]中的内容传送到AL

              MOV       AH,0        ;把0传送到AH,;将AH清零
              DIV       DL          ;将ARRAYP中的数据除以10
              CMP       AL,0        ;与0比较
              JE        TO1         ;商为0则跳到TO1

              MOV       DH,AH       ;商不为0则说明有两位数,先输出十位,再输出个位
              ADD       AL,30H      ;把AL内数据加30H,并存入al;不为零则将数字转换成字符 ;转换成16进制表示
              MOV       DL,AL
              MOV       AH,2
              INT       21H         ;输出商

              ADD       DH,30H      ;把DH内数据加30H,并存入DH
              MOV       DL,DH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
              JMP       TO2
        TO1:  ADD       AH,30H      ;跳到这里说明要输出的是一位数,故从除得的余数AH中输出
              MOV       DL,AH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
        TO2:  INC       BX
              DEC       CL
              JNE       AGAIN1
              CALL      ENTER       ;调用显示回车换行子程序,回车换行
        LP1:  MOV       CL,NEGATV   ;输出负数组
              CMP       CL,0
              JE        LP2
              MOV       BX,OFFSET ARRAYN
     AGAIN2:  MOV       DL,'-'
              MOV       AH,2
              INT       21H
              MOV       DL,10
              MOV       AL,[BX]     ;在数据段中定义数组是用的是DB,故在此赋值给8位的AL,但是作除法时要用AX除,所以在下一句中给高8位0FFH,即把所有位置1,因为负数是求补码存储的
              MOV       AH,0FFH     ;最高位为1转移到此执行:设置AH=FFH
              NOT       AX          ;负数转换为绝对值(的原码)就是"按位取反然后加一"
              ADD       AX,1
              DIV       DL
              CMP       AL,0
              JE        TO3         ;商为0则跳到TO3
              
              MOV       DH,AH
              ADD       AL,30H
              MOV       DL,AL
              MOV       AH,2
              INT       21H

              ADD       DH,30H
              MOV       DL,DH
              MOV       AH,2
              INT       21H
              MOV       DL,','
              MOV       AH,2
              INT       21H
              JMP       TO4
        TO3:  ADD       AH,30H
              MOV       DL,AH
              MOV       AH,2
              INT       21H

              MOV       DL,','
              MOV       AH,2
              INT       21H
        TO4:  INC       BX
              DEC       CL
              JNE       AGAIN2
        LP2:  MOV       AH,4CH
              INT       21H ;这两句是调用21H中断的4C功能。返回DOS操作系统!!

              ENTER     PROC   NEAR ;显示回车换行子程序
              MOV       DL,13
              MOV       AH,2
              INT       21H

              MOV       DL,10
              MOV       AH,2
              INT       21H
              RET                   ;返回 DOS
              ENTER     ENDP        ;子程序结尾
        MAIN  ENDP                  ;主程序结束
        CODE  ENDS                  ;代码段结尾
              END       START       ;结束汇编
搜索更多相关主题的帖子: 注释 
2007-12-09 20:20
永夜的极光
Rank: 6Rank: 6
等 级:贵宾
威 望:27
帖 子:2721
专家分:1
注 册:2007-10-9
收藏
得分:0 
都注释成这样了,还怎么再详细?

从BFS(Breadth First Study)到DFS(Depth First Study)
2007-12-09 20:28
jhtyolg20002
Rank: 1
等 级:新手上路
帖 子:66
专家分:6
注 册:2007-3-29
收藏
得分:0 
这些有些是我注释的,思想不一定对
还需要改正
2007-12-09 20:40
yiyuandao
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2007-12-12
收藏
得分:0 
注释的这么详细啊 
2007-12-12 13:29
快速回复:急求注释!急!急!急!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015248 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved