微机原理实验报告-微机原理实验报告(编辑修改稿)内容摘要:

个数不超过 51 个),并将其中的最大值送显示。 要求把键入的 ASC2 码形式的十进制数转换为压缩 BCD 数,求十进制数的个数,求最大值的程序分别编写为子程序。 首先我们要设计好正确的程序流图 , 如下: 输入十进制字符 并 串 存储于 BufIn中 求输入的字符数 将 BufIn 中的十 进制串转换为 BCD 数然后存储到 BCDNum 中 遍历 BCDNum 求最大值 显示结果 由 以上流图则可以将该程序分为 如下几个模块: BCD 数并存 储于 指定的存储区中 BCD 数的最大值 BCD 数 由于是允许输入的十进制数最大值为 9999,故每个 BCD 数占用两个字节,最大输入的十进制数为 51 个,因此为可以为 BCDNum 定义 102 个存储单元,同理 BufIn 若占用 255 个存储单元也可以保证输入不会越界 接下来是各功能模块的设计: 模块 A: 函数名 AccToBCD INPUT: dx 传入十进制字符的首地址 OUTPUT: 转化后的压缩 BCD 数在 DI 偏移的地址中 CHANGE:DI 会增加 2 CHANGE:dx 会改变到下一个逗号后 将程序中用到的某些寄存器压栈 将 dx 中的偏移地址放入变址寄存器 SI 中 将 dx 地址后第一个逗号前的所有十进制 ACS2 码转换为一个十六进制数并存于 ax 中 将 ax 中的十六进制数转换为 BCD 数并存于 DI 指向的地址中 压栈的积存器出栈 模块 B 函数名 GetSize INPUT: dx 传入字符串的首地址 INPUT cx中传入字符的个数 OUTPUT: cx中返回数目 将程序 中用到的某些寄存器压栈 通过计算 BufIn 中逗号的数目得到十进制数的个数,存于 cx中 压栈的积存器出栈 模块 C 函数名 : GetMax INPUT: cl存放数目 INPUT: SI 存放 BCD 串的首地址 OUTPUT: ax 存放最大的 BCD 数 将程序中用到的某些寄存器压栈 将 ax 中存 0 逐个比较 ax 与 BCD 数的大小,若 ax BCD,则交换,最后得到的就是最大值 压栈的积存器出栈 模块 D 1. 接口设计 函数名 : Display INPUT: 将 ax 中 存入要显示的 BCD 数 OUTPUT: 将 ax 中存放的 BCD 数显示出来 2. 函数内部算法设计 将程序中用到的某些寄存器压栈 显示 ah 中的 两位 压缩 BCD 数 显示 al 中的两位压缩 BCD 数 压栈的积存器出栈 程序清单如下 : stack segment stack 39。 stack39。 dw 32 dup(?) stack ends data segment BufIn db 255,0,255 dup(?)。 接收输入的一串以逗号分隔的正数 BCDNum db 102 dup(?)。 转换为 BCD 后的十进制串 NSize db ?。 输入正数的个数 data ends code segment begin proc far assume ss:stack,cs:code,ds:data push ds sub ax,ax push ax mov ax,data mov ds,ax。 用户输入字符串到 BufIn 存储区中 mov dx,offset BufIn mov ah,10 int 21H。 为方便后面的操作,可以 在输入的串后面再加上一个逗号 mov dl,39。 ,39。 mov cl,BufIn[1] mov ch,0 mov SI,cx mov BufIn[SI+2],dl。 求输入的字符数目 (加上后面补上的 1 个逗号) mov dx,offset BufIn + 2 mov cl,BufIn[1] INC cl CALL far ptr GetSize mov NSize,cl。 将输入字符串中的十进制数( ASC2 码表示)转换为 BCD。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。