数字转字符串 基于8086汇编

这篇博客展示了如何使用8086汇编语言将数字转换为字符串。尽管代码实现了所需功能,但作者认为其结构不够理想,存在较多内存交换操作,可能影响代码的移植性。此外,文中提到了一个防止溢出的word型除法实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是代码的初稿,功能实现了,但是结构化上面感觉不是太满意,用了较多的内存交换数据的方式,移植性不太好(谁说汇编要可移植的)。重新写了一个防止溢出的除法,被除数是word型的,好了,贴代码:

assume cs:code,ds:data,ss:stack

data segment
	db 16 dup (0)	;前两个字节保存除法的商,第三个自己是余数,第四第五个字节为字符个数
	db 16 dup (0)
data ends

stack segment
	db 128 dup (0)
stack ends

code segment
start:

	mov ax,stack
	mov ss,ax
	mov sp,128
	mov ax,data
	mov ds,ax
	mov si,0 
	
	mov ax,12666	;要转化为字符串的数
	call dtoc
	
	mov ax,4c00h
	int 21h
	
dtoc:
	push ax
	push cx
	push bx
	push si
			
	mov bl,0ah
	mov si,0
s0:	call divw
	mov ah,ds:[2]	;从内存区取余数
	add ah,30h
	mov [si+16],ah	;将余数变为字符后存入内存
	inc si
	mov cx,ds:[0]	;从内存中取商,判断商是否为0
	jcxz tran_ok	
	mov ax,cx	;将商赋给ax,准备下一次除法
	inc cl		;若值为1,则还要进行一次循环
	loop s0	
			
tran_ok:
	dec si
	mov ds:[3],si	;保存字符个数
	call reverse	;转换字符顺序
	pop si
	pop bx
	pop cx
	pop ax
	ret
	
reverse:
	;名称:revers
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值