在汇编语言中,将字符串进行运算,包含16进制
需要注意的是首先要将读取的ASCII码进行转换,使其能够成为进行运算的有效数字,在对于16进制的时候还需要检查其是否为字母
我们这里假设的是一空白(null)作为终止符
具体代码如下
SUB R1, R1, #1
MOV R0, #0
MOV R2, #0 //目前的
MOV R3, #0 //上一个操作字符
MOV R4, #0 //目前操作字符
READNEXTDEC:
ADD R1, R1, #1
LDRB R2, [R1]
CMP R2, #120 //寻找16进制
BEQ READNEXTHEX
CMP R2, #0
BEQ APPLYOPERATOR
CMP R2, #42 //进行乘法运算
BEQ APPLYOPERATOR
CMP R2, #43 //进行加法运算
BEQ APPLYOPERATOR
CMP R2, #45 //进行减法运算
BEQ APPLYOPERATOR
SUB R2, #48
MOV R10, #10
MUL R4, R4, R10
ADD R4, R4, R2
B READNEXTDEC
READNEXTHEX:
ADD R1, R1, #1
LDRB R2, [R1]
CMP R2, #120
BEQ READNEXTHEX
CMP R2, #0
BEQ APPLYOPERATOR
CMP R2, #42 //进行乘法运算
BEQ APPLYOPERATOR
CMP R2, #43 //进行加法运算
BEQ APPLYOPERATOR
CMP R2, #45 //进行乘法运算
BEQ APPLYOPERATOR
CMP R2, #120 //遇见X进入16进制程序
BEQ READNEXTHEX
CMP R2, #65 //如果是字母
BGE READTHISHEX
SUB R2, #48 //ASCII码进行实际数字的转换
MOV R10, #10
MUL R4, R4, R10
ADD R4, R4, R2
B READNEXTDEC
READTHISHEX:
SUB R2, #55
MOV R10, #10
MUL R4, R4, R10
ADD R4, R4, R2
B READNEXTHEX
APPLYOPERATOR:
CMP R3, #0
BEQ ADD //遇见终止符
CMP R3, #4
BEQ ADD
CMP R3, #5
BEQ SUB
CMP R3, #6
BEQ MUL
ADD:
ADD R0, R0, R4
B STORENEXTOPERATOR
SUB:
SUB R0, R0, R4
B STORENEXTOPERATOR
MUL:
MUL R0, R0, R4
B STORENEXTOPERATOR
STORENEXTOPERATOR:
MOV R4, #0
CMP R2, #0 //遇见终止符
BEQ End_Main
CMP R2, #43 //进行加法运算
BEQ SETADD
CMP R2, #45 //进行剑法运算
BEQ SETSUB
CMP R2, #42 //进行乘法运算
BEQ SETMUL
CMP R2, #120 //在遇见‘x’的时候,表示进行16进制操作
BEQ READNEXTHEX
SETADD:
MOV R3, #4
B READNEXTDEC
SETSUB:
MOV R3, #5
B READNEXTDEC
SETMUL:
MOV R3, #6
B READNEXTDEC