在汇编语言中,将字符串进行运算,包含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