社区
汇编语言
帖子详情
初学汇编,一个小问题求解
andylhq
2009-10-24 11:52:29
MOV AL,8CH
SHL AL,1 ;执行后OF标志为什么是1
MOV CL,6
SHL AL,CL ;执行后OF标志为什么是0
...全文
148
21
打赏
收藏
初学汇编,一个小问题求解
MOV AL,8CH SHL AL,1 ;执行后OF标志为什么是1 MOV CL,6 SHL AL,CL ;执行后OF标志为什么是0
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
andylhq
2009-10-25
打赏
举报
回复
我来答一下,记得给分!
算术,逻辑,循环移位,只在移一位的情况下OF位才有效(移位前后最高位不等,OF=1),否则没定义。
书上貌似没说移一位of位才有效,敢问大虾这句话从何求证呢?
andylhq
2009-10-25
打赏
举报
回复
突然想到一个疑问:
OF位是只对有符号数有效的,那么
MOV AL,8CH
SHL AL,1
这里是把8CH看做有符号数,为什么不把8CH看做无符号数呢?这样OF应该不会置位了吧?在汇编里怎么区分无符号数和有符号数呢?
andylhq
2009-10-25
打赏
举报
回复
[Quote=引用 19 楼 nanlingcg 的回复:]
引用 18 楼 andylhq 的回复:
我来答一下,记得给分!
算术,逻辑,循环移位,只在移一位的情况下OF位才有效(移位前后最高位不等,OF=1),否则没定义。
书上貌似没说移一位of位才有效,敢问大虾这句话从何求证呢?
是要找该说法的出处还是说我附加的简短代码不可以参考验证呢?
出处我不大记得了,您总不会要我把我所看过的教材和资料(有些资料还可能是在网上看到的,茫茫网海叫我怎么再找去啊?)都再滤一遍吧?
要求证,那个简短代码应该可以参考了,真觉得心底还有怀疑,自己还可以写点实践下,还是不相信就只有不信那个说法了(也当我没说就是了)....
[/Quote]
不是不信呀,只是想弄个明白,我查了下资料,你的说法是正确的,当移位操作大于一位时,of位是无定义的
谢谢了
nanlingcg
2009-10-25
打赏
举报
回复
[Quote=引用 18 楼 andylhq 的回复:]
我来答一下,记得给分!
算术,逻辑,循环移位,只在移一位的情况下OF位才有效(移位前后最高位不等,OF=1),否则没定义。
书上貌似没说移一位of位才有效,敢问大虾这句话从何求证呢?
[/Quote]
是要找该说法的出处还是说我附加的简短代码不可以参考验证呢?
出处我不大记得了,您总不会要我把我所看过的教材和资料(有些资料还可能是在网上看到的,茫茫网海叫我怎么再找去啊?)都再滤一遍吧?
要求证,那个简短代码应该可以参考了,真觉得心底还有怀疑,自己还可以写点实践下,还是不相信就只有不信那个说法了(也当我没说就是了)....
andylhq
2009-10-24
打赏
举报
回复
[Quote=引用 2 楼 ip5636626 的回复:]
10001100左移动1位 1出去了,肯定溢出
之后再移6位同理!
[/Quote]
当再移6位时11也移出去了,应当也溢出了,为什么此时OF为0呢?
ip5636626
2009-10-24
打赏
举报
回复
10001100左移动1位 1出去了,肯定溢出
之后再移6位同理!
nearcheng
2009-10-24
打赏
举报
回复
SHL逻辑左移指令啊 百度一下不就只知道啦 晕
nanlingcg
2009-10-24
打赏
举报
回复
TO borefo朋友:
学习需要怀疑,怀疑后要 求证并验证,所以我在回答时为了使很多和我一样的初学者能够很快解疑,特地写了能方便初学者验证的简短代码,就是为了方便朋友们验证。。。当然,朋友们也可以自行求证。。。
请问如何查看OF的值呢?
不要告诉我你不会DEBUG--那我就怀疑你。。。(玩笑话咯!)
borefo
2009-10-24
打赏
举报
回复
[Quote=引用 12 楼 nanlingcg 的回复:]
上面的 MOV AX,DATAS
MOV DS,AX
是多余的,忘了删了,补充说明一下。
[/Quote]
请问如何查看OF的值呢?
j8727
2009-10-24
打赏
举报
回复
[Quote=引用 11 楼 nanlingcg 的回复:]
我来答一下,记得给分!
算术,逻辑,循环移位,只在移一位的情况下OF位才有效(移位前后最高位不等,OF=1),否则没定义。
大家可以通过下面来程序来参考:
CODES SEGMENT
ASSUME CS:CODES
START:
MOV AX,DATAS
MOV DS,AX
MOV AL,99H
MOV BL,AL
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
MOV AL,BL ;从这里开始OF将不守章法!
MOV CL,2
SHL AL,CL
MOV AL,BL
MOV CL,3
SHL AL,CL
MOV AL,BL
MOV CL,4
SHL AL,CL
MOV AL,BL
MOV CL,5
SHL AL,CL
MOV AL,BL
MOV CL,6
SHL AL,CL
MOV AL,BL
MOV CL,7
SHL AL,CL
MOV AL,BL
MOV CL,8
SHL AL,CL
MOV AH,4CH
INT 21H
CODES ENDS
END START
[/Quote]
学习了
borefo
2009-10-24
打赏
举报
回复
[Quote=引用 4 楼 fandelei1982 的回复:]
移位前与移位后,最高位不同时,OF为1,否则OF为0
[/Quote]
这个说法正确么?学习
borefo
2009-10-24
打赏
举报
回复
[Quote=引用 6 楼 desdouble 的回复:]
shl 是逻辑左移指令。
移位指令,不管是逻辑移位,算术移位,不管是左移还是右移,在执行后,被“移”出去的位会放到标志寄存器的OF位中。
开始AL寄存器中存放的是10001100,shl执行后最左侧的"1",被“移”出去,并放到OF位中。此时,AL变成,00011000,OF置"1"。
接下来的一个shl al, cl指令是向左移al=6位。此时AL变成00000000,最后被移出去的位是"0",OF置"0"。
[/Quote]
移出的最高位应该进入CF,不是OF
nanlingcg
2009-10-24
打赏
举报
回复
上面的 MOV AX,DATAS
MOV DS,AX
是多余的,忘了删了,补充说明一下。
nanlingcg
2009-10-24
打赏
举报
回复
我来答一下,记得给分!
算术,逻辑,循环移位,只在移一位的情况下OF位才有效(移位前后最高位不等,OF=1),否则没定义。
大家可以通过下面来程序来参考:
CODES SEGMENT
ASSUME CS:CODES
START:
MOV AX,DATAS
MOV DS,AX
MOV AL,99H
MOV BL,AL
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
SHL AL,1
MOV AL,BL ;从这里开始OF将不守章法!
MOV CL,2
SHL AL,CL
MOV AL,BL
MOV CL,3
SHL AL,CL
MOV AL,BL
MOV CL,4
SHL AL,CL
MOV AL,BL
MOV CL,5
SHL AL,CL
MOV AL,BL
MOV CL,6
SHL AL,CL
MOV AL,BL
MOV CL,7
SHL AL,CL
MOV AL,BL
MOV CL,8
SHL AL,CL
MOV AH,4CH
INT 21H
CODES ENDS
END START
TonyXQQ
2009-10-24
打赏
举报
回复
对应该是CF
XQQ524148626
2009-10-24
打赏
举报
回复
-r
AX=0000 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B33 ES=0B33 SS=0B33 CS=0B33 IP=0100
NV
UP EI PL NZ NA PO NC
0B33:0100 E82E01 CALL 0231
-a
0B33:0100 mov al,8c
0B33:0102 shl al,1
0B33:0104 mov cl,6
0B33:0106 shl al,cl
0B33:0108
-t
AX=008C BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B33 ES=0B33 SS=0B33 CS=0B33 IP=0102
NV
UP EI PL NZ NA PO NC
0B33:0102 D0E0 SHL AL,1
-t
AX=0018 BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B33 ES=0B33 SS=0B33 CS=0B33 IP=0104
OV
UP EI PL NZ NA PE CY
0B33:0104 B106 MOV CL,06
-t
AX=0018 BX=0000 CX=0006 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B33 ES=0B33 SS=0B33 CS=0B33 IP=0106
OV
UP EI PL NZ NA PE CY
0B33:0106 D2E0 SHL AL,CL
-t
AX=0000 BX=0000 CX=0006 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=0B33 ES=0B33 SS=0B33 CS=0B33 IP=0108
OV
UP EI PL ZR NA PE NC
0B33:0108 58 POP AX
-t
AX=0000 BX=0000 CX=0006 DX=0000 SP=FFF0 BP=0000 SI=0000 DI=0000
DS=0B33 ES=0B33 SS=0B33 CS=0B33 IP=0109
OV
UP EI PL ZR NA PE NC
0B33:0109 893EE699 MOV [99E6],DI DS:99E6=0000
-
好像结果不一致
goodider
2009-10-24
打赏
举报
回复
还是看看书吧上面介绍的还算清除。
desdouble
2009-10-24
打赏
举报
回复
需要注意的是,在执行shl al, cl时,al已经变成了00011000,而不是原来的10001100了。
desdouble
2009-10-24
打赏
举报
回复
shl 是逻辑左移指令。
移位指令,不管是逻辑移位,算术移位,不管是左移还是右移,在执行后,被“移”出去的位会放到标志寄存器的OF位中。
开始AL寄存器中存放的是10001100,shl执行后最左侧的"1",被“移”出去,并放到OF位中。此时,AL变成,00011000,OF置"1"。
接下来的一个shl al, cl指令是向左移al=6位。此时AL变成00000000,最后被移出去的位是"0",OF置"0"。
BAYNPU
2009-10-24
打赏
举报
回复
把上述指令反过来移位就看得很清楚了:
MOV AL,8CH
MOV CL,6
SHL AL,CL
SHL AL,1
加载更多回复(1)
CST微波工作室学习资料--很全很全.zip
CST微波工作室用户全书(卷一,卷二)---张敏博士所著,
初学
者必备 CST工作室套装-高级概念 ---张敏博士所著,涉及到
求解
器,网格,VBA宏编译,后 处理等高级概念 88-基本概念、仿真技巧03 89-基本概念、仿真技巧...
简明x86
汇编
语言教程
我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的
汇编
程序来把助记符翻译成机器...
C语言/C++
初学
问题
本贴主要分析概念原理和解决方案,不讨论具体程序语法,立足于让
初学
者能运行起第
一个
程序。其他事宜如解释入门语法等本文基本不涉及。 本文依照 创作公用约定(署名-非派生作品-非商业用途) 发布。作者(即本人)...
[转]简明x86
汇编
语言教程
第○章 写在前面 我不想夸大...我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的汇
汇编
总体讲解
我们可以使用键盘、鼠标来驾驭“个人计算机”,而不是和一群人共享一台使用笨重的继电器、开关去操作的巨型机。相比之下,我们的前辈不得不使用机器语言编写程序,他们甚至没有最简单的
汇编
程序来
汇编语言
21,459
社区成员
41,601
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章