汇编语言五位数加法----( 5 )

data segment
one db 6		;最大宽度(包括回车符)
    db ?		;保存实际宽度
    db 6 dup(?)		;实际内容

two db 6
    db ?
    db 6 dup(?)

mess1 db 'please enter the first one:','$'	;显示提示信息
mess2 db 'please enter the second one:','$'
mess3 db 'the result of add:','$'
mess4 db 'the one actual number:','$'

data ends

code segment
	assume cs:code,ds:data	;cs:代码段寄存器
start:
	mov ax,data		;立即数不能直接存放段寄存器
	mov ds,ax		;存放段地址

	mov dx,offset mess1	;偏移地址
	mov ah,09h	
	int 21h			;输出字符串

inone:	mov dx,offset one	
	mov ah,0ah
	int 21h			;输入第一个数

	mov si,offset one+2	;存放实际输入第一个数的首地址,si:指针寄存器
	mov cl,one+1		;存放实际宽度
	mov ch,0		;高位清零
	mov di,0		;di:指针寄存器
	mov bx,10		;每次乘10

ston1:				;字符串转数字(String to number)
	mov al,[si]		;直接寻址
	sub al,30h		;字符串保存的是ASSIC码
	mov ah,0
	xchg di,ax		;与之前的数字交换
	mul bx			;累乘
	add di,ax
	inc si			;实际数地址累加
	dec cx			;实际宽度累减
	cmp cx,0		;判断是否输出完
	jnz ston1		;结果不相等,跳转

	mov dl,0ah	
	mov ah,02h
	int 21h			;换行

	mov dx,offset mess2
	mov ah,09h
	int 21h			;输出字符串

	mov dx,offset two
	mov ah,0ah
	int 21h			;输入第二个数

	mov si,offset two+2
	mov cl,one+1
	mov bp,0		;bp:指针寄存器
	mov bx,10

ston2:
	mov al,[si]
	sub al,30h
	mov ah,0
	xchg bp,ax
	mul bx
	add bp,ax
	inc si
	dec cx
	cmp cx,0
	jnz ston2

	mov dl,0ah
	mov ah,02h
	int 21h			;换行

	mov dx,offset mess3
	mov ah,09h
	int 21h			;显示字符串

	mov ax,di
	add ax,bp		;两数相加	
	mov dx,0		;准备ax,dx
	mov bx,10000
	div bx			;(dx,ax)/src,商->ax,余->dx
	mov cx,dx		;保护余数
	mov dl,al		
	add dl,30h		;转化为数字
	mov ah,02h
	int 21h			;显示万位

	mov ax,cx
	mov dx,0
	mov bx,1000
	div bx
	mov cx,dx
	mov dl,al
	add dl,30h
	mov ah,02h
	int 21h

	mov ax,cx
	mov dx,0
	mov bx,100
	div bx
	mov cx,dx
	mov dl,al
	add dl,30h
	mov ah,02h
	int 21h

	mov ax,cx
	mov dx,0
	mov bx,10
	div bx
	mov cx,dx
	mov dl,al
	add dl,30h
	mov ah,02h
	int 21h

	mov ax,cx
	mov dl,al
	add dl,30h
	mov ah,02h
	int 21h


	mov dl,0Ah
	mov ah,02h
	int 21h

	mov dx,offset mess4
	mov ah,09h
	int 21h

	mov dl,one+1
	add dl,30h
	mov ah,02h
	int 21h			;显示实际个数



	mov ah,4ch
	int 21h			;结束程序

code ends			;结束代码段
	end start

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值