写了个转换的方法,比较笨,
大致算法是 判断buf是否取完-否-取数-判断正负-<0则输出负号-保存相反数-
判断buf是否取完-否-取数-判断正负-<0则输出负号-保存相反数- 取出这个数-取出32-29位
取出这个数-取出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编辑过]

 
											





 
	     
											 
										
					
	