乘除法的时候可以不考虑进制的,比如说 #0FFH这个十六进制数 存放于A中,#100这个十进制数放于B中 然后DIV AB 这时 A等于#02H B等于#37H等于55在然后 假设A中的数为 FFHBINBCD:MOV B, #100 (B=100,十进制100,)DIV AB (A等于#02H,B等于#37H等于55)MOV R3, A (A=02H)MOV A, #10 (A=10=0AH,B=55=37H)XCH A,B (A=55=37H, B=10=0AH)DIV AB (A=05H=5 , B=5=05H)SWAP A (A=50H,B=05H)ADD A,B (A=55H,这时十位各位的BCD吗已经求出来了,将 37H=55转换为55HEND1 请问这个程序求解的思路是什么?思路就是对一个数求模和求于来分离百位十位和个位例如168168/100=1余6868/10=6余88/1=8余0这样就分离了百位十位和个位2 该程序的第二句"DIV AB"的解释是十六进制数除以100,可是A中应该存放的是一个八位的二进制数,这是怎么回事?这个是你没理解cpu存数据的方式,A中存放的其实归根结底说是二进制数,机器只认识二进制数,对这段程序编译之后我们输入的十进制100也变成二进制数了,我们通常说十六进制数是因为十六进制数和二进制数有位上的对应关系,比如1100 0110B=C6H 也就是说二进制数每4位一段各自写成十六进制数就把二进制转换成十六进制了,3 最后为什么要十位数与个位数相加,不是要分离十位数与个位数吗?我想如果你清楚BCD码的含义你就明白了BCD码就是用十六进制数来表示十进制的数例如:45H是等于十进制的69的,但如果你说他是BCD码他就代表十进制数45 这样你就会发现不是每个十六进制数都是BCD码的,例如AAH就不是BCD码,因为没有AA这样的十进制数我最后总结一下,就是我们所说的十进制数也好十六进制数也好,归根到底机器都是要把他变为二进制数的,机器也只认识二进制数,这样你就好理解了,我们不会处理不同进制数之间的运算,运算时必须要把他转换同进制的数,机器也是这样,只不过我们擅长的是十进制的运算,而机器擅长的是二进制运算,二进制数位数多不方便我们就找了一个帮手十六进制数希望你能看得懂
温馨提示:答案为网友推荐,仅供参考