C基础_ HEX、DEC、OCT和BIN的解释

  1. HEX,Hexadecimal ,十六进制。
  2. DEC,Decimal ,十进制。
  3. OCT,Octal ,八进制。
  4. BIN,Binary ,二进制。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这个错误是因为在使用 `BIN_NUM[CX]` 这样的方式访问 `BIN_NUM` 数组元素时,需要使用方括号内的偏移量的形式,比如 `[SI+BX]`。另外,还需要在十六进制数字面量前加上 `0` 前缀,以表示这是一个十六进制数。修改后的代码如下: ```assembly .MODEL SMALL .STACK 100h .DATA HEX_NUM DB 5 ; 存储输入的十六进制DEC_NUM DW ? ; 存储转换后的十进制BIN_NUM DB 17 DUP(0) ; 存储转换后的二进制OCT_NUM DB 7 DUP(0) ; 存储转换后的八进制数 .CODE MAIN PROC MOV AX, @DATA ; 初始化数据段寄存器 MOV DS, AX ; 读取输入的十六进制数 LEA DX, HEX_NUM MOV AH, 0Ah INT 21h ; 将十六进制数转换为十进制数 MOV AX, 0 MOV CX, 4 MOV SI, 0 HEX_TO_DEC_LOOP: MOV BL, HEX_NUM[SI] CMP BL, '0' JB HEX_TO_DEC_ERROR CMP BL, '9' JA HEX_TO_DEC_LETTER SUB BL, '0' JMP HEX_TO_DEC_CONTINUE HEX_TO_DEC_LETTER: CMP BL, 'A' JB HEX_TO_DEC_ERROR CMP BL, 'F' JA HEX_TO_DEC_ERROR SUB BL, 'A' ADD BL, 10 HEX_TO_DEC_CONTINUE: MOV DL, BL MOV AH, 0 MUL CX ADD AX, DX INC SI LOOP HEX_TO_DEC_LOOP JMP HEX_TO_DEC_DONE HEX_TO_DEC_ERROR: MOV AX, -1 HEX_TO_DEC_DONE: MOV DEC_NUM, AX ; 将十进制数转换为二进制数 MOV BL, 8 MOV SI, 0 DEC_TO_BIN_LOOP: MOV DL, 0 MOV AH, 0 DIV BL ADD DL, '0' MOV BIN_NUM[SI], DL INC SI CMP AX, 0 JNZ DEC_TO_BIN_LOOP ; 将二进制数翻转 MOV CX, SI MOV SI, 0 DEC CX BIN_REVERSE_LOOP: CMP SI, CX JGE BIN_REVERSE_DONE MOV AL, BIN_NUM[SI] MOV DL, BIN_NUM[CX] MOV BIN_NUM[SI], DL MOV BIN_NUM[CX], AL INC SI DEC CX JMP BIN_REVERSE_LOOP BIN_REVERSE_DONE: ; 将十进制数转换为八进制数 MOV BL, 8 MOV SI, 0 DEC_TO_OCT_LOOP: MOV DL, 0 MOV AH, 0 DIV BL ADD DL, '0' MOV OCT_NUM[SI], DL INC SI CMP AX, 0 JNZ DEC_TO_OCT_LOOP ; 将八进制数翻转 MOV CX, SI MOV SI, 0 DEC CX OCT_REVERSE_LOOP: CMP SI, CX JGE OCT_REVERSE_DONE MOV AL, OCT_NUM[SI] MOV DL, OCT_NUM[CX] MOV OCT_NUM[SI], DL MOV OCT_NUM[CX], AL INC SI DEC CX JMP OCT_REVERSE_LOOP OCT_REVERSE_DONE: ; 输出转换后的结果 LEA DX, BIN_NUM MOV AH, 09h INT 21h LEA DX, OCT_NUM MOV AH, 09h INT 21h MOV AH, 4Ch INT 21h MAIN ENDP END MAIN ``` 请注意,这段代码仅在 DOS 环境下运行,如果你使用的是 Windows 系统,需要使用 DOSBox 等模拟器来运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值