| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 749 人关注过本帖
标题:伪指令.while判断有符号数,却被汇编成判断无符号数,如何修改
只看楼主 加入收藏
fxj_agame
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-6
结帖率:100%
收藏
已结贴  问题点数:0 回复次数:3 
伪指令.while判断有符号数,却被汇编成判断无符号数,如何修改
data    segment
    array dw 1,2,5,8,0,9,22,-1
    average dw 0
data    ends

code    segment
    assume cs:code,ds:data
start:
    mov ax,data
    mov ds,ax
;------------------------
    lea si,array
    xor ax,ax
    xor dx,dx
    xor cx,cx
    mov bx,[si]
    .while (bx>=0);此处被汇编成cmp bx,0    jnb xxx。为什么不是汇编成jge xxx(xxx为add ax,bx地址)
        add ax,bx
        adc dx,0
        inc cx
        add si,type word
        mov bx,[si]
    .endw
    div cx
    mov average,ax
;-------------------
exit:
    mov ax,4c00h
    int 21h
code    ends
    end start
搜索更多相关主题的帖子: 伪指令 符号 word 
2011-06-06 13:44
obstratiker
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:1
帖 子:198
专家分:758
注 册:2011-5-5
收藏
得分:10 
用寄存器进行比较的时候,编译器不能确定该值是有符号的还是没有符号的,所以默认用无符号的了
你在 .while 中用变量代替 bx ,比如 array[si] >= 0     (si 先置零)

另外定义数据时用
array sword 1,2,5,8,0,9,22,-1

这样就好了
2011-06-06 14:18
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
以下是引用obstratiker在2011-6-6 14:18:53的发言:

用寄存器进行比较的时候,编译器不能确定该值是有符号的还是没有符号的,所以默认用无符号的了
你在 .while 中用变量代替 bx ,比如 array[si] >= 0     (si 先置零)

另外定义数据时用
array sword 1,2,5,8,0,9,22,-1

这样就好了

可以用sword ptr 让宏替换出你想要的指令。。
2011-06-06 15:30
fxj_agame
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2011-6-6
收藏
得分:0 
回复 3楼 zklhp
谢谢。
将.while(bx>=0)改成.while(sword ptr bx>=0),汇编后得jl的跳转指令,已解决。
2011-06-06 15:49
快速回复:伪指令.while判断有符号数,却被汇编成判断无符号数,如何修改
数据加载中...
 
   



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

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