汇编语言二进制转换为十六进制并显示的程序(简化段程序),能不能详细解说一下啊,真的有点不懂

汇编语言二进制转换为十六进制并显示的程序(简化段程序),能不能详细解说一下啊,真的有点不懂,第1张

dseg segment

  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)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12405165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存