汇编源码学习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

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

linux汇编学习(-)之从键盘输入输出

看了一个多月的汇编始终都是门外汉,连个输入输出都很困难,今天终于查阅相关资料实现了,也借此寒假的时间好好学习一下汇编,就用下面这段代码来开始汇编的学习吧,如果有什么错误,还请各路大大见谅,毕竟本人也是...
  • u013303425
  • u013303425
  • 2016年01月18日 12:59
  • 741

学习16位DOS汇编笔记

ax       //是16位的寄存器,最大可以存65535 ah,al  //是8位的寄存器,最大可以存255 cs:ip  //指向程序下一条执行的指令 ds     //数据段寄存器 ss  ...
  • SysProgram
  • SysProgram
  • 2016年08月29日 21:01
  • 391

汇编——多模块程序设计(主模块)

⑵ 编写一个计算Z=(X2+Y4)的汇编语言主模块,其中X2、Y4通过调用⑴中的Nm实现,并显示当X=5,Y=6时的结果。显示格式为: X=5,Y=6,Z=   ;主程序 .386 .m...
  • RAUL_AC
  • RAUL_AC
  • 2013年03月24日 21:30
  • 1329

汇编程序的多模块化

在此章节之前,创建的程序全部是只用一个模块的,也就是程序中只用了一个END指令,这里通过创建ArraySum例子程序演示创建多模块程序的方法。 首先通过使用ENTERN伪指令创建传统的多模块...
  • dasgk
  • dasgk
  • 2013年12月10日 19:31
  • 726

linux平台学x86汇编(十):整数运算

【版权声明:尊重原创,转载请保留出处:blog.csdn.net/shallnet,文章仅供学习交流,请勿用于商业用途】 这一节介绍如何在编语言中上使用整数运算,包括加法、减法、乘法和除法。 加...
  • gentleliu
  • gentleliu
  • 2015年05月09日 16:08
  • 2171

Intel汇编程序设计-整数算术指令(中)

Intel汇编程序设计-整数算术指令(中)
  • u013761036
  • u013761036
  • 2016年09月11日 19:17
  • 808

汇编——输入字符输出字符

单纯的输出字符在之前的Hello已经演示了,那么如何将输入的字符再输出呢? 在输入的字符串中第一个字节为用户定义的最大输入字符数,第二个字节为实际输入的字符数,由DOS自动填入。第三个字节之后才是输...
  • huayunhualuo
  • huayunhualuo
  • 2016年10月31日 11:13
  • 1749

汇编——多模块程序设计(子模块)

⑴ 编写一个求Nm的汇编语言子程序(子模块)。 ; 子程序 .386 .model flat,stdcall option casemap:none includelib msvcrt.lib...
  • RAUL_AC
  • RAUL_AC
  • 2013年03月24日 21:29
  • 1384

Dos汇编的简单输入输出.

Dos汇编中的输入输入通常是用中断来实现的。通常汇编教程都是把中断放到后面讲解的。这样编排虽然很科学,但是刚开始学汇编的时候会感觉艰难苦恨,程序的运行结果只能用debug查看,还不能人机交互。 这里列...
  • a1193561652
  • a1193561652
  • 2015年01月01日 23:37
  • 1996

机器学习(统计学习方法)4

生活有懒散,而我仍拖懒~ Day 4 1.7 生成模型与判别模型            监督学习方法可以分为:生成方法与判别方法,与此对应生成模型与判别模型。       生成方法即由数据学习联合概率...
  • qq_39652987
  • qq_39652987
  • 2017年08月03日 10:42
  • 57
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:汇编源码学习13-子函数模块-输入双字节整数
举报原因:
原因补充:

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