| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 815 人关注过本帖
标题:帮详细点的分析下这个汇编程序执行步骤即每一部的作用
只看楼主 加入收藏
lxh200909320
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-18
结帖率:0
收藏
已结贴  问题点数:2 回复次数:4 
帮详细点的分析下这个汇编程序执行步骤即每一部的作用
SSEG   SEGMENT  STACK        
STR    DB       100 DUP(0)
SSEG   ENDS
DSEG   SEGMENT
S      DW      ?
DSEG   ENDS
CSEG   SEGMENT
       ASSUME  SS:SSEG,DS:DSEG
       ASSUME  CS:CSEG
START: MOV  AX,SSEG
       MOV  SS,AX
       MOV  AX,DSEG
       MOV  DS,AX               
       MOV  BX,1               
       MOV  AL,2                 
LP:    MOV  AH,AL               
       MOV  CL,AL            
       INC  AH                  
       MUL  AH                  
       ADD  BX,AX               
       CMP  BX,200               
       JA   STOP                  
                              
       MOV  AL,CL               
       INC  AL                  
       JMP  LP               
STOP:  MOV  S,BX               
       MOV  BL,CL              
       CALL DISP                 
       MOV  AH,4CH              
       INT  21H
DISP    PROC                  
    MOV DL,78
    MOV AH,02H
    INT 21H              
    MOV DL,61
    MOV AH,02H
    INT 21H               
    MOV CH, 2            
L:      MOV CL, 4           
        ROL BL, CL         
        MOV DL, BL         
        AND DL, 0FH         
        CMP DL, 10
        JB  NEXT            
        ADD DL, 7
NEXT:   ADD DL, 30H        
        MOV AH, 02H         
        INT 21H
        DEC CH            
        JNZ L
        RET                    
DISP    ENDP               
                           
CSEG    ENDS
        END  START
2011-12-18 20:01
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:1 
程序代码:
SSEG   SEGMENT  STACK       
STR    DB       100 DUP(0)
SSEG   ENDS
DSEG   SEGMENT
S      DW      ?                   ;unsinged short s;
DSEG   ENDS
CSEG       SEGMENT
           ASSUME  SS:SSEG,DS:DSEG
           ASSUME  CS:CSEG
START:    
           MOV  AX,SSEG
           MOV  SS,AX
           MOV  AX,DSEG
           MOV  DS,AX                  
           MOV  BX,1               ;unsigned short b = 1;
           MOV  AL,2               ;unsigned short a = 2;
LP:                                ;calculate bit2Npos                  
           MOV  AH,AL              ;a |= LOBYTE(a);
           MOV  CL,AL              ;unsigned char bit2Npos = LOBYTE(a);
           INC  AH              
           MUL  AH                 ;a = LOBYTE(a)*(HIBYTE(a)+1);
           ADD  BX,AX              ;b += a;    
           CMP  BX,126              
           JA   STOP               ;if (b > 200) goto stop               
           MOV  AL,CL
           INC  AL                 ;else a++;
           JMP  LP                 ;goto LP
STOP:     
           MOV  S,BX               ;s = b;   
           MOV  BL,CL              ;unsigned char para_b = bit2Npos;
           CALL DISP               ;disp(para_b);               
           MOV  AH,4CH             
           INT  21H                ;exit(0)
DISP       PROC                    ;void disp(unsigned char para_b);
           MOV DL,78
           MOV AH,02H
           INT 21H                 ;putchar('N');
           MOV DL,61
           MOV AH,02H
           INT 21H                 ;putchar('=')        
           MOV CH, 2               ;unsigned char i;          
L:     
           MOV CL, 4               ;unsigned char offset = 4;
           ROL BL, CL              ;#define ROL(x, s, n) ((x) >> (n)) | ((x) << ((s) - (n)))
           MOV DL, BL              ;unsigned char ch = para_b;       
           AND DL, 0FH             ;ch = (LOBYTE)ROL(para_b, 8, offset);    
           CMP DL, 10
           JB  NEXT                ;if (ch < 10) goto NEXT;
           ADD DL, 7               ;else ch += NUMERIC; #define NUMERIC (7)
NEXT:  
           ADD DL, 30H             ;ch += CHARACTER; #define CHARACTER (0x30)       
           MOV AH, 02H        
           INT 21H                 ;putchar(ch);
           DEC CH            
           JNZ L                   ;while(i--);
           RET                     ;return;
DISP       ENDP              
                          
CSEG       ENDS
END        START 
我的分析就是这样,看不懂你只有自己努力了

[ 本帖最后由 zaixuexi 于 2011-12-18 21:05 编辑 ]

技术问题,请不要以短消息方式提问
2011-12-18 21:02
zjsxwc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:1
帖 子:252
专家分:601
注 册:2011-1-20
收藏
得分:1 
把bx,ax寄存器用内存变量用b,a来替代,看得我好疼。。。。。

The tools I recommended:
GUI: CSharp(VS), QT;    Core Code: Plain C (Tiny C Compiler);    Web: Python, JavaScript;    Android: Java;    Embedded System: ASM&C (Linux)
2011-12-20 22:45
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
楼上有何高见?
你是不是以为我就拿了个变量替换下寄存器就完事了?难到我要跟你讲的明明白白局部变量是用stack frame pointer来访问?还是你以为这是答案?
你是不是觉得我写个register变量就对了?想怎么描述是我的事情?你可以来谈谈你的高见

技术问题,请不要以短消息方式提问
2011-12-20 23:10
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
还是你以为我写的编译器代码?你有什么不爽就直说,不要疼不疼的,OK?

技术问题,请不要以短消息方式提问
2011-12-20 23:13
快速回复:帮详细点的分析下这个汇编程序执行步骤即每一部的作用
数据加载中...
 
   



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

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