Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 将字符串转换为int程序集_Assembly_68hc12 - Fatal编程技术网

Assembly 将字符串转换为int程序集

Assembly 将字符串转换为int程序集,assembly,68hc12,Assembly,68hc12,我已经试着写代码好几个小时了。我的算法是逐字符读取字符串,减去#$30,意思是'0',并将其保存在地址中。保留另一个由0填充的随机地址。然后,直到字符串结束,乘以随机地址的10个内容,然后通过减去#$30,将用于转换int的地址内容相加。我真的很累,很难实现我的算法。顺便说一下,我不知道这是否可行,但我认为我不能使用默认的乘法器EMUL,因为它使用并写入Y和D寄存器 一些伪: num = num*10 + conv(next digit). var * 10: res = var res <

我已经试着写代码好几个小时了。我的算法是逐字符读取字符串,减去
#$30
,意思是
'0'
,并将其保存在地址中。保留另一个由0填充的随机地址。然后,直到字符串结束,乘以随机地址的10个内容,然后通过减去
#$30
,将用于转换int的地址内容相加。我真的很累,很难实现我的算法。顺便说一下,我不知道这是否可行,但我认为我不能使用默认的乘法器
EMUL
,因为它使用并写入Y和D寄存器

一些伪:

num = num*10 + conv(next digit).
var * 10:
res = var
res << 1 (shift left)
res << 1
res = res + var
res << 1

Now res equals var*10
num=num*10+conv(下一位数字)。
变量*10:
res=var

res一方面,您似乎将下一个数字
乘以10,而不是
num
。您必须将当前值乘以10,然后将下一个数字相加;e、 g.到目前为止计算的值=13,下一个字符='3':13+'3'=13*10+3=133
MYSTR   FCC   "1337"
Entry:

             LDX   #MYSTR
             CLRA
             STAA  $1900    ; random address
loop:
             LDAA  1, x+    ; pointer to string
             CMPA  #0       ; check end of string
             BEQ   halt     ; if end of string end the program
             BRA   atoi     ; num in accumulator A is converted to int
             ;BRA halt

atoi:
             STAA  $1300
             LDAB  $1300
             SUBB  #$30
             ;----- number - '0' converts to int
             JSR   mult 
             BRA   loop

mult:
             CLRB
             STAB  $1350
             MOVB  $1350, $1351 ; copy content of 1350(var) to 1351(res)
             ASL   $1351
             ASL   $1351
             LDAA  $1351
             ADDA  $1350   ; res += var;
             ASLA  ; res << 1

             RTS

halt:
            SWI