社区
汇编语言
帖子详情
初学汇编,一个小问题求解
andylhq
2009-10-24 11:52:29
MOV AL,8CH
SHL AL,1 ;执行后OF标志为什么是1
MOV CL,6
SHL AL,CL ;执行后OF标志为什么是0
...全文
155
21
打赏
收藏
初学汇编,一个小问题求解
MOV AL,8CH SHL AL,1 ;执行后OF标志为什么是1 MOV CL,6 SHL AL,CL ;执行后OF标志为什么是0
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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)
FORTRAN算法
汇编
非常有用的fortran算法
汇编
,各类程序都有
汇编
语言中循环结构的设计实现及其应用-通过具体实验掌握数据块传送与循环指令应用
内容概要:本文档介绍了一次有关
汇编
语言的学习实验,主要目的是让学生理解和掌握循环结构、数据块传送及循环指令的设计与应用方法。具体的实验任务为利用循环求自然数列之和,当总和大于指定值(如500)时停止,并显示最后一次累加数值N和总和S。文中包含了程序的具体说明与源码解析,展示了从程序结构定义到代码实现,再到最后的测试运行整个过程,同时也给出了相应的实验结果对比。除此之外,作者还在末尾附上了实验的心得体会,指出了本实验需要注意的地方,如对于输出数字超过一位的情况需要特别处理。 适合人群:
汇编
语言
初学
者,尤其是想要深入了解并掌握
汇编
语言下循环指令使用技巧的人士。 使用场景及目标:该材料适合作为教学案例用于
汇编
语言课程的教学实践中,旨在培养学生对
汇编
语言的兴趣以及编程思维能力。目标是使学生熟练运用循环结构进行简单
问题
求解
,提高他们解决
问题
的能力。 其他说明:除了实际操作部分,还提供了一些关于优化代码的小贴士。通过对这个小项目的完整演练,学生们不仅能够获得理论知识的增长,还可以锻炼动手实践能力和独立思考
问题
的方式。
(信息学奥赛辅导)程序设计试题
汇编
(答案10).doc
(信息学奥赛辅导)程序设计试题
汇编
(答案10).doc
MUC
汇编
语言中的简单算术运算程序设计与调试
内容概要:本文档介绍了基于MUC
汇编
语言的
一个
实验任务,旨在帮助学习者理解和掌握
汇编
指令执行过程及简单的算术操作。具体来说,文中描述了
一个
涉及四个步骤的实验流程:首先定义变量X,Y,Z以及用于存储中间或最终成果的位置W,这些都设定成八比特带有标记位数字(即所谓的“带符号”),紧接着通过特定编码方式实现基本数学函数比如加法、减法及其组合,然后逐步解释每一句关键命令的功能和它对应的实际物理意义,其中包括加载所需数据进内存单元里供CPU取指,设置段地址映射,进行数值累加之差额
求解
等等,最后借助于模拟器或真实的PC机器来检验编译链接后源程序能否顺利达成既定目标任务并且展示一些常见故障案例像是溢出处理等。 适用人群:主要针对正在学习
汇编
语言或是对计算机底层架构有一定兴趣的人士,特别是
初学
者或者是希望通过实例加深对
汇编
理解的学生群体。 使用场景及目标:该材料可用于课堂授课、个人自学以及作为参考手册。目的是让参与者学会在PC环境中创建、编译和测试小型的应用程序,尤其是那些涉及到直接硬件操作的应用场景。此外,对于想要深入了解计算机科学基础概念的人而言,这份资料也有助于理解CPU的工作机制及
汇编
级别代码的作用。 其他说明:文内还包括了一些具体的代码演示片段和实际执行过程截图,以便更好地解释各个阶段的操作细节;同时提出若干思考题以鼓励进一步探讨,如当发生数值超限时系统如何响应,是否需要考虑负数表示等因素。总体上看,《实验二》不仅是技术指南还是一份有助于构建全面认识的重要文献。
趣味程序
汇编
这是一些趣味程序的汇总,是我们教授给的,个人觉得对启蒙编程很有好处。喜欢的人可以下下来看看。
汇编语言
21,496
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章