. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->标志寄存器
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  检测点11.1  [待解决] 回复[ 5次 ]   点击[ 419次 ]  
pediyzhi
[帖 主]   [ 发表时间:2012-08-31 21:02 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-06-06 13:58
最后一个mul al 不管是144h或者是90h
最后的sf都是0
但是如果不用mul指令 的话 SF就会改变.请问为什么
pediyzhi
[第1楼]   [ 回复时间:2012-08-31 21:05 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-06-06 13:58
为了测试我把指令改了下
assume cs:code


code segment
start:        sub     al,al
        mov     al,1
        push    ax
        pop     bx
        add     al,bl
        add     al,10
        mul     al
        dec     al 
        inc     al
        
        
        mov        ax,4c00h
        int        21h
code ends
end start

最后的指令得到的值是一样的
但是sf就变为1了,这是为什么啊难不成mul指令对sf标志位无效?
zhangjilin
[第2楼]   [ 回复时间:2012-09-06 16:39 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-09-01 11:24
两个正数相乘得到的一定是正数,我是这样想的。
zhangjilin
[第3楼]   [ 回复时间:2012-09-06 16:45 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-09-01 11:24
上面说错了,mul al的结果是保存到AX中的,所以要看AX的正负。
lishenycy
[第4楼]   [ 回复时间:2012-10-13 11:01 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2012-09-30 22:11
上面对了,mul al的结果是保存到ax中的,所以要看ax的正负,而此时ax为0000000010010000b最高位为0 那么非负sf=0;
而经过
dec  al  
inc  al 
运算后,结果存到了al中,此时al为10010000b最高位为1 那么为负sf=1;
1152659530
[第5楼]   [ 回复时间:2023-08-08 20:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2023-07-25 10:13
原来如此,话说补码的原理是什么?
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved