怎么用汇编语言将数字组成的字符串转换成数值

编写的是汇编语言子程序。具体地说我是要将定义的字节型变量(比如:YDB80,81DUP(0))在利用DOS10号子功能输入后,将字符串形式的数字,转换成相应的数值,存储到... 编写的是汇编语言 子程序。
具体地说我是要将定义的字节型变量(比如:Y DB 80,81 DUP(0))在利用DOS 10号子功能输入后,将字符串形式的数字,转换成相应的数值,存储到一个寄存器中。
谢谢各位啦!!
其实我想要的就是个汇编 子程序。基本格式:
子程序名 PROC 类型
指令序列
子程序名 ENDP
不要想的过于复杂。简单的说也就是一位一位按照所在的位置乘以相应的位置(如十位就X10,百位就X100),最后将各位全加起来。
展开
 我来答
谢生谢后人4081
推荐于2017-09-16
知道答主
回答量:1
采纳率:0%
帮助的人:0
展开全部
datacate PROC NEAR
PUSH CX (CX中保存的是实际有效字符数)
DEC CX
LEA SI,buf+2 (将SI指向字符串的首地址)
d1: INC SI
LOOP d1 (利用LOOP循环将到寄存器SI指向字符串的尾部,应该是倒数第二个字符)
POP CX

MOV DL,30h;
MOV BL,10
MOV AX,1

d2: PUSH AX (将AX压栈,保护AX中的值)
SUB BYTE PTR [SI],DL (由于字符是ASCII码表示的,因此减去30H后即可转换为十六进制数)
MUL BYTE PTR [SI]
ADD w,AX (year是前面定义的用来保存数值的字型量。即w DW 0)
POP AX (上一步将数值保存到w中,这步AX出栈,恢复AX的值)
MUL BL (使AX中的值,以10为倍数增大)
DEC SI (循环SI每次减一指向前一个字符)
LOOP d2
RET
datacate ENDP
jscoolice_cn
2010-06-05 · TA获得超过236个赞
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:94.9万
展开全部
楼上想得太简单了。假设现在数据段有如下定义:
NUM DB '1234'
RESULT DW ? '最多放65535无符号数
那么经转换后,Result单元开始的字里就应该得到一个数为1234(一千二百三十四)。由于汇编语言的运算中,乘除运算很弱,所以要想办法乘以10、100、1000甚至更多。
以上面这个假设为例,仅限5位数(NUM定义的字符串长度<5 ),可得出如下源程序的主体部分:

MOV CL,5 '字符串长度
MOV DI,OFFSET NUM
LP: MOV AL,10
MOV DL,[DI] '取得ASCII码
DEC DL,30H '得到数值
CMP DL,9
JA ERR '大于9则为非数字
ADD BL,DL
MUL BL
MOV BX,AX '结果暂存
INC DI '指向下一字符串
LOOP LP
……
err: ……
程序中,第一行5是字符串长度,可根据实际情况更改为4、3甚至2;对于取得的字符,简单比较了下其大于9的情况,没有比较其小于0的情况,可适当修改。
愿你能看懂,并作修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
anan640925
推荐于2017-09-30 · TA获得超过5421个赞
知道大有可为答主
回答量:4868
采纳率:51%
帮助的人:1094万
展开全部
假定这些字串是正整数;
先把寄存器清零,比如 Mov ax,0
先取那个字串的最高位字符,然后转成相应的数字, 比如“0”的ASCII码是48,把这个串减去48就是所代表的数字
然后把这个数加到寄存器中

如果还有字串要加入的话,
就把寄存器乘10,加入新的字符

直到最后出了这个字串的数值。
其他格式的类似,比如小数位,比如负数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lixiang1369631
2010-06-05 · 超过38用户采纳过TA的回答
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:115万
展开全部
汇编语言么?你可以用CHAR()这种前面加个你想转换的符号来强制转换数值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式