论文部分内容阅读
摘要:设计的汇编语言子程序库可以被汇编程序或C 程序调用。实现不同数制的键盘输入和控制台显示。
关键词:汇编语言 I/O 子程序 库
中图分类号:TP313 文献标识码:B 文章编号:1002-2422(2008)03-0086-02
设计的I/O子程序库包括16位版本和32位版本,可分别应用于16位和32位汇编语言应用程序,提供的子程序功能包括不同数制和字符串的输入与显示,状态标志的显示,满足汇编语言程序设计的通常要求。
1 设计方案
1.1子程序功能需求
根据在汇编语言程序设计中的通常要求,子程序所提供的功能主要包括键盘输入和显示器显示,输入和显示的内容可以是不同的数制与字符串格式。如表1所示。
1.2子程序库结构
为了方便整个子程序库的设计,设计了一些通用予程序。在实现提供给用户使用的子程序时,充分利用这些通用子程序,简化了子程序的代码编写,减少了子程序库的长度。主要子程序之间的关系如图1所示。
字符输入和显示子程序READC、DISPC是整个子程序库输入输出的基础。利用这两个子程序实现了字符串输入和显示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同数制数据输入和显示的基础:通过调用READMSG读入字符串,然后调用字符串转换子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分别将字符串转换为不同数制的数据,从而实现了不同数制输入的子程序READBIN、READHEX、READUI、READSI等;通过调用DISPMSG显示字符串,然后调用数据转换字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分别将字符串转换为不同数制的数据,从而实现了显示不同数制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
设计的16位和32位的子程序库提供的子程序功能都是相同的,区别在于16位的字符输入子程序是利用DOS系统调用实现的,而32位的字符输入子程序是利用WIN-DOWS API函数实现的。其他子程序则可以通用。
各个子程序汇编后,由库管理工具LIB.EXE生成16位子程序库I/O16.LIB和32位子程序库I/O32.LIB。
1.3参数传递
汇编语言子程序的参数传递可以采用寄存器传递,共享内存变量和堆栈传递三种方法。堆栈传递参数时,可以用MASM提供的伪指令PROTO来声明子程序,用INVOKE来调用子程序。这两个伪指令在声明和调用子程序时相对于CALL指令和PROC伪指令要简洁得多。使用堆栈传递参数也是高级语言通常使用的子程序传递参数的方法,用堆栈传递参数的子程序可以被高级语言调用。子程序的返回参数也遵循高级语言子程序的规范,采用寄存器EAX返回子程序的出口参数。
1.4宏命令
调用子程序需要用专门的调用指令并遵循一定的格式要求,这对于初学者来说有一定的难度。当子程序的参数比较多时,调用子程序的编码量较多,设计了调用子程序的宏指令,利用宏指令来实现对应的子程序调用,格式简单,使用方便,尤其适合初学者应用。为提高代码的复用性,被调用子程序的声明和宏定义都放在包含文件IO.INC中,在汇编语言应用程序中用INCLUDE语句包含该文件即可。
2 结束语
为了验证子程序的正确性,分别设计了测试源程序I/O16TEST.ASM和I/O32TEST.ASM用于测试I/O子程序库16位版本和32位版本的正确性。
关键词:汇编语言 I/O 子程序 库
中图分类号:TP313 文献标识码:B 文章编号:1002-2422(2008)03-0086-02
设计的I/O子程序库包括16位版本和32位版本,可分别应用于16位和32位汇编语言应用程序,提供的子程序功能包括不同数制和字符串的输入与显示,状态标志的显示,满足汇编语言程序设计的通常要求。
1 设计方案
1.1子程序功能需求
根据在汇编语言程序设计中的通常要求,子程序所提供的功能主要包括键盘输入和显示器显示,输入和显示的内容可以是不同的数制与字符串格式。如表1所示。

1.2子程序库结构
为了方便整个子程序库的设计,设计了一些通用予程序。在实现提供给用户使用的子程序时,充分利用这些通用子程序,简化了子程序的代码编写,减少了子程序库的长度。主要子程序之间的关系如图1所示。
字符输入和显示子程序READC、DISPC是整个子程序库输入输出的基础。利用这两个子程序实现了字符串输入和显示子程序READMSG和DISPMSG。子程序READMSG和DISPMSG又是不同数制数据输入和显示的基础:通过调用READMSG读入字符串,然后调用字符串转换子程序STRTOBIN、STRTOHEX、STRTOUI和STRTOSl分别将字符串转换为不同数制的数据,从而实现了不同数制输入的子程序READBIN、READHEX、READUI、READSI等;通过调用DISPMSG显示字符串,然后调用数据转换字符串子程序BINTOSTR、HEXTOSTR、UITOSTR和SITOSTR分别将字符串转换为不同数制的数据,从而实现了显示不同数制的子程序DISPBIN、DISPHEX、DISPUI、DISPSI等。
设计的16位和32位的子程序库提供的子程序功能都是相同的,区别在于16位的字符输入子程序是利用DOS系统调用实现的,而32位的字符输入子程序是利用WIN-DOWS API函数实现的。其他子程序则可以通用。
各个子程序汇编后,由库管理工具LIB.EXE生成16位子程序库I/O16.LIB和32位子程序库I/O32.LIB。
1.3参数传递
汇编语言子程序的参数传递可以采用寄存器传递,共享内存变量和堆栈传递三种方法。堆栈传递参数时,可以用MASM提供的伪指令PROTO来声明子程序,用INVOKE来调用子程序。这两个伪指令在声明和调用子程序时相对于CALL指令和PROC伪指令要简洁得多。使用堆栈传递参数也是高级语言通常使用的子程序传递参数的方法,用堆栈传递参数的子程序可以被高级语言调用。子程序的返回参数也遵循高级语言子程序的规范,采用寄存器EAX返回子程序的出口参数。
1.4宏命令
调用子程序需要用专门的调用指令并遵循一定的格式要求,这对于初学者来说有一定的难度。当子程序的参数比较多时,调用子程序的编码量较多,设计了调用子程序的宏指令,利用宏指令来实现对应的子程序调用,格式简单,使用方便,尤其适合初学者应用。为提高代码的复用性,被调用子程序的声明和宏定义都放在包含文件IO.INC中,在汇编语言应用程序中用INCLUDE语句包含该文件即可。
2 结束语
为了验证子程序的正确性,分别设计了测试源程序I/O16TEST.ASM和I/O32TEST.ASM用于测试I/O子程序库16位版本和32位版本的正确性。