| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 462 人关注过本帖
标题:ADD AH,'A'-'0'-10 为啥是65-48-10?不是应该41-30-10吗?
只看楼主 加入收藏
aaazzzzz
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2011-1-5
结帖率:75%
收藏
已结贴  问题点数:10 回复次数:3 
ADD AH,'A'-'0'-10 为啥是65-48-10?不是应该41-30-10吗?
如题,没明白,只能求教大家了
2011-03-02 13:24
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:5 
1. 有这样的指令集?//可能RISC有吧
ADD AH,'A'-'0'-10
->
ADD AH,'A'
SUB AH,'0'
SUB AH,10

2. 看看关于常用进制转换方面的书

'A' 字符A的ASCII码  0x41(16进制)=4*16+1=65(10进制)
'0' 字符0的ASCII码  0x30(16进制)=3*16+0=48(10进制)
10  如果是0x10(16进制)=16,如果是0x0A(16进制)=10(10进制)

计算的时候按同种单位来算,不要混算
'A'-'0'-10 按照10进制来计算:65-48-10=7
'A'-'0'-10 按照16进制来计算:0x41-0x30-0x0A=0x07=7

3. 根据你的计算可以猜测
你是为了按16进制的方式显示数字
'0'~'9'的ASCII码为0x30~0x39
'A'~'F'的ASCII码为0x41~0x46
0~9很简单,直接加0x30就行了
而10以上,直接加的话
10+0x30=0x0A+0x30=0x3A是显示不了'A'的
那么根据ASCII表的布局,再多加7
0x3A+7=0x41,是'A'的ASCII,B~F以此类推.

技术问题,请不要以短消息方式提问
2011-03-02 14:31
ansic
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:恍惚窈冥
等 级:城市猎人
帖 子:1543
专家分:5367
注 册:2011-2-15
收藏
得分:5 
这是汇编里数值表达式,这里使用的是算数运算符。
add ah,'A'-'0'-10 ;意即将'A'-'0'-10的结果加到AH中。

类似的还有关系运算,比如:
mov ax,1234h gt 1024h ;意即将1234h赋值给ax
逻辑运算,比如:
mov ax,1 shl 3        ;意即将8赋值给ax

善人者,不善人之师;不善人者,善人之资。不贵其师,不爱其资,虽智大迷。
2011-03-02 16:23
zaixuexi
Rank: 12Rank: 12Rank: 12
来 自:上海
等 级:火箭侠
威 望:8
帖 子:858
专家分:3233
注 册:2010-12-1
收藏
得分:0 
回复 3楼 ansic
哦,编译期已经确定了的常数

技术问题,请不要以短消息方式提问
2011-03-02 16:28
快速回复:ADD AH,'A'-'0'-10 为啥是65-48-10?不是应该41-30-10吗?
数据加载中...
 
   



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

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