+ -
当前位置:首页 → 问答吧 → 二进制到十进制的转换

二进制到十进制的转换

时间:2010-11-21

来源:互联网

本人刚刚学汇编

哪位大虾能给我个源代码实现二进制到十进制的转换.....在此先谢过了啊

作者: fei2008jun   发布时间: 2010-11-21

给你写个流程,自己编程吧,好吗?

CX清零
把要显示的数送(DX,AX) (比如你的例子,1000101011给AX,DX取0)
循环1:
除以10(除数要用字单元)
余数dx(一定小于10)转化为字符(即加30H)后入栈,计数器CX加1
商AX为0吗?是则结束本循环
DX清零;为下一次循环做准备
无条件返回循环1

;至此,已将转化的十进制数,由低位向高位的顺序存入栈内

AH取2 ;为了输出字符
循环2:
DX出栈;DL中正好是由高位向低位取出的十进制数
INT 21H;显示之
LOOP 循环2;把存下的数字全部显示
引用shzhfu的帖子

链接http://topic.csdn.net/u/20101117/12/47481d31-236c-4fd7-8ea6-327087ee4d34.html

作者: znxllyuan   发布时间: 2010-11-22

引用楼主 fei2008jun 的回复:
本人刚刚学汇编

哪位大虾能给我个源代码实现二进制到十进制的转换.....在此先谢过了啊

我的练习,仅供参考:
http://www.asmedu.net/blog/user/postcontent.jsp?neighborId=32262&kindLevel=1&kindId=47796&postId=49321&readSg=1

作者: masmaster   发布时间: 2010-11-22

Assembly code
data segment 
    num     db 01Fh
data ends 
    
stack segment STACK 
    db 256 dup(0) 
    tos label word 
stack ends 
code segment 
    assume cs:code,ds:data 
begin:
        mov ax,0d
        mov ax,0dh
    mov ax,data 
    mov ds,ax 
    mov es,ax 
    
    mov ax,stack 
    mov ss,ax 
    mov sp,offset tos 
    
    xor ax,ax 
    mov al,num     
    xor cx,cx 
;下面是将cout中的数以十进制显示出来
DoDiv:
    mov bl,10  
    div bl     ;al←ax/10的商
                   ;ah←ax/10的余数
    push ax    ;保存结果
    inc cx 
    xor ah,ah  ;ah清零,清除余数
    cmp al,0   ;判断商是否为零
    jnz DoDiv 
    
DoPrt:
    pop dx      ;dx中保存的是每次除的结果
    xchg dh,dl 
    add dl,30h  ;dl中的数字是每次除后的商,将其表示成ascii
    mov ah,2 
    int 21h 
    loop DoPrt 
    
exit:
    mov ax,4c00h ;退出DOS
    int 21h 
code ends 
    end begin 

作者: Zimbu   发布时间: 2010-11-22