当前位置:编程学习 > 汇编语言 >>

在线作业急等!!!!用汇编语言将内存中的16位的有符号二进制数转换为十进制ASCII码形式

要用除法,存商,余数再除,希望有代码段
答案:不是上课的作业吗? 你哪个院的啊?这些作业还是得自己写,要不老师问你还是不会。q聊 1211411536 。
其他:这个例子是将16进制数转换为10进制数并输出,其中的子程序便是将16位的二进制数转换为10进制数。希望对你有帮助。
cseg segment
		assume cs:cseg
main proc
		 mov bx,162eh
		 call tern
		 mov ah,4ch
		 int 21h
main endp
;子程序tern的功能:把16位二进制数转换为10进制数
;调用参数:bx为待转换的二进制
tern proc
     mov cx,10000
     call dec_div
     mov cx,1000
     call dec_div
     mov cx,100
     call dec_div
     mov cx,10
     call dec_div
     mov cx,1
     call dec_div
     ret
tern endp
;子程序dec_div的功能:转换1位10进制并输出
;调用参数:cx中为十进制的位权,作为每次转换的除数
dec_div proc
	      mov ax,bx
	      mov dx,0
	      div cx
	      mov bx,dx
	      mov dl,al
	      add dl,30h
	      mov ah,2
	      int 21h
	      ret
dec_div endp
cseg ends
     end main 需要显示吗? 对此十六进制依次求除以10的余数,并将余数加上 30h,直到商为0。最后还要调换所得ASCII码字符的顺序 即把123 变为 321。
123
 10            3
--------
 12
 10            2
--------
  1
 10            1
--------     
    0

;名称:dtoc
;功能:将 word 型数据转变为十进制数的字符串,字符串以0为结尾
;参数:(ax)=word 型数据的16位,ds:si指向字符串的首地址。
dtoc:

	push di
	push dx
              push si

   	mov di,si
   trans: 
              mov  dl, 10
              div    dl                         ;商存在al中,余数存在ah
	add  ah,30h                  ;30h就是 '0'
	mov [si],ah	
	cmp al,0
              je    dtoc_range
              inc   si  
              mov ah,0
	jmp trans 
  dtoc_range:             
	mov ah,[si]      
	mov al,[di]     
	mov [di],ah
	mov [si],al
  	inc  di
              dec  si
              cmp di,si
              ja     dtoc_end
              jmp  dtoc_range
  dtoc_end:
              pop si
	pop dx
	pop di

	ret 

上一个:汇编问题,请高手指教
下一个:编写8086汇编语言程序 将DX寄存器的内容从地位到高位的顺序分成4组,且将各组分别送到寄存器AL,BL,CL,DL。

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,