用汇编实现十六进制数向十进制数的转换

Dear 丶 2023-03-04 11:29 58阅读 0赞

用汇编实现十六进制数向十进制数的转换

一、实现功能

实现一位十六进制数向十进制数的转换。

二、设计分析

  1. 汇编语言中,字符在机器中都是以ascii码的二进制格式存储,但是汇编语言写的时候常用十六进制,因此需要好好看看ascii码的十六进制表。
  2. 特别是进制转换一定要注意,**机器中存储的是数的二进制数本身,而我们输入输出的是数的ascii码的值,因此注意对寄存器中数的加减操作**。
  1. 实现十六进制数向十进制数的转换,先输入一位16进制数,判断输入字符的ascii码在30H-39H(0-9)之间,还是在41H-46H(A-F)之间,或者是在61H-66H(a-f)之间。如果是第一种情况则SUB DL,30H,如果是第二种情况则SUB DL,37H,如果是第三种情况则SUB DL,57H。
  2. 接下来需要将DL中的二进制数转换为十进制数输出。这里我选择将DX除以10,商在AL中,用来表示十位数,余数在AH中,用来表示个位数,如果商是0,则不用输出;如果商是1,则ADD AH,30H,输出AH。余数ADD AL,30H,输出AL。即可得到16进制对应的十进制数。
  3. 注意输出的字符的值是不等于机器中存放的二进制的值,因此需要进行加减法)最后输出对应的16进制的ascii码的值。
  4. 十六进制数向十进制数的转换流程图:
    在这里插入图片描述

三、源代码

  1. DATA SEGMENT
  2. TIP DB 'INPUT THE NUMBER: ','$'
  3. TIP1 DB ' <=> ','$'
  4. DATA ENDS
  5. CODE SEGMENT
  6. ASSUME CS:CODE,DS:DATA
  7. START:
  8. MOV AX,DATA
  9. MOV DS,AX
  10. LEA DX,TIP
  11. MOV AH,09H
  12. INT 21H
  13. INPUT:
  14. MOV AH,1
  15. INT 21H
  16. CMP AL,30H
  17. JB EXIT
  18. CMP AL,39H
  19. JA COMPER1
  20. JMP CHANGE1 ;在0~9之间
  21. COMPER1:
  22. CMP AL,41H
  23. JB EXIT
  24. CMP AL,46H
  25. JA COMPER2
  26. JMP CHANGE2 ;在A-F之间
  27. COMPER2:
  28. CMP AL,61H
  29. JB EXIT
  30. CMP AL,66H
  31. JA EXIT
  32. JMP CHANGE3 ;在a~f之间
  33. CHANGE1:
  34. SUB AL,30H
  35. JMP ENT
  36. CHANGE2:
  37. SUB AL,37H
  38. JMP ENT
  39. CHANGE3:
  40. SUB AL,57H
  41. JMP ENT
  42. ENT:
  43. MOV BL,AL
  44. LEA DX,TIP1
  45. MOV AH,09H
  46. INT 21H
  47. MOV AL,BL
  48. MOV AH,0
  49. MOV BL,10
  50. DIV BL
  51. MOV DH,AH
  52. CMP AL,0
  53. JE ONE
  54. MOV DL,AL ;十位数是1
  55. ADD DL,30H
  56. MOV AH,02H
  57. INT 21H
  58. ONE: ;十位数是0
  59. MOV DL,DH
  60. ADD DL,30H
  61. MOV AH,02H
  62. INT 21H
  63. EXIT:
  64. MOV AH,4CH
  65. INT 21H
  66. CODE ENDS
  67. END START

发表评论

表情:
评论列表 (有 0 条评论,58人围观)

还没有评论,来说两句吧...

相关阅读