| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1317 人关注过本帖
标题:中间变量
只看楼主 加入收藏
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
 问题点数:0 回复次数:9 
中间变量
M_CRLF MACRO     ;回车
        MOV DL, 0AH
        MOV AH,02H
        INT  21H
        MOV DL, 0DH
        MOV AH,02H
        INT 21H
        ENDM
ws   macro   z
               local  aa3 ,bb3 ,aa4 ,bb4
               mov   dx, cx
               mov  al, z                    ;  这里将Z的值赋给了AL,对z
;的值作变化 ,AL没有做改变
              and    z, 0f0h         
               mov      cl, 04h              
               shr        z,   cl   
               mov  cx, dx
               cmp     z,  09h
               ja        aa3
               add       z, 30h
              jmp       bb3
        aa3:  add   z, 37h
        bb3: mov     dl, z
                mov      ah, 02h
                 int       21h
                and      al,0fh     ;   这里取AL的低字节即要取Z的
;低字节                 cmp    al,09h
                 ja       aa4
                add        al, 30h
                jmp       bb4
        aa4:  add       al, 37h
       bb4:  mov       dl, al
                 mov       ah,02h
                 int         21h
                 endm
sum macro  x, y
         add x, y
         ws  x
         M_CRLF
   endm
DATA segment
 buf1    db     11h,12h,13h,14h,15h,16h,17h,18h,19h
 buf2    db    21h,22h,23h,24h,25h,26h,27h,28h,29h
DATA ends
code segment
assume  cs:code , ds:DATA
start: mov  ax, DATA
          mov  ds, ax
          mov  es, ax
          mov  si, offset buf1
          mov   di ,offset  buf2
          mov  cx, 09h
done: mov al, [si]
          mov  bl, [di]
           inc  si
           inc  di
           sum al, bl
           loop done
           mov ah, 4ch
           int 21h
code ends
          end start
为什么结果会是这样的:
33
33
33
33
33
33
33
44
44
而将这两句改为
MOV  BL, Z
MOV  AL, BL 结果正确了,为什么不可以对AL 直接取字节,要用一个中间变量呢?
搜索更多相关主题的帖子: 变量 
2008-11-27 17:46
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
注意 宏只是简单的替换 要注意寄存器的改变呀
2008-11-27 18:15
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
在我这儿没输出呀~~~
2008-11-27 18:17
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zklhp在2008-11-27 18:17的发言:

在我这儿没输出呀~~~


呵呵 有输出了 还是那个毛病 寄存器改变~~~~

你的z其实就是al 你把它代进去看看罢~~~~~
2008-11-27 18:32
xiaxin
Rank: 1
等 级:新手上路
帖 子:41
专家分:0
注 册:2007-10-21
收藏
得分:0 
mov  al, z 是将变量 z 的值赋给al, z改变 了,al也改变了吗? 相当 于C++里的引用吗?
2008-11-27 19:06
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用zklhp在2008-11-27 18:15的发言:

注意 宏只是简单的替换 要注意寄存器的改变呀


再发一遍!
2008-11-27 19:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
以下是引用xiaxin在2008-11-27 19:06的发言:

mov  al, z 是将变量 z 的值赋给al, z改变 了,al也改变了吗? 相当 于C++里的引用吗?


宏会被展开 你这里就是

mov al,al

不信就反汇编一下你生成的程序~~~~
2008-11-27 19:20
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
2195:0005 8EC0             MOV     ES,AX
2195:0007 BE0000           MOV     SI,0000h
2195:000A BF0900           MOV     DI,0009h
2195:000D B90900           MOV     CX,0009h
2195:0010 8A04             MOV     AL,[SI]
2195:0012 8A1D             MOV     BL,[DI]
2195:0014 46               INC     SI
2195:0015 47               INC     DI
2195:0016 02C3             ADD     AL,BL
2195:0018 8BD1             MOV     DX,CX
-u
2195:001A 8AC0             MOV     AL,AL
2195:001C 24F0             AND     AL,0F0h
2195:001E B104             MOV     CL,04h
2195:0020 D2E8             SHR     AL,CL
2195:0022 8BCA             MOV     CX,DX
2195:0024 3C09             CMP     AL,09h
2195:0026 7704             JA      Short 002C
2195:0028 0430             ADD     AL,30h
2195:002A EB02             JMP     Short 002E

2195:002C 0437             ADD     AL,37h
2195:002E 8AD0             MOV     DL,AL
2195:0030 B402             MOV     AH,02h

自己看吧
2008-11-27 19:22
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
M_CRLF MACRO     ;回车
        MOV DL, 0AH
        MOV AH,02H
        INT  21H
        MOV DL, 0DH
        MOV AH,02H
        INT 21H
        ENDM
ws   macro   z
               local  aa3 ,bb3 ,aa4 ,bb4
               mov   dx, cx
               push ax
              and    z, 0f0h         
               mov      cl, 04h              
               shr        z,   cl   
               mov  cx, dx
               cmp     z,  09h
               ja        aa3
               add       z, 30h
              jmp       bb3
        aa3:  add   z, 37h
        bb3: mov     dl, z
                mov      ah, 02h
                 int       21h
                 pop ax
                and      al,0fh     ;   这里取AL的低字节即要取Z的;低字节
                 cmp    al,09h
                 ja       aa4
                add        al, 30h
                jmp       bb4
        aa4:  add       al, 37h
       bb4:  mov       dl, al
                 mov       ah,02h
                 int         21h
                 endm
sum macro  x, y
         add x, y
         ws  x
         M_CRLF
   endm
DATA segment
buf1    db     11h,12h,13h,14h,15h,16h,17h,18h,19h
buf2    db    21h,22h,23h,24h,25h,26h,27h,28h,29h
DATA ends
code segment
assume  cs:code , ds:DATA
start: mov  ax, DATA
          mov  ds, ax
          mov  es, ax
          mov  si, offset buf1
          mov   di ,offset  buf2
          mov  cx, 09h
done: mov al, [si]
          mov  bl, [di]
           inc  si
           inc  di
           sum al, bl
           loop done
           mov ah, 4ch
           int 21h
code ends
          end start

这样差不多了
2008-11-27 19:24
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
呵呵 知道了吧 再不知道就看书吧~~~~~

从这个可以看出 做好别用 或少用宏 简单的还行 复杂的最好用函数!
2008-11-27 19:25
快速回复:中间变量
数据加载中...
 
   



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

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