汇编多位数输入并显示到屏幕

DATAS SEGMENT
    ;此处输入数据段代码 
    x dw ?
    n dw 10 
DATAS ENDS

STACKS SEGMENT
    ;此处输入堆栈段代码
    db 100h dup(?)
STACKS ENDS

CODES SEGMENT
    ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
    MOV AX,DATAS
    MOV DS,AX
    ;此处输入代码段代码
    mov bx,0
    
L1:
	mov ah,1
	int 21h	;AL=输入数字的ascii码
	cmp al,0dh ;0dh是回车
	jz L2
	sub al,30h	
	mov ah,0
	xchg bx,ax
	mul n
	add bx,ax
	jmp L1
L2:
	MOV dl,0dh ;DL为回车
	MOV AH,2
	INT 21H		;dl=输出字符
	mov x,bx	;把输入的结果存到x
	mov ax,x
	mov bx,10
	mov cx,0
	mov dx,0
L3: 
	div bx	;ax被除数隐藏,bx为除数,dx存放余数 ax存放商
	push dx
	inc cx	
	cwd ;字转化为双字
	cmp ax,0 ;被除数不为0继续
	jnz L3
L4:
	pop dx
	add dl,'0'
	
	MOV AH,2
	INT 21H
	loop L4
	
    MOV AH,4CH
    INT 21H
CODES ENDS
    END START

 

  • 9
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,下面是一个用汇编语言写的多位数输出代码的例子。这个例子使用了x86汇编语言,可以在Windows平台上运行。 ``` ; 多位数输出代码 ; 输入:eax - 要输出的数值 ; 输出:屏幕显示数值 section .data digits db "0123456789" newline db 0x0d, 0x0a, 0 section .text global _start _start: ; 将 eax 的值保存到 ebx 中 mov ebx, eax ; 如果数值为负数,输出负号并取反 cmp eax, 0 jge output neg eax mov byte [output_buffer], '-' inc dword [output_buffer_size] output: ; 计算数值的位数 mov ecx, 0 cmp eax, 0 jne loop mov byte [output_buffer], '0' inc dword [output_buffer_size] jmp done loop: inc ecx mov edx, 0 div dword 10 push edx cmp eax, 0 jne loop ; 从栈中弹出数字并输出 mov esi, output_buffer add esi, dword [output_buffer_size] pop_loop: pop edx mov al, byte [digits + edx] mov byte [esi], al inc dword [output_buffer_size] add esi, 1 loop pop_loop done: ; 输出结果到屏幕 mov eax, 4 mov ebx, 1 mov ecx, output_buffer mov edx, dword [output_buffer_size] int 0x80 ; 退出程序 mov eax, 1 xor ebx, ebx int 0x80 section .bss output_buffer resb 16 output_buffer_size resd 1 ``` 这个代码使用了一个output_buffer缓冲区来保存要输出的数字,同时使用一个output_buffer_size变量来记录缓冲区中已经使用的字节数。代码首先将eax的值保存到ebx中,然后检查数字是否为负数,如果是,就输出负号并取反。接着,代码计算数字的位数,并将每一位的值保存在一个栈中。最后,从栈中弹出数字并输出到output_buffer缓冲区中,然后将缓冲区中的内容输出到屏幕上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值