+ -
当前位置:首页 → 问答吧 → 二进制转换成十进制的汇编程序

二进制转换成十进制的汇编程序

时间:2007-01-06

来源:互联网

二进制转换成十进制的汇编程序

作者: PG870116   发布时间: 2007-01-06

汇编?

作者: cloudgamer   发布时间: 2007-01-07

;   BIN2DEC.ASM   -   Converts   a   16-bit   binary   value   into   four   decimal   digits.
; Input:     The   binary   value   in   the   pair   (R1,R0).
; Output:   Four   decimal   digits   in   R13   to   R10,   the   most   significant   in   R13.
; Algorithm:
; R13   =   0;   Increments   R13   while   (R1,R0)-1000   is   positive
; R12   =   0;   Increments   R12   while   (R1,R0)-100     is   positive
; R11   =   0;   Increments   R11   while   (R1,R0)-10       is   positive
; R10   =   R0;

0x0000: MODEL A ;   Processor   uP1232a

; For   example:   0x2694   =   9.876
LD R1,   0x26
LD R0,   0x94

DEC2BIN:
LD R13,   0
LD R12,   0
LD R11,   0
LD R10,   0

LD R3,   0x03
LD R2,   0xE8 ;   0x03E8   =   1.000
LOOP1: INC R13
SUB R0,   R2
SBC R1,   R3 ;   R1R0   -   1000
JP NC,   LOOP1
DEC R13
ADD R0,   R2
ADC R1,   R3

LD R3,   0
LD R2,   100
LOOP2: INC R12
SUB R0,   R2
SBC R1,   R3 ;   R1R0   -   100
JP NC,   LOOP2
DEC R12
ADD R0,   R2
ADC R1,   R3

LD R3,   0
LD R2,   10
LOOP3: INC R11
SUB R0,   R2
SBC R1,   R3 ;   R1R0   -   10
JP NC,   LOOP3
DEC R11
ADD R0,   R2
ADC R1,   R3

LD R10,   R0

#align ;   Aligns   code
HALT: BREAK ;   Break-point
GOTO HALT ;   Stop   processing   until   RESET

;   End   of   file

作者: dogfish   发布时间: 2007-01-09

8086汇编

btod2是一个过程。在调用过程前,要转化的二进制数先放在了BX寄存器中。disp2是一个显示十进制数的过程。

btod2 proc
push   ax
push   bx
push   cx
push   dx
mov   cx,10000
call   disp2
mov   cx,1000
call   disp2
mov   cx,100
call   disp2
mov   cx,10
call   disp2
mov   cx,1
call   disp2
pop   dx
pop   cx
pop   bx
pop   ax
ret
btod2 endp
disp2 proc ;显示一位数字的函数
mov   dl,0
again1: cmp   bx,cx
jb   ext1
inc   dl
sub   bx,cx
jmp   again1
ext1: add   dl,30h
cmp   dl, '0 '
mov   ah,02h
int   21h
ret
disp2 endp

作者: linandmin   发布时间: 2007-01-11

除十取余即可

作者: xkw365   发布时间: 2007-01-11

dogfish(dogfish),你的汇编是基于什么写的啊   ??

看了半天,也不象是ARM的   ,不象是C51的,更不是X86系列的~~~~~

赐教~~~~~~谢谢~!

作者: kinges   发布时间: 2007-01-11

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;      
;从键盘上输入一个十进制数据并转换为二进制的子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        P_GETNEW     PROC                                                                          
                            PUSH   BX                           ;出口参数:AX=补码表示的二进制数  
                            PUSH   CX                           ;说明:负数用“-”引导,数据范围是+32767~-32768  
                            PUSH   DX
                            XOR   BX,BX                       ;BX保存结果
                            XOR   CX,CX                       ;CX为正负标志,0为正,-1为负
                            MOV   AH,1                         ;输入一个字符
                            INT   21H
                            CMP   AL, '+ '                     ;是“+”,继续输入字符
                            JZ   READ1
                            CMP   AL, '- '                     ;是“—,设置-1标志
                            JNZ   READ2
                            MOV   CX,-1
                                                                                       
        READ1:         MOV   AH,1                         ;继续输入字符
                            INT   21H      
                           
        READ2:         CMP   AL, '0 '                     ;不是0~9之间的字符,则输入数据结束
                            JB   READ3
                            CMP   AL, '9 '
                            JA   READ3
                            SUB   AL,30H                     ;是0~9之间的字符,则转换为二进制数
                            ;利用移位指令,实现数值乘10:BX←BX*10
                            SHL   BX,1
                            MOV   DX,BX
                            SHL   BX,1  
                            SHL   BX,1
                            ADD   BX,DX  
                           
                            MOV   AH,0
                            ADD   BX,AX                       ;已输入数值乘10后,与新输入的数值相加
                            JMP   READ1                       ;继续输入字符    
                           
        READ3:         CMP   CX,0                         ;是负数,进行求补
                            JZ   READ4
                            NEG   BX        
                           
        READ4:         MOV   AX,BX                       ;设置出口参数
                            POP   DX
                            POP   CX
                            POP   BX
                            RET                                   ;子程序返回
        P_GETNEW     ENDP
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  
;二进制数据转换为十进制的输出子程序
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  P_OUTPUT           PROC                                                                      
                            PUSH   AX                   ;入口参数:共享变量WTEMP
                            PUSH   BX
                            PUSH   DX
                            MOV   AX,WTEMP         ;取出显示的数据
                            TEST   AX,AX             ;判断数据是零、正书还是负数
                            JNZ     WRITE1
                            MOV   DL, '0 '             ;是‘0’,显示‘0’后退出
                            MOV   AH,2
                            INT   21H
                            JMP   WRITE5            
   
        WRITE1:       JNS   WRITE2                   ;是负数,显示“-”
                            MOV   BX,AX                     ;AX数据暂存于BX
                            MOV   DL, '- '        
                            MOV   AH,2
                            INT   21H
                            MOV   AX,BX
                            NEG   AX                           ;数据求补(绝对值)
                           
        WRITE2:       MOV   BX,10
                            PUSH   BX                         ;10压入堆栈,做为推退出标志
                           
        WRITE3:       CMP   AX,0                       ;数据(商)为零,转向显示
                            JZ   WRITE4
                            SUB   DX,DX                     ;扩展被除数DX.AX
                            DIV   BX                           ;数据除以10
                            ADD   DL,30H                   ;余数(0~9)转换为ASCⅡ码
                            PUSH   DX                         ;数据各位先低位后高位压入堆栈
                            JMP   WRITE3  
                           
        WRITE4:       POP   DX                           ;数据各位先高位后低位弹出堆栈
                            CMP   DL,10                     ;是结束标志10,则退出
                            JE   WRITE5    
                           
                            MOV   AH,2                       ;进行显示
                            INT   21H
                            JMP   WRITE4  
                           
        WRITE5:       POP   DX
                            POP   BX
                            POP   AX  
                              MOV   DL,20H
                            MOV   AH,02H
                            INT   21H
                            RET                               ;子程序返回
      P_OUTPUT       ENDP

作者: gallanthunter   发布时间: 2007-01-17

那个是MIPS汇编。:)

作者: DelphiGuy   发布时间: 2007-01-18

o 想通了 学习学习

作者: CCenter   发布时间: 2008-11-19

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 

作者: killbug2004   发布时间: 2008-11-19

前面的那个没有看明白是什么意思。、。。。

作者: Ajampie   发布时间: 2008-11-19

我的程序是将num db 01Fh以十进制显示出来

作者: killbug2004   发布时间: 2008-11-19

学习一下

作者: SimonYeung   发布时间: 2008-11-21

学习学习,参考参考···

作者: liuyisj   发布时间: 2011-06-13