21,497
社区成员




;
;This Program Compiled Sucess by Masm 6.15
;
assume cs:code,ds:data,ss:stack
data segment
buff db 4,0,4 dup (0) ;指定输入缓冲区
data ends
stack segment stack ;定义栈段(不是必须的)
db 64 dup (0)
stack ends
code segment
start:
mov ax,data ;指明数据段
mov dx,ax
mov dx,offset buff ;调用10号功能输入字符串
mov ah,10
int 21h
xor ax,ax ;所用ax,dx寄存器清零
xor dx,dx
mov cx,4 ;循环次数
mov si,12 ;循环内移位次数
mov bx,offset buff+2 ;字符串首地址
s:
push cx ;保存计数器
mov dl,[bx] ;将字符与数字,字母等比较
cmp dl,'0'
jae j1
jmp exit
j1:
cmp dl,'9'
jbe j2
cmp dl,'a'
jae k1
jmp exit
k1:
cmp dl,'f'
jbe k2
jmp exit
j2:
sub dl,30h ;是数字0~9
jmp jx
k2:
sub dl,57h ;是字母a~f
jx:
mov cx,si ;将字符做移位处理
shl dx,cl ;每次移位递减
add ax,dx ;结果放在AX里
xor dx,dx ;必须将DX清零
pop cx ;恢复计数器
inc bx ;指向下一个字符
sub si,4 ;移位次数递减4
loop s
xchg ax,dx ;调用子程序,显示二进制
call dispbin
exit:
mov ah,4ch
int 21h
;input:dx
;显示子程序
dispbin proc uses ax cx dx
mov cx,16
mov ax,dx
xor dx,dx
d: rol ax,1
adc dl,0
push ax
add dl,30h
mov ah,2
int 21h
xor dx,dx
pop ax
loop d
ret
dispbin endp
;
code ends
end start