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

📄 计算和.asm

📁 从键盘输入两个十六进制数(长度小于4)
💻 ASM
字号:
;从键盘输入两个十六进制数(长度小于4),计算它们的和然后输出
;如输入的两个数为1111,abcd,则显示结果为
;1111+abcd=bcde
data segment
	X	dw ?
	Y	dw ?
	note db 0ah,0dh,'please input a number [0,9]or[A,F](length <=4)','$'
data ends
stack segment stack
	db 100 dup(?)
stack ends
code segment
	assume cs:code, ds:data, ss:stack
start:	mov ax,data
	mov ds,ax

	mov dx,offset note
	mov ah,09h
	int 21h
	call input16
	mov X,ax
	mov dx,offset note
	mov ah,09h
	int 21h
	call input16
	mov Y,ax
call outputenter	
	mov ax,X
	call output16
	mov ah,02h
	mov dl,'+'
	int 21h
	mov ax,Y
	call output16
	mov ah,02h
	mov dl,'='
	int 21h
	mov ax,X
	add ax,Y
	call output16

	mov ah,4ch
	int 21h
input16 proc	
	;从键盘读十进制数据,输入数据不在[0,9][A,F]时结束
	;转换好的数据存放在AX中	
	push bx
	push si
	mov cl,0;记录符号
	mov bx,0	
next:	mov ah,01h
	int 21h
	cmp al,'0'
	jb done
	cmp al,'9'
	jbe rightinput10
	cmp al,'A'
	jb done
	cmp al,'F'
	jbe rightinput16
	cmp al,'a'
	jb done
	cmp al,'f'
	jbe rightinput16
	jmp done	
rightinput10:	and al,	0fh
	jmp endextract
rightinput16:
	and al,0fh;‘A’的ASCII为41h,该指令的运算结果为01h,期望是0Ah,所以加9
	add al,9
endextract:	
	mov ah,0
	xchg bx,ax
	mov si,16
	mul si
	add bx,ax
	jmp next
done:	mov ax,bx
	pop si
	pop bx
	ret
input16 endp
output16 proc
	;将AX中的数据按十六进制格式输出
	push dx	
	push cx
	push bx
	push ax
	mov bx,ax;BX中保留待转换的数
	mov cl,4;每次需要移4位
	mov ch,4;共有4位16进制数要输出
next16:	rol bx,cl
	mov dx,bx
	and dl,0fh
	cmp dl,9
	jg  tochar16
	add dl,30h
	jmp endchange
tochar16: add dl,41h-10
endchange:
	mov ah,02h
	int 21h
	dec ch
	jnz next16	
	pop ax
	pop bx
	pop cx
	pop dx	
	ret	
output16 endp
outputenter proc
	;输出回车和换行
	push dx
	push ax
	mov ah,02h
	mov dl,0ah
	int 21h
	mov ah,02h
	mov dl,0dh
	int 21h
	pop ax
	pop dx
	ret
outputenter endp

code ends
	end start

⌨️ 快捷键说明

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