正文

二进制转十六进制(汇编)2007-04-11 13:11:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/lingdlz/24784.html

分享到:

;---------------------------------------------------------;输入二进制数,转为十六进制后输出;--------------------------------------------------------- .model small  .data MAX_BIN  db 100  ;二进制长度限制 REAL_LEN db ?  ;实际的输入 BIN_DATA db 100 dup(?) ;存储输入的01 RADIX_DATA db 1,2,4,8 ;2^x(x=0,1,2,3) MSG_PROM db 'Please input binary code :','$' MSG_ERR  db 'Input error,you must enter 0 or 1 !',13,10,'$' MSG_RLT  db 'The binary code to hex is:','$' BIN_TO_HEX db 100 dup(?).code;---------------------------------------------------------;屏幕输出以 '$' 结尾的字符串,OPR为字符串变量;---------------------------------------------------------macPutTxt macro OPR mov dx,offset OPR mov ah,09h int 21h endm ;---------------------------------------------------------;屏幕打印回车换行符,用到寄存器;---------------------------------------------------------macPutEnt macro  mov dl,0dh mov ah,02h int 21h mov dl,0ah mov ah,02h int 21h endm;---------------------------------------------------------;子过程,测试输入的数据是否是二进制;如果不是则置 ax 为1,否则置为2;---------------------------------------------------------subTestData proc far push bx push cx mov ax,2 mov bx,0nextTest: mov cl,byte ptr BIN_DATA[bx] cmp cl,0dh  ;回车 jz exitTest inc bx cmp cl,30h  ;是否是 0 jz nextTest cmp cl,31h  ;是否是 1 jz nextTest mov ax,1exitTest: pop cx pop bx retsubTestData endp;---------------------------------------------------------;子过程,二进制转十六进制,结果存于BIN_TO_HEX ;---------------------------------------------------------subBinToHex proc far irp reg,<ax,bx,si,di> ;保存寄存器  push reg endm mov ax,'$' push ax  ;设置哨兵 '$' mov al,REAL_LEN mov si,ax mov ax,0 mov di,-1 next: dec si mov bh,byte ptr BIN_DATA[si] inc di  cmp si,0 jz hexone cmp di,3 jz hexone  cmp bh,30h jz next  ;该位为 0 add al,byte ptr RADIX_DATA[di] jmp next hexone: cmp bh,30h jz pushhex add al,byte ptr RADIX_DATA[di] pushhex: cmp al,10 jb digit  add al,55  ;55 = 'A'-10 jmp pushokdigit: add al,30h  ;30h = '0'pushok: push ax cmp si,0 jz resetsi mov di,-1 mov al,0 jmp next resetsi: mov si,0pophex: pop ax mov byte ptr BIN_TO_HEX[si],al inc si cmp ax,'$' jnz pophex irp reg,<di,si,bx,ax> ;恢复寄存器  pop reg endm ret    subBinToHex endp;---------------------------------------------------------;主过程;---------------------------------------------------------main proc far mov ax,@data mov ds,ax  macPutTxt MSG_PROM lea dx,MAX_BIN  mov ax,0c0ah  ;先清空键盘缓冲区,然后键盘输入字符串 int 21h macPutEnt   ;打印回车  call subTestData cmp ax,1 jz error call subBinToHex macPutTxt MSG_RLT macPutTxt BIN_TO_HEX jmp exit error: macPutTxt MSG_ERRexit: mov ah,4ch int 21hmain endp end main   

阅读(7857) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册