汇编语言程序设计之代码转换

目录

 

1.十六进制ACSII码转换为二进制显示

2.十进制ACSII码转换为二进制显示

3.BCD码转换为二进制显示

4.二进制数转换为十六进制数显示

5.二进制数转换为十进制数显示

(1)使用比较法

(2)使用除数取余法


1.十六进制ACSII码转换为二进制显示

    .586
DATA    SEGMENT    USE16
MESG    DB    ‘Please Enter!’,0DH,0AH,'$'    ;0D回车,0A换行
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUM    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    AH,9
        MOV    DX,OFFSET MESG
        INT    21H
        MOV    AH,01H                        ;等待键盘输入一个字符,AL=输入按键的ASCII码
        INT    21H
        CMP    AL,3AH
        JC     NEXT1
        SUB    AL,07H
NEXT1:  SUB    AL,30H
        MOV    BL,AL
        MOV    AH,02H
        MOV    DL,'='
        INT    21H
        CALL   DISP
        MOV    AH,2
        MOV    DL,'B'
        INT    21H
EXIT:   MOV    AH,4CH
        INT    21H

DISP    PROC
        MOV    CX,8
LAST:   MOV    DL,'0'
        RCL    BL,1            ;含进位的逻辑左移,移除的数进C标志,以此判断之前的是0还是1
        JNC    NEXT2
        MOV    DL,'1'
NEXT2:  MOV    AH,2
        INT    21H
        LOOP   LAST
        RET
DISP    ENDP
CODE    ENDS
        END    BEG

2.十进制ACSII码转换为二进制显示

        .586
DATA    SEGMENT    USE16
MESG    DB    ‘Please Enter!’,0DH,0AH,'$'    ;0D回车,0A换行
BUF     DB    '3','4','8','9'
COUNT   EQU    $-BUF
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUM    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    AH,9
        MOV    DX,OFFSET MESG
        INT    21H
        MOV    CX,COUNT
        MOV    SI,OFFSET BUF
        MOV    AX,0                          ;AX用于存放累加和,清0
        MOV    DH,0                          ;CLEAR DH
        MOV    BX,10
AGA:    MUL    BX
        MOV    DL,[SI]
        SUB    DL,20H
        ADD    AX,DX
        INC    SI
        LOOP   AGA
        MOV    BX,AX
        CALL   DISP
        MOV    AH,02H
        MOV    DL,'B'
        INT    21H
EXIT:   MOV    AH,4CH
        INT    21H

DISP    PROC
        MOV    CX,16
LAST:   MOV    DL,'0'
        RCL    BX,1            ;含进位的逻辑左移,移除的数进C标志,以此判断之前的是0还是1
        JNC    NEXT
        MOV    DX,'1'
NEXT:   MOV    AH,2
        INT    21H
        LOOP   LAST
        RET
DISP    ENDP
CODE    ENDS
        END    BEG

3.BCD码转换为二进制显示

    .586
CODE    SEGMENT    USE16
        ASSUM    CS:CODE
BEG:    MOV    BX,4567H
        MOV    CX,4
        MOV    AX,0
        MOV    SI,10
AGA:    MUL    SI
        ROL    BX,4
        MOV    DX,BX
        AND    DX,000FH
        AND    AX,DX
        LOOP   AGA
DISP:   MOV    BP,AX
        MOV    CX,16
LAST:   MOV    AL,'0'
        RCL    BP,1
        ADC    AL,0
        MOV    AH,0EH
        INT    10H
        LOOP   LAST
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

4.二进制数转换为十六进制数显示

    .586
DATA    SEGMENT    USE16
BUF    DW    987AH
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    DX,BUF
        MOV    CX,4
        SAL    EDX,16            ;EDX中的左移16次
AGA:    ROL    EDX,4
        AMD    DL,0FH
        CMP    DL,10
        JC     NEXT
        ADD    DL,07H
NEXT:   ADD    DL,30H
        MOV    AH,2
        INT    21H
        LOOP   AGA
        MOV    4CH
        INT    21H
CODE    ENDS
        END    BEG

5.二进制数转换为十进制数显示

(1)使用比较法

        .486
CMPDISP MACRO    NN
        LOCAL    LAST,NEXT
        MOV    DL,0
LAST:   CMP    BEN,NN
        JC     NEXT
        INC    DL
        SUB    BEN,NN
        JMP    LAST
NEXT:   ADD    DL,30H
        ENDM
DATA    SEGMENT    USE16
BEN    DW    1223H
TAB    DW    1000,100,10,1
COUNT  EQU   ($-TAB)/2
BUF    DB    COUNT DUP(?),'$'
DATA    ENDS
CODE    SEGMENT    USE16
        ASSUME    CS:CODE,DS:DATA
BEG:    MOV    AX,DATA
        MOV    DS,AX
        MOV    CX,COUNT
        MOV    BX,OFFSET TAB
        MOV    SI,OFFSET BUF
AGA:    MOV    AX,[BX]
        CMPDISP AX
        MOV    [SI],DL
        ADD    BX,2
        INC    SI
        LOOP   AGA
        MOV    SI,OFFSET BUF
NOSP:   CMP    BYTE PTR [SI],30H
        JNZ    DISP
        INC    SI
        JMP    NOSP
DISP:   MOV    AH,09H
        MOV    DX,SI
        INT    21H
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG    

(2)使用除数取余法

.586
CODE    SEGMENT    USE16
        ASSUME    CS:CODE
NUM32    DD    1234567890
BEG:    MOV    EAX,NUM32
        MOV    EBX,10
        MOV    CX,0
LAST:
        MOV    EDX,0
        DIV    EBX
        PUSH   DX
        INC    CX
        CMP    EAX,0
        JNZ    LAST
AGA:    POP    DX
        ADD    DL,30H
        MOV    AH,2
        INT    21H
        LOOP   AGA
        MOV    AH,4CH
        INT    21H
CODE    ENDS
        END    BEG

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方隐侠-千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值