⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 suanshu.asm

📁 计算表达式值的汇编程序
💻 ASM
字号:
data segment
	sum dw 0
	ten db 10
data ends

code segment
	assume cs:code,ds:data
start:
	mov ax,data
	mov ds,ax

	mov bx,0
	mov cl,0
printin:			;录入字符存入al
	sub dx,dx
	mov ah,01
	int 21h
	cmp al,'='
	jz printout
	cmp al,'+'
	jz zadd
	cmp al,'-'
	jz zsub
	sub al,30h
	cmp al,9
	ja exit
	cmp al,0
	jb exit
	mov dl,al
	mov ax,bx
	mul ten
	mov bx,ax
	add bx,dx
	jmp printin
zadd:
	call yunsuan
	mov cl,0		;运算返回后设当前标志位为0
	jmp printin
zsub:
	call yunsuan
	mov cl,1		;运算返回后设当前标志位为1
	jmp printin
	
printout:
	call yunsuan
	mov ax,sum
	cmp ax,0
	jl fushu
	call bindec
	jmp exit
fushu:
	mov bx,ax
	mov dl,2dh
	mov ah,02
	int 21h
	neg bx
	mov ax,bx
	call bindec
exit:
	mov ah,4ch
	int 21h

yunsuan proc near		;根据标志位cl,把录入的数字(bx)算入sum
	cmp cl,0
	jz addsum
subsum:
	sub sum,bx
	jmp chuqv
addsum:
	add sum,bx
chuqv:	sub bx,bx
	ret
yunsuan endp

bindec proc near		;将二进制数转换为十进制并输出
	sub cx,cx
divh:
	mov cl,100
	cmp ax,cx
	jb divt
	div cl
	mov dl,al
	mov bl,ah
	add dl,30h
	mov ah,02
	int 21h
	mov al,bl
	cmp bl,10
	jae divt
	mov dl,30h
	mov ah,02
	int 21h
	mov al,bl
divt:
	and ax,00FFh
	mov cl,10
	mov ch,al
	cmp al,cl
	jb direct
	div cl
	mov dl,al
	mov ch,ah
	add dl,30h
	mov ah,02
	int 21h
direct:
	mov dl,ch
	add dl,30h
	mov ah,02
	int 21h
	ret
bindec endp
code ends
	end


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -