msg0 db 'Input Binary Num:$'
msg1 db 0dh,0ah, 'Hex Num:$'
inBin db 17 存储输入的2进制字符串,最大长度16, 最后一个字符存储回车
db 0 实际的输入长度
db 17 dup(0) 存储输入的字符串
n dw 0
dseg ends
assume cs:cseg, ds:dseg
cseg segment
start:
mov ax, dseg
mov ds, ax
call readBin 宴厅调用输入2进制的函数,结果存储在n中
call outHex 调用将n按16进制输出的函数
mov ax, 4c00h
int 21h
readBin proc near
mov ah, 9 输出
lea dx, msg0 msg0
int 21h 这个字符串
mov ah,10 读取输出的字符串到inBin中
lea dx, inBin
int 21h
mov cl, inBin+1 输入的字符串长度放入cx中
mov ch, 0
mov bx, 2 bx指向第1个实际输出字符的位置
xor ax, ax ax清0
r0:
mov dl, inBin[bx] 读此氏取第[bx]个输入的字符
and dl, 0FH 字符转换为实际的数值 0或1
shl ax, 1 ax 左移1位
add al, dl (al)+(dl)
inc bx bx指向下一个字符
loop r0 循环处理输入的2进制字符串
mov n, ax 将最后结果存入n中
ret
readBin endp
outHex proc near
mov ah,9 显示
lea dx, msg1 字符串
int 21h msg1
mov ch, 4 一个字,有4个字符,所以需要处理4次
mov cl, 4 每一次,移位的数量为4个bit
mov bx, n 读取n到(bx)中
mov ah,0eh 为调用int 10h,输出(al)中的字符做准备
O0:
rol bx, cl bx循环左移4位,第1次时,即最高4位->最低4位
mov al, bl (al)<-(bl)
and al, 0FH (al)中数据只保留低4位
cmp al, 10 (al)<=9?,则+30H转为数字对应的ASCII字符
jb O1 (al)>9,则为16进制的A-F
add al, 7 所以要加上7,转为对应的ASCII字符
O1:
add al, 30h 统一+30H
int 10h 调用10h中断,输出到屏幕上
dec ch ch--
jnz O0 晌扒隐
ret
outHex endp
cseg ends
end start
从氏明dat后面那一句开始int i
for(i=0i!=16++i)
{
*(Array+i)=(dat>>(i/2))&0x01
}
dat=*Array
for(i=1i!=16++i)
{
dat|=(*(Array+i)<铅让<歼激告i)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)