汇编--二进制到多种进制的转换与输出

data segment
str0 db 'please input binary less than 16!',0dh,0ah,24h
str1 db 'Binary output',0dh,0ah,24h
str2 db 'Hexadecimal output',0dh,0ah,24h
str3 db 'Octal output',0dh,0ah,24h
str4 db 'Decimal unsigned number output',0dh,0ah,24h
str5 db 'The decimal symbol number output',0dh,0ah,24h
str6 db 'Thanks for your using!',0dh,0ah,24h
str7 db 0dh,0ah,24h
data ends

stacker segment stack
   dw 20 dup(?)
top label word
stacker ends
 
code segment
    assume cs:code,ds:data,ss:stacker
start proc near

    mov ax,stacker  
    mov ss,ax
    lea sp,top
    
    mov ax,data
    mov ds,ax

    lea dx,str0  
    mov ah,09h
    int 21h
    
    xor bx,bx  
    mov cx,16
L1: mov ah,01h
    int 21h
    cmp al,0dh
    je L2
    mov dl,30h
    cmp al,dl
    jb L1
    mov dl,31h
    cmp al,dl
    ja L1
    shr al,1
    rcl bx,1
    loop L1

L2: lea dx,str7  
    mov ah,09h
    int 21h
    lea dx,str1  
    mov ah,09h
    int 21h

    mov cx,16
L3: rol bx,1
    mov dl,30h
    adc dl,0
    mov ah,02h
    int 21h
    loop L3

    lea dx,str7  
    mov ah,09h
    int 21h
    lea dx,str2  
    mov ah,09h
    int 21h

    mov cx,4  
L4: push cx
    mov cl,4
    rol bx,cl
    mov al,bl
    and al,15
    cmp al,9
    jbe L5
    add al,7
L5: add al,30h
    mov dl,al
    mov ah,02h
    int 21h
    pop cx
    loop L4

    lea dx,str7  
    mov ah,09h
    int 21h
    lea dx,str3  
    mov ah,09h
    int 21h

    rol bx,1  
    mov al,30h
    adc al,0
    mov dl,al
    mov ah,02h
    int 21h

    mov cx,5
L6: push cx
    mov cl,3
    rol bx,cl
    mov al,bl
    and al,7
    add al,30h
    mov dl,al
    mov ah,02h
    int 21h
    pop cx
    loop L6

    lea dx,str7  
    mov ah,09h
    int 21h
    lea dx,str4  
    mov ah,09h
    int 21h

    mov ax,bx  
    mov si,10
    mov cx,0
L7: xor dx,dx
    div si
    push dx
    inc cx
    cmp ax,0
    ja L7
    
L8: pop dx
    add dl,30h
    mov ah,02h
    int 21h
    loop L8

    lea dx,str7  
    mov ah,09h
    int 21h
    lea dx,str5  
    mov ah,09h
    int 21h
 
    or bx,bx  
    jns L9
    mov dl,2dh
    mov ah,02h
    int 21h
    neg bx
L9: mov ax,bx
    mov si,10
    mov cx,0
L10:xor dx,dx
    div si
    push dx
    inc cx
    cmp ax,0
    ja L10
    
L11:pop dx
    add dl,30h
    mov ah,02h
    int 21h
    loop L11

    lea dx,str7  
    mov ah,09h
    int 21h
    lea dx,str6  
    mov ah,09h
    int 21h
    
    mov ah,4ch
    int 21h
start endp
code ends
    end start
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
以下是汇编语言实现二进制与十六转换的示例代码: ``` section .data bin db 10101010b ; 二进制数 hex db 0x2A ; 十六数 section .text global _start _start: ; 二进制转十六 mov al, bin ; 将二进制数存入 al 寄存器 mov bl, 16 ; 将 16 存入 bl 寄存器 div bl ; al 寄存器的值除以 bl 寄存器的值,商存入 ah 寄存器,余数存入 al 寄存器 cmp al, 9 ; 判断余数是否小于等于 9 jbe bin_to_hex ; 如果小于等于 9,跳转到 bin_to_hex 标签 add al, 7 ; 如果大于 9,将余数加上 7,得到 A~F 的 ASCII 码 bin_to_hex: add al, 30h ; 将余数转换为 ASCII 码 mov [hex], al ; 将 ASCII 码存入 hex 变量中 ; 十六二进制 mov al, [hex] ; 将十六数存入 al 寄存器 sub al, 30h ; 将 ASCII 码转换为数字 cmp al, 9 ; 判断数字是否小于等于 9 jbe hex_to_bin ; 如果小于等于 9,跳转到 hex_to_bin 标签 sub al, 7 ; 如果大于 9,将数字减去 7,得到 A~F 的值 hex_to_bin: mov bl, 2 ; 将 2 存入 bl 寄存器 mov cl, 0 ; 将 0 存入 cl 寄存器 mov dl, al ; 将数字存入 dl 寄存器 mov al, 0 ; 将 al 寄存器清零 hex_to_bin_loop: shr dl, 1 ; 将 dl 寄存器右移一位,相当于除以 2 adc al, 0 ; 将位标志位加到 al 寄存器中 inc cl ; 将 cl 寄存器加一 cmp cl, 8 ; 判断是否已经转换了 8 位二进制数 jne hex_to_bin_loop ; 如果没有,跳转到 hex_to_bin_loop 标签 mov [bin], al ; 将二进制数存入 bin 变量中 ; 退出程序 mov eax, 1 ; 将系统调用号 1(退出程序)存入 eax 寄存器 xor ebx, ebx ; 将返回值 0 存入 ebx 寄存器 int 0x80 ; 调用系统中断 ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值