汇编源码学习13-子函数模块-输入双字节整数

原创 2011年12月21日 21:29:41
;子函数:输入双字节整数。值保存在主调函数传递过来的变量中,非数字字符都是结束符。
;入口参数:DS传递主调函数的段地址;DI传递双字节变量的地址
;用到的寄存器:ES,AX,DS,DI,SI,CX,BX,DX
;无符号双字节整型的范围0-65535
data2	SEGMENT
		temp	DB	32 DUP(0)
		addr1	DW	?
		temp2	DW	?
data2	ENDS
code2	SEGMENT
InINT	PROC	FAR	;input int
		ASSUME	CS:code2,DS:data2
		PUSH	AX
		PUSH	BX
		PUSH	CX
		PUSH	DX
		PUSH	DI
		PUSH	SI
		PUSH	DS
		PUSH	ES
		MOV		AX,data2
		MOV		DS,AX
		;
		MOV		[addr1],DI
		LEA		SI,temp
		MOV		CL,0	;记录整数的位数
		MOV		BL,1	;标示当前位是否位首位,目的是去掉前导0,若首位为0,则继续为首位。
again2_1:
		MOV		AH,01H
		INT		21H
		CMP		AL,'0'		;非数字字符均为结束符
		JB		over2_1
		CMP		AL,'9'
		JA		over2_1
		CMP		BL,1		;检测当前位是否位首位,否则继续检测是否位0
		JNE		notFirst
		CMP		AL,'0'
		JE		again2_1
notFirst:
		MOV		BL,0		;将标志更改为“不是首位”
		SUB		AL,30H
		MOV		[SI],AL
		INC		SI
		INC		CL
		JMP		again2_1
over2_1:
		CMP		AL,0DH		;如果是以Enter结束输入,则先输出一个换行符
		JNE		notCR
		MOV		DL,0AH
		MOV		AH,02H
		INT		21H
		;转换成双字节整型
notCR:	DEC		SI
		MOV		WORD PTR ES:[DI],0
		MOV		AX,1
		MOV		[temp2],AX
again2_2:
		MOV		BL,[SI]
		MOV		BH,0
		MUL		BX
		ADD		ES:[DI],AX
		MOV		AX,[temp2]
		MOV		BX,10
		MUL		BX
		MOV		[temp2],AX
		DEC		SI
		DEC		CL
		CMP		CL,0
		JNE		again2_2
		POP		ES
		POP		DS
		POP		SI
		POP		DI
		POP		DX
		POP		CX
		POP		BX
		POP		AX
		RET
InINT	ENDP
code2	ENDS

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

汇编源码学习14-子函数模块-输出双字节整数

;子函数:输出双字节整数 ;入口参数:AX传递要输出的双字节整数 ;用到的寄存器:AX,DS,BX,DX,DI,SI data3 SEGMENT str DB 32 DUP('$(编译时去除此处...

汇编源码学习9-子程序设计-输入、输出大整数

;输入大整数,将其反序并由ASCII码值转换成数值,输入以非数字字符为结束符。 ;输出大整数,将大整数反序,并转为ASCII码 ASSUME SS:stack1 stack1 SEGMENT STAC...

汇编源码学习10-子程序调用-高精度整数加法

;高精度大整数相加 ASSUME SS:stack1 stack1 SEGMENT STACK DB 256 DUP(?) stack1 ENDS ;;;;;;;;;;;;;;;;;;;;;;;...

罗云彬win32汇编教程笔记 子函数的声明, 定义与调用

在主程序中用call指令来调用子程序。 Win32汇编中的子程序也采用堆栈来传递参数,这样就可以用invoke伪指令来进行调用和语法检查工作。 一. 子程序的定义 子程序的定义方式如下所示...
  • cay22
  • cay22
  • 2012年03月16日 11:56
  • 3387

C标准库源码解剖(13):输入输出函数stdio.h

C标准中的I/O库是一个比较庞大的库,实现也比较复杂。显然I/O库的实现是依赖于操作系统的,不同的系统上I/O库的实现机理是不一样的。glibc中,I/O库的核心实现在libio目录下。有4个头文件l...

PIC单片机实现双字节无符号数加减法

一、编写子程序 Add_16,实现双字节无符号数加法。要求在地址0x70~0x73定义变量ACCALO、ACCAHI、ACCBLO、ACCBHI。 ACCALO ;存放加数或减数低8位ACCAH...

单片机双字节乘法

  • 2008年01月23日 11:22
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编源码学习13-子函数模块-输入双字节整数
举报原因:
原因补充:

(最多只允许输入30个字)