标题:考试:喜欢汇编的网友可以试试
只看楼主
cnhanxiao
Rank: 2
等 级:新手上路
威 望:4
帖 子:124
专家分:0
注 册:2008-10-17
 问题点数:0 回复次数:11 
考试:喜欢汇编的网友可以试试
第一题:在以下代码上加一条语句,让程序能同时判断出是不是小写字母
  cmp bl,'A'
  jb _Err
  cmp bl,'Z'
  jg _Err

第二题(有些刁钻):用四字节实现下面的代码
   IF ZF=1
      inc eax
   ELSE
       mov al,40h
   ENDIF

答案三天后公布

[bo][un]为避免三天后我忘记,答案已在3楼公布[/un][/bo]

[[it] 本帖最后由 cnhanxiao 于 2008-11-3 15:37 编辑 [/it]]
搜索更多相关主题的帖子: 汇编 考试 网友 
2008-11-03 12:56
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
第一个利用大小写的差值 是吗

第二个得用debug……
2008-11-03 13:14
cnhanxiao
Rank: 2
等 级:新手上路
威 望:4
帖 子:124
专家分:0
注 册:2008-10-17
得分:0 
怕三天后忘记这个考题了,干脆现在就告诉答案:

第一题
  and bl,0DFh   ;强制将小写字母转换为大写,而对大写字母不影响
  cmp bl,'A'
  jb _Err
  cmp bl,'Z'
  jg _Err

第二题
其实就是花指令
  jz $+3
  mov al ,40h
不具有普遍意义。为零时,正好跳转到立即数40h处,而40h正好是inc eax。
2953:0103 7401             JZ      Short 0106
2953:0105 B040             MOV     AL,40h

2953:0106 40               INC     EAX
是四个字节吧?:)

具有普遍意义的至少5字节:
:00401002 7402 jz  00401006
:00401004 B027 mov al,3F
:00401006 40   inc eax
感兴趣的想想为什么。。。

[[it] 本帖最后由 cnhanxiao 于 2008-11-3 15:34 编辑 [/it]]
收到的鲜花
  • zklhp2008-11-03 20:28 送鲜花  50朵   附言:好文章
  • zklhp2008-11-03 20:29 送鲜花  50朵   附言:好文章

还有绑架成版主的?拒绝做版主——对不起啊!
2008-11-03 15:29
djxh77710
Rank: 2
来 自:中国
等 级:论坛游民
帖 子:71
专家分:88
注 册:2008-10-20
得分:0 
[bo][un]cnhanxiao[/un] 在 2008-11-3 15:29 的发言:[/bo]

怕三天后忘记这个考题了,干脆现在就告诉答案:

第一题
  and bl,0DFh   ;强制将小写字母转换为大写,而对大写字母不影响
  cmp bl,'A'
  jb _Err
  cmp bl,'Z'
  jg _Err

第二题
其实就是花指令
  jz ...

版主大哥,我今天刚看王爽的书上讲AND 和OR指令时,看到他讲的一个例子,和你的第一题差不多,把小写都转化成大写,但是他说的是二进制的第五位为零则是大写,为一则是小写,而你这里,0DFh 我刚用计算器转了一下是第六位为零,第五位为一,按照王爽那书上讲的应该是and bl 0EFH 而你这里这个0DFH是怎么算来的..谢谢..我这里没弄清楚.麻烦指教一下呀.

No Pains ,No Gains....
2008-11-03 20:56
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
[bo][un]djxh77710[/un] 在 2008-11-3 20:56 的发言:[/bo]


版主大哥,我今天刚看王爽的书上讲AND 和OR指令时,看到他讲的一个例子,和你的第一题差不多,把小写都转化成大写,但是他说的是二进制的第五位为零则是大写,为一则是小写,而你这里,0DFh 我刚用计算器转了一下是第六位为 ...


你看看ascii表……
2008-11-03 21:07
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
得分:0 
LZ,我对第一题的答案有些不解,希望给讲一讲:

 and bl,0DFh   ;强制将小写字母转换为大写,而对大写字母不影响
  cmp bl,'A'
  jb _Err
  cmp bl,'Z'
  jg _Err
============================
对于上面这段代码,假如,在前面安排这样的指令:
mov  bl,41h  或者 mov  bl,61h
最后得到的结果都是41h,那怎么知道之前输入的是41h,还是61h呢?
我觉得,仅加一条指令,还是判断不出一个数值是不是小写的.当然,判断出它是不是字母,那是肯定的.
2008-11-03 21:14
cnhanxiao
Rank: 2
等 级:新手上路
威 望:4
帖 子:124
专家分:0
注 册:2008-10-17
得分:0 
回复 6# 的帖子
我表达有点问题,其实就是判断输入是不是一个字母,而不管是不是大小写:)

还有绑架成版主的?拒绝做版主——对不起啊!
2008-11-03 21:30
cnhanxiao
Rank: 2
等 级:新手上路
威 望:4
帖 子:124
专家分:0
注 册:2008-10-17
得分:0 
回复 4# 的帖子
5楼已经回复你了,你查查ASCII码表就明白了。
还可以强制转换为小写ASCII码,当然,后面的比较指令就要换成小写字母的区间了。

a=61h=0110 0001b
A=41h=0100 0001b

     0110 0001b   (a)
and  1101 1111b   (0DFh)
=    0100 0001b   (A)

[[it] 本帖最后由 cnhanxiao 于 2008-11-3 21:38 编辑 [/it]]
收到的鲜花
  • zklhp2008-11-03 21:44 送鲜花  50朵   附言:好文章

还有绑架成版主的?拒绝做版主——对不起啊!
2008-11-03 21:32
ONEPROBLEM
Rank: 6Rank: 6
来 自:广西 南宁
等 级:贵宾
威 望:21
帖 子:1569
专家分:349
注 册:2008-7-11
得分:0 
[bo][un]cnhanxiao[/un] 在 2008-11-3 21:30 的发言:[/bo]

我表达有点问题,其实就是判断输入是不是一个字母,而不管是不是大小写:)

谢谢!
2008-11-03 21:38
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
得分:0 
这样的活动最好常搞……
2008-11-03 21:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-242136-1-1.html




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

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