⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xiazai.txt

📁 关于汇编语言一些进制的转换方法
💻 TXT
字号:
.2.2  十六进制数的ASCII码与二进制数之间的转换          
    转换步骤:
    将十六进制数的ASCII码转换为二进制数,要分两种情况: 
    1.数字:0--9 的ASCII码,这时只需将把它减去30H,即取其的低四位。 
    2.字母:A--F 的ASCII码,此时可先从ASCII中减去7,然后再去掉高四位即可(即减去30H)。可用如下指令(设ASCII码在AL中): 
    SUB AL,30H  
 或:AND AL,0FH  
    由此可见,首先应该判断被转换的数属于数字段,还是字母段,然后再作相应的处理。

    转换举例:
    将十六进制数3A8DH转换成十六位二进制数。3A8DH的ASCII码为:0011 0011、 0100 0001、 0011 1000、0100 0100。 
    将数字的ASCII码 0011 0011和 0011 1000减去30H得0000 0011 和 0000 1000;再将字母的ASCII码 0100 0001和 0100 0100先减去7,得 0011 1010 和0011 1101,再将其减去30H,最后再按其在数中的位置拼成十六位二进制数为:0011 1010 1000 1101。

    例:试编出将用ASCII码表示的四位十六进制数3A5DH,转换成十六位二进制数。 

    分析:将第一个十六进制数的ASCII码与 0FH 相与取其低四位,并将它存放到AX中,然后将AX左移四位,再将第二个数的低四位与AX相加。如此反复,直到完成。
 源程序:
DATA    SEGMENT 
HEX     DB '3','A','5','D' 
BIN     DW ? 
DATA    ENDS 
CODE    SEGMENT 
        ASSUME CS:CODE,DS:DATA 
HEXBIN: MOV AX,DATA 
        MOV DS,AX 
        LEA SI,HEX 
        MOV AX,0 
        MOV CH,4 
CONV:   MOV BL,[SI] 
        CMP BL,'9' 
        JBE BIN1 
        SUB BL,07H 
        CLC 
BIN1:   AND BL,0FH 
        MOV CL,4 
        SAL AX,CL 
        OR AL,BL 
        INC SI 
        DEC CH 
        JNE CONV 
        MOV BIN,AX 
        MOV AH,4CH 
        INT 21H 
CODE    ENDS 
        END HEXBIN  

6.2.3  十进制数的BCD码与ASCII码之间的转换                
   转换步骤:
   将十进制数的BCD码转换为ASCII 码,分为两种情况: 
   1.对于未组合的BCD码,只要加上 30H即可。可用如下指令(设BCD码放在AL中):               ADD AL,30H         或 OR AL,30H 
   2.对于组合的BCD码,取其低四位 加上30H,存放在低字节,将原数右移 四位,加上30H存放在高字节。  
    例如:将以BCD码表示的十制数56(0101 0110)转换成ASCII码,过程如下: 
   先取其低四位 0000 0110,加上30H,存入低字节,再将 0101 0110右移四位得0000 0101 ,加上30H,存入高字节。 

    例:在CRT显示器上连续 显示00--59的程序。

    分析:根据本题要求只要连续产生00--59的BCD码, 然后再将其转换成ASCII 码,输出显示即可。
 源程序:

DATA    SEGMENT 
BUFFER  DB 20H,3 DUP (?) 
DATA    ENDS 
CODE    SEGMENT 
        ASSUME CS:CODE,DS:DATA 
DISPLAY PROC FAR 
        PUSH DS 
        MOV AX,0 
        PUSH AX 
        MOV AX,DATA 
        MOV DS,AX 
        MOV BL,-1 
        PUSH BX 
GO:     MOV SI,OFFSET BUFFER+1 
        POP BX 
        MOV AL,BL 
        ADD AL,1 
        DAA 
        CMP AL,60H 
        JC DONE         
        MOV AL,0 
DONE:   MOV BL,AL 
        PUSH BX 
        MOV DL,AL 
        MOV CL,4 
        SHR AL,CL 
        OR AL,30H 
        MOV [SI],AL 
        INC SI 
        MOV AL,DL 
        AND AL,0FH 
        ADD AL,30H 
        MOV [SI],AL 
        INC SI 
        MOV AL,'$' 
        MOV [SI],AL 
        MOV Dx,OFFSET BUFFER 
        MOV AH,09H 
        INT 21H 
        MOV CX,0FFFFH 
LOP:    DEC CX 
        JNE LOP 
        MOV AH,0 
        INT 16H 
        CMP AL,' ' 
        JNZ GO 
        POP BX 
        RET 
DISPLAY ENDP 
CODE    ENDS 
        END DISPLAY

 

6.2.4  二进制数转换为十进制数的ASCII码                   
    转换步骤:
    十六位无符号二进制数可表示为十进制数 0-65535。由此可见,它的最大权值为10000,依次是1000、100、10、1。从而可得到具体的转换方法:从被转换的二进制数中逐次减去各位权值,并记录各位权值所减次数,这样就得到相应位的十进制数字了。如:能够从一个二进制数中减去5次10000, 那么转换后的十进制数的万位数就是5;同 理,从余下的二进制数中再减去1000的 次数,便是十进制数的千位数;依次类推,即可求得各位系数了。 

   转换举例:
   将一个二进制数          0110 1010 0111 1101转换为十进制数,操作如下: 将其减去10000(即减去0010 0111 0001 0000B),在减第三次时不够减,所以,万位为2;再用余数减去1000(11 1110 1000B), 够减7次。如此循环,最后得十进制数 为27261。

    例:试编出将二进制数转换成用ASCII码表示的十进制数的程序。

    分析:
    可利用上述方法进行转换,然后再将各位十进制数字加上30H,即可得到 用ASCII码表 示的十进制数。

  

6.2.5  十六位二进制数转换为BCD码表示的十进制数            
    转换步骤(二进制数转换为十进制数方法二):
    1.先把十六位二进制数转换为五位十进制数,进行如下操作:用除法指令,对二进制数除以10,余数就是十进制数的个位。然后把商作为被除数,再除以10,余数为十进制数的十位。如此反复,直到余数为零。用这种方法首先得到的是十进制数的个位(低字节),最后得到的是万位(高字节)。 
   2.然后再把它们组成组合的BCD码。      转换举例:
    例如:将二进制数 0110 1010 1101 0011 转换成为十进制数,可先将二进制数放到AX中,DX清0, BL中放除数10,用指令  DIV BL 后,个位数放在DX中(也就是AX除以10的余数),然后将DX清0,再用  DIV BL指令,得到的余数就是十进制数的十位。如此反复,直到余数为0。
   然后再把它们的高位在前,低位在后组成组合的BCD码。  

6.2.6  ASCII码表示的十进制数转换成二进制数                
    转换步骤:
    将用ASCII码表示的十进制数转换成为二进制数的过程如下: 
    首先将它转换成BCD码,然后再转换成二进制数。而将BCD码表示的十进制数转换成二进制数的方法可用下式说明: 
    458=((0*10+4)*10+5)*10+8 
    由此可知,先将累加和赋初值为0,然后每次将累加和乘10再加下一位数字,逐位完成,直到个位。由于计算机中的BCD码和10均是以二进制表示的,所以其结果必定为二进制数。 

    例:编制一子程序,将存在某一存区中用ASCII码表示的十进制数转换成为二进制数,其调用方式如下: 
  SI〈--被转换数存区首址
  CX〈--被转换数位数
  CALL ADECXB
  返回 (二进制数在AX中)
         源程序:

ADECXB  PROC NEAR ;十进制数转换成二进制数                      ; 子程序 
        PUSH BX   ;保护现场 
        PUSH CX 
        PUSH DX 
        PUSH SI 
        MOV BH,0 
        XOR AX,AX  ;清累加和寄存器 
AGAIN:  ADD AX,AX  ;AX<--AX*10 
        MOV DX,AX  
        ADD AX,AX  
        ADD AX,AX  
        ADD AX,DX  
        MOV BL,[SI] ;取第i位十进制数ASCII码 
        AND BL,0FH  ;取BCD码 
        ADD AX,BX  
        INC SI      ;修改地址指针 
        LOOP AGAIN 
        POP SI      ;恢复现场 
        POP DX 
        POP CX 
        POP BX 
        RET 
ADECXB  ENDP 
 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -