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

📄 task_2.asm

📁 一些汇编语言的实验设计源代码
💻 ASM
字号:
;Task_2.asm		习题3_3  第2题
;2.	从键盘输入一个4位十进制数,然后以16进制形式显示在屏幕上,试编程;

data	segment	para
	str1	db	0dh, 0ah, 'Please input(1000~9999): ', '$'		;输入提示
	str2	db	0dh, 0ah, 'The hex result is: ', '$'			;输出提示
	str3	db	0dh, 0ah, 'Input Error!', '$'					;输入错误提示
	D_BUF	db	4 dup (0)										;存放4个输入的10进制数, 千位在前, 个位在后
	H_BUF	db	4 dup (' '), 'H', '$'							;存放输出ASCII值, 初始化为空格
	num		dw	0												;存放16位整数
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
	main2:	lea		dx, str1		;显示输入10进制数提示符
			mov		ah, 9
			int		21h
			lea		bx, D_BUF
			mov		cx, 4
	main1:	push	bx				;防止调用 int  21h时,破坏bx, cx中的值, 可以使用SI和DI寄存器
			push	cx
			mov		ah, 1			;循环实现4位十进制数输入
			int		21h
			call	asc2bin			;将ASCII转换为二进制数
			pop		cx
			pop		bx
			mov		[bx], al
			inc		bx
			loop	main1
			lea		bx, D_BUF
			call	bin2hex			;将输入的4个独立的数组合成一个16位的整数
			mov		num, ax
			cmp		num, 1000
			jb		error
			cmp		num, 9999
			ja		error
			lea		dx, str2		;显示输出结果提示
			mov		ah, 9
			int		21h
			mov		ax, num
			lea		bx, H_BUF
			call	hex2asc			;将16进制数转换成ASCII码,存于H_BUF开始的4个单元
			lea		dx, H_BUF
			mov		ah, 9
			int		21h
			;int		3
			mov		ax, 4c00h
			int		21h
			
	error:	lea		dx, str3		;显示输入错误提示
			mov		ah, 9
			int		21h
			jmp		main2
	main	endp
	
	;输入参数:AL中存放要转换的ASCII值
	;输出参数:AL中存放转换后得到的二进制数
	;功能:将ASCII转换为二进制数
	asc2bin	proc
		sub		al, 30h
		cmp		al, 9
		jbe		asc2bin_1
		sub		al, 7
	asc2bin_1:	
		ret
	asc2bin	endp
	
	;输入参数:bx中存放要转换的4个独立十进制数存储单元的首地址
	;输出参数:ax中存放组合后的16位整数
	;功能:将4个独立的数组合成一个16位整数
	bin2hex	proc
		push	si
		push	di
		mov		al, [bx]		;得到千位
		and		ah, 0
		mov		si, 1000		
		mul		si
		mov		di, ax			;将结果保存在di中,由于是4位十进制数,因此乘以1000后,结果将保存在ax中,dx值肯定为0
		inc		bx
		mov		al, [bx]		;得到百位
		and		ah, 0
		mov		si, 100
		mul		si
		add		di, ax
		inc		bx
		mov		al, [bx]		;得到十位
		and		ah, 0
		mov		si, 10
		mul		si
		add		di, ax
		inc		bx
		mov		al, [bx]		;得到个位
		and		ah, 0
		add		ax, di			;得到转换后的16位整数,并保存在ax中
		pop		di
		pop		si
		ret
	bin2hex	endp
	
	;输入参数:ax中存放要转换16进制数
	;		   bx中存放转换后得到的ASCII的存储单元首地址
	;功能:将一个16位整数转换成相应的ASCII
	hex2asc	proc
		push	si
		push	cx
		push	dx
		mov		si, 4			;需要循环左移4次
		mov		cl, 4			;每次循环左移4位
	hex2asc_1:
		rol		ax, cl
		mov		dx, ax			;保存中间结果
		and		ax, 000Fh		;屏蔽高12位
		call	bin2asc			;得到低4位所对应的ASCII
		mov		[bx], al
		mov		ax, dx
		inc		bx
		dec		si
		jnz		hex2asc_1
		pop		dx
		pop		cx
		pop		si
		ret
	hex2asc	endp
	
	;输入参数:AL中存放要转换的二进制数
	;输出参数:AL中存放转换后得到的ASCII值
	;功能:将二进制数转换为ASCII
	bin2asc	proc
		add		al, 30h
		cmp		al, 39h
		jbe		bin2asc_1
		add		al, 7
	bin2asc_1:	
		ret
	bin2asc	endp
code	ends
	end		main

⌨️ 快捷键说明

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