汇编程序设计:原码转换与无符号数求和

需积分: 49 10 下载量 136 浏览量 更新于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汇编语言的编程过程。