写了个转换的方法,比较笨,
大致算法是
判断buf是否取完-否-取数-判断正负-<0则输出负号-保存相反数-取出这个数-取出32-29位
是-exit >=0则--------保存这个数-
(ebx)-右移28(cl)-查表输出-ebx右移4位-cl减4-判断ebx?=0--!=0跳到
=0跳到
大家看看:
DATA SEGMENG USE16
BUF DD -1,4,-2,7,-3,-3,-3,4 ;要转换的字符
N1 DB 8 ;字符的个数
STRING DB '0123456789ABCDEF'
MINUS DB '-','$' ;负号
DATA ENDS
MOV ESI,0
MOV SI,-1
DOG: INC SI; 循环次数
MOV AL,N1; 字符串的个数
MOV AH,0
CMP SI,AX
JZ EXIT
MOV EBX,0F0000000H; 第一次取值
MOV CL,28 ; 第一次移动位数
MOV CH,4 ; 移动位数改变量
MOV EAX,BUF[ESI*4] ; 取出第一个数
CMP EAX,0;************判断正负
JGE SAVE
LEA DX,MINUS ;如果负数就先输出一个负号
MOV AH,9
INT 21H
MOV EAX,BUF[ESI*4]; 注意 因为9号调用,这里 eax已经变了
NEG EAX;************** 求这个负数的相反数
SAVE: MOV EBP,EAX ; EBP保存的是已经去掉负号的数据
CAT: MOV EAX,EBP
AND EAX,EBX ; 取出相应位数
SHR EAX,CL ; 右移相应位数
MOV DI,AX ;
MOV DL,STRING[DI]; 查表输出
MOV AH,2
INT 21H
SHR EBX,4 ;
SUB CL,CH
CMP EBX,0 ;ebx和0比较
JZ DOG ;=0 则 第一个数据转换完成
JMP CAT ;!=0 则继续转换
这是我想的办法,那位达人能给个好的办法?
[此贴子已经被作者于2006-5-31 8:27:46编辑过]