欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 汇编语言作业(六)

汇编语言作业(六)

2024/10/25 7:25:01 来源:https://blog.csdn.net/weixin_74746867/article/details/137236643  浏览:    关键词:汇编语言作业(六)
  • 目录

    一、实验目的

    二、实验内容

    三、实验步骤以及结果

    四、实验结果与分析

    五、实验总结


    一、实验目的

    1. 掌握加减法运算指令对各状态标志位的影响及测试方法
    2. 掌握汇编语言长整数的加法的操作方法
  • 二、实验内容

  1. 对于以下几组数,

       087H和034H

       0C2H和5FH

       0F3H和0F3H,编程求这两组数的和与差

     1)若这几组数都是无符号数,记录计算结果并考虑计算结果对标志寄存器中CF、OF、ZF、SF、PF 等状态标志位的以下表的格式记录下来。

     2)如果是有符号数的加法和减法,上面小题的指令适用吗?此时如何看待计算结果?

操作数1

操作数2

操作指令

计算结果

CF

ZF

OF

SF

AF

PF

087H

034H

ADD

0CBH

0

0

-

2. Data1 和Data2 是两个三字节的无符号整数,尝试编写汇编程序计算得到Data1 和Data2的和,将结果存到以ans为首地址的缓冲器区中 假如Data1 存放的数据为 0FFEEDDH,Data2 :102236H,则结果    101113H。

3. 计算(V-(X*Y+Z-540))/X,其中X、Y、Z、V均为16位带符号数,假设初始数据分别装入X,Y,Z,V单元,要求将计算的结果放入以ans为首地址的缓冲器区中。

参考初始值:

   V:0124H  X :0FE1CH     Y:023FH Z:8230H

三、实验步骤以及结果

1.对于以下几组数,

       087H和034H

       0C2H和5FH

       0F3H和0F3H,编程求这两组数的和与差

     1)若这几组数都是无符号数,记录计算结果并考虑计算结果对标志寄存器中CF、OF、ZF、SF、PF 等状态标志位的以下表的格式记录下来。

     2)如果是有符号数的加法和减法,上面小题的指令适用吗?此时如何看待计算结果?

第一版代码如下:

stack segment stackstack endsdataseg segmentdata1 db 087h,0c2h,0f3hdata2 db 034h,5fh,0f3h
dataseg endscode segment
assume cs:code, ds:dataseg, ss:stackstart:	mov ax, datasegmov ds, axmov al,data1add al,data2mov al,data1sub al,data2mov al,[data1+1]add al,[data2+1]mov al,[data1+1]sub al,[data2+1]mov al,[data1+2]add al,[data2+2]mov al,[data1+2]sub al,[data2+2]mov ah, 4chint 21h
code endsend start

结果符合题意,结果在下面表格中。

操作数1

操作数2

操作指令

计算结果

CF

ZF

OF

SF

AF

PF

087H

034H

ADD

0CBH

0

0

0

1

0

1

087H

034H

SUB

053H

0

0

1

0

0

1

0C2H

5FH

ADD

21H

1

0

0

0

1

1

0C2H

5FH

SUB

63H

0

0

1

0

1

1

0F3H

0F3H

ADD

0E6H

1

0

0

1

0

0

0F3H

0F3H

SUB

00H

0

1

0

0

0

1

2. Data1 和Data2 是两个三字节的无符号整数,尝试编写汇编程序计算得到Data1 和Data2的和,将结果存到以ans为首地址的缓冲器区中 假如Data1 存放的数据为 0FFEEDDH,Data2 :102236H,则结果    101113H。

代码如下:

stack segment stackstack endsdataseg segmentdata1 db 0FFh,0EEh,0DDhdata2 db 10h,22h,36hans db 4 dup(?)
dataseg endscode segment
assume cs:code, ds:dataseg, ss:stackstart:	mov ax, datasegmov ds, axmov ah,[data1+2]adc ah,[data2+2]mov [ans+2],ahmov ah,[data1+1]adc ah,[data2+1]mov [ans+1],ahmov ah,[data1]adc ah,[data2]mov ans,ahmov ah, 4chint 21h
code endsend start

Debug观察结果是否属实:

可见DS=076A

程序将结束时查看内存内容:

076A:0006即DS:ans,发现从0006到0008的值为10 11 13,符合题意。

3. 计算(V-(X*Y+Z-540))/X,其中X、Y、Z、V均为16位带符号数,假设初始数据分别装入X,Y,Z,V单元,要求将计算的结果放入以ans为首地址的缓冲器区中。

//实验3我的结果有问题,可参考IBM-PC汇编语言程序设计(第2版)P67右下角

参考初始值:

   V:0124H  X :0FE1CH     Y:023FH Z:8230H

核心代码:

X*Y的结果 DX:AX=FFFBCOE4

X*Y+Z-540的结果 DX:AX=FFFC40F8

V-(X*Y+Z-540)的结果0003c02c

最终结果:

商为FFF9(即-7),余数为4F7C

四、实验结果与分析

可见第三部分。

  • 五、实验总结

    1. 既定任务基本完成,除任务1的思考部分。
    2. 任务1填表格部分印象深刻,需要一个个查找标志是什么意思,还要与代码对照理解,进而理解溢出、进位、符号等等功能的作用。

长整数加减法可拆分为短整数有进位加减法,通常一个add下面要跟一个adc X,0,sub也是同理

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com