| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 552 人关注过本帖
标题:哪位朋友给逐局讲下 这个程序 谢谢了
只看楼主 加入收藏
情非得已
Rank: 1
等 级:新手上路
帖 子:59
专家分:5
注 册:2011-4-23
结帖率:100%
收藏
已结贴  问题点数:3 回复次数:5 
哪位朋友给逐局讲下 这个程序 谢谢了
datasg    segment   para    'data'
three     db        3
mess      db        'month?',13,10,'$'
monin     label     byte
 max      db        3
 act      db        ?
 mon      db        3 dup(?)
;
alfmon    db        '???',13,10,'$'
montab    db        'JAN','FEB','MAR','APR','MAY','JUN'
          db        'JUL','AUG','SEP','OCT','NOV','DEC'
;
datasg    ends

codesg    segment   para     'code'
          assume cs:codesg,ds:datasg,es:datasg
main      proc      far
          push      ds
          sub       ax,ax
          push      ax
;
          mov       ax,datasg
          mov       ds,ax
          mov       es,ax
;                   Input month:

start:
          lea       dx,mess
          mov       ah,09
          int       21h
          lea       dx,monin
          mov       ah,0ah
          int       21h
          mov       dl,13
          mov       ah,02
          int       21h
          mov       dl,10
          mov       2h,02
          int       21h
          cmp       act,0
          je        exit

          mov       ah,30h
          cmp       act,2
          je        two
          mov       al,mon
          jmp       conv
two:
          mov       al,mon+1
          mov       ah,mon
conv:
          xor       ax,3030h
          cmp       ah,0
          jz        loc
          sub       ah,ah
          add       al,10

loc:
          lea       si,montab
          dec       al
          mul       three
          add       si,ax
          mov       cx,03
          cld
          lea       di,alfmon
          rep       movsb

          lea       dx,alfmon
          mov       ah,09
          int       21h
          jmp       start
;
exit:     ret
main      endp
codesg    ends
          end       main
         
搜索更多相关主题的帖子: 朋友 
2011-05-07 16:53
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:3 
程序代码:
datasg    segment   para    'data'                            ;数据段头
three     db        3                                         ;变量three里放的是3
mess      db        'month?',13,10,'$'                        ;要显示出来的字符串
monin     label     byte                                      ;标号名字叫monin
max      db        3                                          ;最大输入长度
act      db        ?                                          ;实际长度
mon      db        3 dup(?)                                   ;用户输入缓冲区
;                                                             ;一个占一行的分号
alfmon    db        '???',13,10,'$'                           ;要显示的字符串
montab    db        'JAN','FEB','MAR','APR','MAY','JUN'       ;名字叫montab的变量
          db        'JUL','AUG','SEP','OCT','NOV','DEC'       ;一个存着月份字符串的缓冲区,通过索引来查找
;                                                             ;一个占一行的分号
datasg    ends                                                ;数据段尾
                                                              ;空行
codesg    segment   para     'code'                           ;代码段头
          assume cs:codesg,ds:datasg,es:datasg                ;段寄存器关联
main      proc      far                                       ;main头
          push      ds                                        ;ds入栈
          sub       ax,ax                                     ;ax=0
          push      ax                                        ;ax入栈,以上3句表明EXE通过PSP头的CD 20返回
;                                                             ;一个占一行的分号
          mov       ax,datasg                                 ;ax=编译器编译好的一个常量地址
          mov       ds,ax                                     ;ds=ax
          mov       es,ax                                     ;es=ax
;                   Input month:                              ;一个被注释掉的名字叫input month的标号
                                                              ;空行
start:                                                        ;一个用做循环的标号start,所以最后一句的用法为end main,而不是end start
          lea       dx,mess                                   ;dx指向mess
          mov       ah,09                                     ;ah=9
          int       21h                                       ;以上3句显示mess字符串
          lea       dx,monin                                  ;dx指向monin
          mov       ah,0ah                                    ;ah=10
          int       21h                                       ;以上3句为输入月份
          mov       dl,13                                     ;dl=13
          mov       ah,02                                     ;ah=2
          int       21h                                       ;以上3句为显示一个回车符
          mov       dl,10                                     ;dl=10
          mov       2h,02                                     ;代码哪里抄的?->mov ah,02
          int       21h                                       ;以上3句为显示一个换行符
          cmp       act,0                                     ;判断是否有输入
          je        exit                                      ;没输入就退出
                                                              ;空行
          mov       ah,30h                                    ;ah=30h               
          cmp       act,2                                     ;如果输入2位
          je        two                                       ;跳转到two标号
          mov       al,mon                                    ;al = mon
          jmp       conv                                      ;跳转到conv标号
two:                                                          ;一个名字叫two的标号
          mov       al,mon+1                                  ;al = mon+1
          mov       ah,mon                                    ;以上两句为输入2位则放入ax
conv:                                                         ;一个名字叫conv的标号
          xor       ax,3030h                                  ;字符减掉3030h,留下正确的索引,将要保存到al中
          cmp       ah,0                                      ;如果输入1位
          jz        loc                                       ;直接跳转到loc标号
          sub       ah,ah                                     ;ah=0
          add       al,10                                     ;以上两句说明2位的索引,al加上10,符合montab的布局
                                                              ;空行
loc:                                                          ;一个名字叫loc的标号
          lea       si,montab                                 ;si指向montab
          dec       al                                        ;al减1
          mul       three                                     ;字节相乘,结果在ax,得到了需要的字符串在montab的偏移
          add       si,ax                                     ;si指向需要输出的第1个字符
          mov       cx,03                                     ;cx=3
          cld                                                 ;递增方向
          lea       di,alfmon                                 ;目的缓冲区
          rep       movsb                                     ;以上5句为长度为3的缓冲区数据从ds:si->es:di
                                                              ;空行
          lea       dx,alfmon                                 ;dx指向alfmon
          mov       ah,09                                     ;ah=9
          int       21h                                       ;以上3句为显示经过修改后的alfmon字符串
          jmp       start                                     ;跳转到start标号
;                                                             ;一个占一行的分号
exit:     ret                                                 ;retf跳转到psp头
main      endp                                                ;main尾
codesg    ends                                                ;代码段尾
          end       main                                      ;代码段的起始地址
分析完(这个字好难对齐)

技术问题,请不要以短消息方式提问
2011-05-08 15:45
情非得已
Rank: 1
等 级:新手上路
帖 子:59
专家分:5
注 册:2011-4-23
收藏
得分:0 
这位朋友太牛了     

谢谢了
2011-05-09 01:16
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
下次没你自己的分析,我不会回了,一看就是抄的

技术问题,请不要以短消息方式提问
2011-05-09 09:50
情非得已
Rank: 1
等 级:新手上路
帖 子:59
专家分:5
注 册:2011-4-23
收藏
得分:0 
版主可不能这样啊  不是抄的 我初学这个 听人说学这个要多读程序 就找来看了 可不会啊 呵呵 多多帮助啊
2011-05-18 21:05
你们都要疼我哦
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:火星
等 级:贵宾
威 望:49
帖 子:1296
专家分:2746
注 册:2008-7-13
收藏
得分:0 
?

小妹,哥哥看你骨骼清奇,绝非凡人,将来必成大业,不如这样,你先把裤裤脱了,待哥哥为你开启灵窍,然后我们一起努力钻研如何
2011-05-23 01:57
快速回复:哪位朋友给逐局讲下 这个程序 谢谢了
数据加载中...
 
   



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

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