汇编语言十六进制转换成ASCII

DATAS SEGMENT
;此处输入数据段代码
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码

MOV BX, 8421A5H ;给定一个6位的16进制数
MOV AH, 2 ;向标准输出设备输出一个字符
MOV CX, 24 ;循环24次
again:
MOV DL, '0' ;
ADD BX, BX ;
JNC DISP ;
INC DL ;
DISP:
INT 21H
LOOP again

mov ah, 4ch ;程序结束
int 21h

MOV AH,4CH
INT 21H
CODES ENDS
END STAR

这里那里写错了怎么显示的不对。另外帮我解释一下again循环里那四句话什么意思。加分!

       CODES  SEGMENT
              ASSUME    CS:CODES
      START:
              PUSH      CS
              POP       DS
    ;此处输入代码段代码
              MOV       BX, 8421H   ;给定一个4位的16进制数
              MOV       AH, 2       ;向标准输出设备输出一个字符
              MOV       CX, 16      ;循环16次
      AGAIN:
              MOV       DL, '0'     ;  假定当前bx的最高位为0
              ADD       BX, BX      ;  bx=bx*2 也就是左移1位
              JNC       DISP        ;  进位标志不置位时(即bx的最高位为0时)转disp
              INC       DL          ;  进位标志置位时(即bx的最高位为1时)加1
                                    ;  也就是变为 '1'  
       DISP:
              INT       21H
              LOOP      AGAIN
    
              MOV       AH, 4CH     ;程序结束
              INT       21H
       CODES  ENDS
              END       START

追问

我那个是8421A5H 应该怎么改 我这么写的

但是输出结果就显示后四位然后都是0 84没显示怎么回事

楼上那个朋友说BUF 子单元的的 每个字节的 16 进制数 加上 30h

在哪里加

追答

BX寄存器只能处理4位16进制数,你确要让它处理6位16进制数!肯定不行。

追问

那用什么寄存器能处理6位的

追答       CODES  SEGMENT
              ASSUME    CS:CODES
              ORG       100H
      START:  PUSH      CS
              POP       DS
              MOV       SI,WORD PTR X
              MOV       DI,WORD PTR X+2
              MOV       AH, 2
              MOV       CX, 32
      AGAIN:
              MOV       BL,3
              AND       BL,CL
              CMP       BL,0
              JNE       @1
              MOV       DL,32
              INT       21H
                    
         @1:  MOV       DL, '0'
              SHL       SI,1
              RCL       DI,1
              JNC       DISP
              INC       DL
       DISP:  INT       21H
              LOOP      AGAIN
              MOV       AH, 4CH
              INT       21H
           X  DD        8421ABH
       CODES  ENDS
              END       START

追问

我用我写的那种方法行吗 在我的那个基础上改

追答

以上程序就是在你那个基础上改的,能支持32位的二进制数,当然也支持你的24位的二进制(即6位的16进制数)。
用单个的16位的寄存器无法完成,所以需要si、di两个寄存器联合实现。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2022-04-06

十六进制转换成 ASCII 汇编语言子程序,如下:

   ADD AL,90H

   DAA

   ADC AL,40H

   DAA

   RET

END

下面是把十六进制转换成ASCII,显示10个两位十六进制数的完整程序。

相似回答