我的目标是显示用户在十六进制中输入的2个数字的解。截至目前,我的代码从用户获得2个数字,然后以十进制形式返回解决方案。我认为我应该做的只是得到我的十进制解决方案,并在数字加在一起后将其转换为十六进制。如果有其他合理的方式请告诉我。谢谢你。
org $8000
START movea.l #MSG1, A1
move.b #13,D0
trap #15
clr.w D2
JSR Loop
move.w d2, d4
movea.l #msg2, a1
move.b #13,D0
trap #15
clr.w d2
jsr loop
movea.l #msg3, A1
move.b #13,D0
trap #15
add.w d4, d2
JSR DISP
MOVE.B #9,D0
TRAP #15
LOOP move.b #5,D0
trap #15
cmp.b #$0D, D1
BEQ BREAK
and.b #$0F, d1
mulu #10, d2
add.w d1, d2
jmp loop
Break rts
DISP clr.b d3
DISDIV divu #10, D2
move.b #16, d5
ror.l d5, d2
or.b #$30, d2
move.b d2, -(A7)
addq #1, d3
clr.w d2
ror.l d5, d2
bne DISDIV
DISDIG move.b (a7)+, D1
move.b #6,D0
trap #15 ; char out
subq.b #1, D3
bne DISDIG
rts
org $8100
MSG1 DC.B 'Please enter a two digit number ', 0
MSG2 DC.B 'Please enter another two digit number ', 0
MSG3 DC.B 'The sum of the two 2 digit numbers you entered is ', 0
end start
我正在使用EASY68k汇编程序。
答案 0 :(得分:3)
您需要更改输入和输出代码。
输入代码将字符与$0f
进行AND运算,当字符为0-9时有效,但字符为a-f时无效。你需要测试角色并对a-f情况采用不同的方法。然后,您需要将先前结果乘以16而不是10。
输出上存在相反的问题。将divu
从10更改为16会让您到达中途,但在您添加30美元以转换为ASCII 0
- 9
时,您需要测试该值并添加$ 41,如果它是在10到15之间。
答案 1 :(得分:1)
只需更改
DISDIV divu #10, D2
到
DISDIV divu #16, D2