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

📄 task_3.asm

📁 一些汇编语言的实验设计源代码
💻 ASM
字号:
;Task_3.asm		习题3_3  第3题
;3.	以十进制形式在计算机屏幕上显示内存中的一个16位有符号数
;例如:若内存单元中存放的数据为0100H,则在屏幕上显示+256,若内存单元存放的数据为FFFFH,则应在屏幕上显示-1

data	segment	para
	str1 db	0dh, 0ah, 'The result is: ', '$'
	num	dw	8000H					;对应的十进制数为-32768
	buf	db	6	dup('0')			;存放输出的10进制数各位的ASCII
data	ends
ss_seg	segment	stack
	dw	50	dup(0)
ss_seg	ends
code	segment
	assume	cs:code,ds:data,ss:ss_seg
	main	proc	far
			mov		ax, data
			mov		ds, ax
			test	num, 8000h		;判断是正数还是负数
			jz		NUM_P
			mov		buf, '-'
			neg		num				;得到负数的相反数, 后面均按无符号数处理
			jmp		main1
	NUM_P:	mov		buf, '+'
	main1:	mov		di, num
			lea		bx, buf+5
			mov		cx, 5
			mov		si, 10
	main3:	xor		dx, dx
			mov		ax, di
			and		ax, ax
			jz		main2
			div		si
			mov		di, ax
			call	bin2asc			
			mov		[bx], dl
			dec		bx
			loop	main3
	main2:	call	disp
			;int		3
			mov		ax, 4c00h
			int		21h
	main	endp
	
	;输入参数:DL中存放要转换的二进制数
	;输出参数:DL中存放转换后得到的ASCII值
	;功能:将二进制数转换为ASCII
	bin2asc	proc
		add		dl, 30h
		cmp		dl, 39h
		jbe		bin2asc_1
		add		dl, 7
	bin2asc_1:	
		ret
	bin2asc	endp
	
	
	;输入参数:无
	;输出参数:无
	;功能:将二进制数转换为ASCII
	disp	proc
		mov		dx, offset str1		;显示输出提示
		mov		ah, 9
		int		21h
		mov		dl, buf				;显示符号位			
		mov		ah, 2
		int		21h
		mov		cx, 4
		mov		bx, 1
		mov		si, 0				
	disp_1:	
		mov		dl, buf[bx]
		and		si, si
		jnz		disp_2
		cmp		dl, '0'
		jz		disp_3
		or		si, 1				;si为标志位, 0: 表明10进制数高位是0,显示时需要忽略, 1: 表明已经显示了一个非0的数字
	disp_2:	
		push	bx					;防止调用int	21h时破坏bx, cx值
		push	cx
		mov		ah, 2
		int		21h
		pop		cx
		pop		bx
	disp_3:
		inc		bx
		loop	disp_1
		mov		dl, buf+5			;最后一个数字必须显示
		mov		ah, 2
		int		21h
		ret
	disp	endp
code	ends
	end		main

⌨️ 快捷键说明

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