汇编2^16以下数字十进制转二进制

汇编2^16以下数字十进制转二进制

一.编程环境

emu8086

二.功能
  1. 汇编2^16以下数字十进制转二进制
  2. 在输入回车时,结束输入
  3. 在输入Q或者q时结束程序
  4. 遇到非法字符时,重新输入
三.代码
data segment
    err1 db "error input!please restart!$"
    jieshu db "get Q or q,exit!$"
data ends

code segment
start:  
  mov ax,data
  mov ds,ax

p1:
  call read        ;输入函数
  mov ah, 02h      ;归位 换行
  mov dl, 0dh 
  int 21h
  mov ah, 02h
  mov dl, 0ah 
  int 21h
  
  mov cx,16       
Print:
  cmp bh,7Fh       ;第一位是不是1
  ja print1
  mov ah, 02h
  mov dl,'0'
  int 21h
  shl bx,1
  loop Print
  jmp p2
  print1:
  mov ah, 02h
  mov dl,'1'
  int 21h
  shl bx,1
  loop Print
p2:  
  mov ah, 02h      ;归位 换行
  mov dl, 0dh 
  int 21h
  mov ah, 02h
  mov dl, 0ah 
  int 21h
jmp p1

read proc     ;读入函数read
restart:   
    mov bx,0       
newchar: 
    mov ah,1     ;输入一个字符到al
    int 21h
    xor ah,ah
    
    cmp al,0dh    ;输入回车,则跳出
    je  exit
    
    cmp al,51h    ;将bl与Q、q的ASCII码比较,如果相等,跳至最末
    je finalend
    cmp al,71h
    je finalend
    
    cmp al,'0'    ;输入‘0'-'9'之外的字符,重输
    jb  exit2
    cmp al,'9'
    ja  exit2
    
    sub al,'0'     ;将字符转化为数字
    xchg bx,ax     ;ax,bx值交换,ax:之前结果,bx:输入数字    
    mov cx,0ah
    mul cx        ;al*10->ax. 
    xchg bx,ax
    add bx,ax
    jmp newchar   ;相当于bx=bx*10+ax

exit2:
    mov ah, 02h      ;归位 换行
    mov dl, 0dh 
    int 21h
    mov ah, 02h
    mov dl, 0ah 
    int 21h
    
    lea dx,err1
    mov ax,0900h
    int 21h
    
    mov ah, 02h      ;归位 换行
    mov dl, 0dh 
    int 21h
    mov ah, 02h
    mov dl, 0ah 
    int 21h
    
    jmp restart  ;重新输入
    
exit:
    ret
    read endp



finalend: 
    mov ah, 02h      ;归位 换行
    mov dl, 0dh 
    int 21h
    mov ah, 02h
    mov dl, 0ah 
    int 21h
    
    lea dx,jieshu
    mov ax,0900h
    int 21h
code ends
end start
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值