基数转换程序 将寄存器EAX中的32位无符号二进制数转换为P进制数(P为 3-16 中任何一个整数) P进制的ASCII码按照高位在前,低位在后的顺序存放在SI指定的首址的字节存储区域
; 子程序名: radix ; 功能: 将EAX中的32位无符号二进制数转换为P进制数(16位段) ; 入口参数: ; EAX 存放待转换的32位无符号二进制数 ; EBX 存放要转换的数值的基数 ; SI 存放转换后的P进制ASCII码数字串的字节缓冲地址 ; 出口参数: ; 所求P进制的ASCII码数字串按照高位在前,低位在后的顺序存放在SI为指针的字节缓冲区中 ; SI 所指向字节缓冲区中最后一个ASCII码的下一个字节处 ; 寄存器: ; CX P进制数字入栈、出栈的计数器 ; EDX 做除法时存放被除数高位或余数 radix proc ;保护现场 push cx push edx ;计数器清零 xor cx, cx lop1: xor edx, edx ;edx清零 div ebx ; EAX / EBX(p) 商在EAX中,余数在DX中 push dx ;余数入栈 inc cx ;计数器加1 or eax, eax jnz lop1 ;如果eax != 0循环 lop1 lop2: pop ax ;从栈中取出一个余数 cmp al, 10 ; al < 10 ? jb L1 ;是 转 L1 add al, 7 ;越过数字字符与字母字符之间的间隔 L1: add ax, 30h;将数字转换为数字字符 inc si loop lop2 ;恢复现场 pop edx pop cx ret radix endp使用汇编可以利用ASCII表,字母表和数字表之间的间隔 7 直接转换, 效率明显比C++高多了,但是看代码的时候,直观性很差。