汇编程序设计:原码转换与无符号数求和
需积分: 49 73 浏览量
更新于2024-09-14
收藏 62KB DOCX 举报
"该资源是一份关于汇编语言程序设计的实验报告,主要涉及顺序程序设计和分支程序设计。实验内容包括将一个有符号数从原码转换为反码和补码,并在屏幕上显示,以及计算两个两字节无符号数的和并显示结果。报告中提供了具体的算法和源代码示例,使用了8086汇编语言。"
实验内容详细说明:
1. 原码、反码和补码转换:
- 在计算机中,有符号数可以使用原码、反码和补码三种方式表示。原码直接表示数值的正负,正数的最高位为0,负数的最高位为1。反码是除了符号位不变外,其余各位按位取反。补码是反码加1,正数的补码与原码相同。
- 例如,字变量BUF1的值为9348H,转换为十进制是-3256。在8086汇编中,该数的原码最高位为1,表示这是一个负数。由于它是负数,转换为反码时,除符号位外的其他位取反,得到9CBBH;再将反码加1,得到9CBCH,这就是补码。
2. 源程序分析:
- DATASEGMENT部分定义了数据段,其中BUF1存放原码,BUF2和BUF3用于存放反码和补码,BUF2和BUF3后面还附加了换行和美元字符用于屏幕显示。
- CODESEGMENT部分是代码段,BEGIN标签开始的程序初始化DS段寄存器,然后处理BUF1的转换和显示。
- 判断 BUF1 是否为正数,如果是正数,则反码和补码与原码相同,否则进行反码和补码的计算。
- 使用JS跳转指令检查最高位(符号位),如果为1(负数),则进行反码和补码计算,否则直接将BUF1的值复制到BUF2和BUF3。
- 计算反码时,清除符号位(AND AX, 7FFFH),然后按位取反(NOT AX),并将结果存入BUF2。
- 计算补码时,对反码加1(INC AX),然后存入BUF3。
- 显示结果部分,使用循环和移位操作将结果转换为ASCII字符并在屏幕上显示。
3. 循环移位与ASCII转换:
- 为了在屏幕上显示数值,程序首先将DX寄存器加载为BUF2或BUF3的地址,然后通过循环移动DX中的数据并进行位操作,将数值转换为可打印的ASCII字符。
- 比较AL寄存器与0AH,如果小于0AH,则加上07H(为了将0-9的ASCII值转换为'0'-'9'的字符),然后加上30H('0'的ASCII值)。
- 每次循环完成后,数据右移四位,直到所有四位都被处理完。
4. 两个无符号数相加:
- 实验描述中提到了两个两字节无符号数的和,但源代码未给出这部分内容。通常,这会涉及到两个数的逐位相加,考虑进位,并在溢出时处理。
通过这个实验,学习者能深入理解汇编语言中的数据表示、条件分支、算术和逻辑运算以及屏幕输出等基本概念,同时熟悉了8086汇编语言的编程过程。
2018-04-20 上传
2015-01-13 上传
2011-12-27 上传
2012-03-09 上传
2023-05-24 上传
2010-11-11 上传
2019-03-24 上传
w153278
- 粉丝: 0
- 资源: 1
最新资源
- 深入浅出:自定义 Grunt 任务的实践指南
- 网络物理突变工具的多点路径规划实现与分析
- multifeed: 实现多作者间的超核心共享与同步技术
- C++商品交易系统实习项目详细要求
- macOS系统Python模块whl包安装教程
- 掌握fullstackJS:构建React框架与快速开发应用
- React-Purify: 实现React组件纯净方法的工具介绍
- deck.js:构建现代HTML演示的JavaScript库
- nunn:现代C++17实现的机器学习库开源项目
- Python安装包 Acquisition-4.12-cp35-cp35m-win_amd64.whl.zip 使用说明
- Amaranthus-tuberculatus基因组分析脚本集
- Ubuntu 12.04下Realtek RTL8821AE驱动的向后移植指南
- 掌握Jest环境下的最新jsdom功能
- CAGI Toolkit:开源Asterisk PBX的AGI应用开发
- MyDropDemo: 体验QGraphicsView的拖放功能
- 远程FPGA平台上的Quartus II17.1 LCD色块闪烁现象解析