没有合适的资源?快使用搜索试试~ 我知道了~
输入一组有符号字数据。对该组数进行排序,按照从大到小的顺序以用户指定的进制形式输出排序后的结果。 运行时: Please input numbers: 123 0 -100 -50 +300 25 ↙ Output Format (1: decimal; 2 :hex; 3: Octal) : 1↙ 300, 123, 25, 0, -50, -100 运行时: Please input numbers: 123 0 -100 -50 300 25 ↙ Output Format (1: decimal; 2 :hex; 3: Octal ) : 2↙ 12CH, 7BH, 19H, -32H, -64H
资源详情
资源评论
资源推荐
汇编语言第三次上机实验报告
时间: 2013.4.26
晚
地点: 寝室
实验人员: 周燕真
班级: CS1110
班
学号: U201114446
一、题目
输入一组有符号字数据。对该组数进行排序,按照从大到小的顺序以用户指
定的进制形式输出排序后的结果。
运行时:
Please input numbers:
123 0 -100 -50 + 300 25 ↙
Output Format (1: decimal; 2 :hex; 3: Octal) : 1↙
300, 123, 25, 0, -50, -100
运行时:
Please input numbers:
123 0 -100 -50 300 25 ↙
Output Format (1: decimal; 2 :hex; 3: Octal ) : 2↙
12CH, 7BH, 19H, -32H, -64H
二、实验要求
(1) 画出程序流程图,给出寄存器、存储单元的分配方法,子程序的功能、入口参数
及出口参数(对于各个子程序,也要说明其寄存器、存储单元的分配情况。在流程图中也
列出相应子程序的名称)。
(2) “数字串到字数据的转换”用子程序实现。要求:该子程序只实现一个数字串的转换。
对于多个数字串,要多次调用该子程序。(可以借鉴教材中的示例,注意每个模块前都应
该加上“.386”)。 对于非数字串,以及超过一个字大小的数字串应给出提示。
(3) “排序”使用子程序实现。
(4) “数值数据到串的转换”用子程序实现。要求该子程序只实现一个数值数据的转换。
(5) 输入时,数字串之间的分割符可以是一个空格,也可以是一个标点符号(如逗
号),数字串前可有一个正号或负号。输出时,数字串之间的分割符号为一个逗号加上一
个空格。
(6) 观察执行 CALL 指令时,堆栈的变化,以及 IP、CS 的变化。
(7) 掌握跟踪进入子程序的方法。
(8)定义宏并使用宏指令,观察宏扩展后的结果。
(9)采用模块化程序的方法设计该程序。
三、寄存器分配和变量定义说明
1、主模块中寄存器及主要变量的使用分配
AX:中间寄存器。
BX:往 ARR 字存储区送数指针,初值为 ARR。
CX:以逗号分隔的一个十进制数字串长度计数器,初值为 0。
DX:按系统功能调用的规定使用。
DI:往 BUF 字节存储区送输入的字符指针,初值为 BUF。
SI:调用 F10T2 子模块的入口参数,用作从 BUF 区取字符的指针。
BUF:输入缓冲区首址。
ARR:经转换得到的二进制数组存储区首址。
COUNT:ARR 存储区中数组元素个数计数器,初值为 0。
SIGN:输入字符串处理结束标志,1:处理结束,0:处理未结束。
2、子程序的入口参数及出口参数
(1)十进制数→二进制数子模块 F10T2 的程序
功能:
将十进制 ASCII 码转换为有符号或无符号二进制数→AX/EAX,如果该数溢出或为非
法数,则-1→SI。其中,16 位无符号数的范围为 0~65535,16 位有符号数的范围-
32768~+32767,如果是-65535~-32769,将作为 1~32767 处理, 如果是+
32768 ~ + 65535 将 作 为 -32768 ~ -1 处 理 。 32 位 无 符 号 数 的 范 围 为 0 ~
4294967295,32 位有符号数的 范围为 -2147483648~+2147483647,如 果是 -
4294967295~-2147483649 将作为 1~2147483647 处理,如果是 2147483648
~4294967295,将作为-2147483648~-1 处理。
入口参数:
SI——指向待转换的十进制 ASCII 码存储区首址
CX——存放该十进制 ASCII 码串的长度
DX——存放 16 位或 32 位标志
出口参数:
转换后的二进制数→AX/EAX。如果是非法数或溢出数,则-1→SI
所使用的寄存器和变量:
BX——中间寄存器
SIGN——正负数标记
(2)二进制数→十进制数子模块 F2T10 的程序
功能:
将 AX/EAX 中的有符号二进制数转换成十进制 ASCII 输出,其中,子程序 RADIX 的功
能为将 EAX 中的无符号二进制数按(BX)所规定的基制转换成 ASCII 码送入 SI 所指示的缓
冲区中。
调用 F2T10 的入口参数:
AX/EAX——存放待转换的二进制数
DX——存放 16 位或 32 位标志
调用 F2T10 的出口参数:
F2T10 子程序无出口参数。
所使用的变量:
BUF——存放转换后的 10 进制 ASCII 码数字串的字节缓冲区
调用 RADIX 的入口参数:
EBX——存放要转换的数制基数
EAX——存放待转换的 32 位
无符号二进制数 SI ——存放转换后的 P 进制 ASCII 码数字串的字节缓冲区首址
调用 RADIX 的出口参数:
所求 P 进制 ASCII 码数字串按高位在前、低位在后的顺序存放在以 SI 为指针的字节缓
冲区中。
SI——指向字节缓冲区中最后一个 ASCII 码的下一个字节处
所使用的寄存器:
CX ——P 进制数字入栈、出栈时的计数器
EDX—按除法指令和系统功能调用的规定使用
(3)二进制数→十六进制数子模块 F2T16 的程序
功能:
将 AX/EAX 中的有符号二进制数转换成十六进制 ASCII 输出,其中,子程序 RADIX 的
功能为将 EAX 中的无符号二进制数按(BX)所规定的基制转换成 ASCII 码送入 SI 所指示的
缓冲区中。
调用 F2T16 的入口参数:
AX/EAX——存放待转换的二进制数
DX——存放 16 位或 32 位标志
调用 F2T16 的出口参数:
F2T16 子程序无出口参数。
所使用的变量:
BUF——存放转换后的 16 进制 ASCII 码数字串的字节缓冲区
调用 RADIX1 的入口参数:
EBX——存放要转换的数制基数
EAX——存放待转换的 32 位
无符号二进制数 SI ——存放转换后的 P 进制 ASCII 码数字串的字节缓冲区首址
调用 RADIX1 的出口参数:
所求 P 进制 ASCII 码数字串按高位在前、低位在后的顺序存放在以 SI 为指针的字节缓
冲区中。
SI——指向字节缓冲区中最后一个 ASCII 码的下一个字节处
所使用的寄存器:
CX ——P 进制数字入栈、出栈时的计数器
EDX—按除法指令和系统功能调用的规定使用
(4)二进制数→八进制数子模块 F2T8 的程序
功能:
将 AX/EAX 中的有符号二进制数转换成八进制 ASCII 输出,其中,子程序 RADIX 的功
能为将 EAX 中的无符号二进制数按(BX)所规定的基制转换成 ASCII 码送入 SI 所指示的缓
冲区中。
调用 F2T8 的入口参数:
AX/EAX——存放待转换的二进制数
DX——存放 16 位或 32 位标志
剩余19页未读,继续阅读
zyz19950430
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0