汇编语言(七)循环结构

时间:2021-02-17 01:09:50

1.计算 1+2+3+...+n=?  其中n通过键盘输入,累加和小于2^16。

assume ds:data,cs:code
data segment
	inf1 db "Please input a number (0-65535):$"
	
	ibuf db 7,0,6 dup (?)
	obuf db 6 dup(?)
	inf2 db 0ah,0dh,"1+2+...+n=$"
data ends
code segment
start:	
	TenTo2 macro 
	      local again

		mov dx,offset inf1
		mov ah,09h
		int 21h
		mov dx,offset ibuf
		mov ah,0ah
		int 21h
		mov cl,ibuf+1
		mov ch,0
		mov si,offset ibuf+2
		mov ax,0
	again:	mov dx,10
		mul dx
		and byte ptr [si],0fh
		add al,[si]
		adc ah,0
		inc si
		loop again	

	endm
	
	TwoTo10 macro
	      local loop1

		mov bx,offset obuf+5
		mov byte ptr [bx],'$'
		mov cx,10
	loop1:	mov dx,0
		div cx
		add dl,30h
		dec bx
		mov [bx],dl
		or ax,ax
		jnz loop1
		mov dx,bx
		mov ah,09h
		int 21h

	endm

;;;;;;;;;;;;;;;;;;;Begin;;;;;;;;;;;;;;;;;;;;;;

	mov ax,data
	mov ds,ax
	
	TenTo2
	
	mov cx,ax
	mov ax,0
	mov bx,1
loop2:
	add ax,bx
	inc bx
	loop loop2
	
	push ax

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

	pop ax
	TwoTo10

	mov ah,4ch
	int 21h
code ends
	end start