汇编2^16以下数字十进制转二进制
一.编程环境
emu8086
二.功能
- 汇编2^16以下数字十进制转二进制
- 在输入回车时,结束输入
- 在输入Q或者q时结束程序
- 遇到非法字符时,重新输入
三.代码
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