欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

实验一 多位十六进制加法运算实验

程序员文章站 2022-03-15 14:04:55
...

一. 实验要求

利用Proteus平台,建立8086的多位十六进制加法运算的例子。

二. 实验目的

  1. 熟悉实验系统的编程和使用。
  2. 掌握使用加法类运算指令编程及调试方法。
  3. 掌握加法类指令对状态标志位的影响。

三. 实验说明

由于本实验是三个十六位二进制数相加运算,N4为存放结果,其中N1为1111H,N2为2222H,N3为3333H,所以结果应该为6666H。

四. 实验程序流程图

Created with Raphaël 2.2.0初始化段寄存器将1111H移入AX调用两次ADD,实现1111H+2222H=3333H,3333H+3333H=6666H将AX内的结果移入内存空白处

五. 实验步骤

a.仿真代码

;N4=N1+N2+N3 =1111H+2222H+3333H=6666H 
CODE SEGMENT;表示代码段开始
ASSUME CS:CODE,DS:DATA;CODE对应代码段寄存器,DATA对应数据段寄存器
BEG: 	;必要的,作为程序入口
	MOV AX,DATA;
    MOV DS,AX;借助AX间接将DATA段地址赋值给DS,因为段寄存器只接受通用寄存器数据作为源操作数
    MOV SI,OFFSET NUM1;将NUM1的偏移地址赋值给SI,以便之后间接寻址
    MOV AX,0;将AX清零用来存储加法结果
    ADD AX,[SI+0];将1111H移入AX
    ADD AX,[SI+2];1111H+2222H=3333H
    ADD AX,[SI+4];3333H+3333H=6666H
    MOV [SI+6],AX;将结果存到空余位置
	JMP $;暂停程序
CODE ENDS;表示代码段结束
DATA SEGMENT;数据段,存储各数据
    NUM1 DW 1111H ;N1
    NUM2 DW 2222H ;N2
    NUM3 DW 3333H ;N3
    NUM4 DW 0000H ;N4
DATA ENDS
END BEG

b.调试、验证

在刚运行程序时的内存可以分辨出前面是代码段,隔着四个字的空白内存后是数据段。数据段中可以直接看到1111H、2222H、3333H这三个数据。注意到数据段地址由0020H开始
实验一 多位十六进制加法运算实验

然后把数据段地址赋给了DS。可以看到DS的值为0002H.乘以十即为真实的段地址。这是因为
=10 物理地址=段地址*10
实验一 多位十六进制加法运算实验
将1111H移入AX寄存器
实验一 多位十六进制加法运算实验
对AX加上2222H

实验一 多位十六进制加法运算实验

对AX加上3333H,计算环节结束。

实验一 多位十六进制加法运算实验

六. 实验结果和体会

实验结果展示:最后在内存中便存储了计算结果,为6666H。

实验一 多位十六进制加法运算实验

从这个流程中可以意识到一些汇编编程的思想。待数据往往事先存入数据段中,需要计算时才使用MOV语句移入通用寄存器,结果再写入内存。由于通用寄存器数量有限(4个),且部分寄存器在某些语句上有专门用途(如MUL语句必须用AX)。不可一次将太多数据存入寄存器,因此往往需要进行内存的读取与写入。该点是与使用高级语言进行编程时,对编程者来说不一样的地方。

此外数据段与代码段在代码中的先后顺序无关紧要。且在内存中,数据段和代码段之间还有4个字的空白空间。

七. 扩展题目程序和实验结果

;N4=N1+N2+N3 =11H+22H+33H=66H 
CODE SEGMENT;代码段
ASSUME CS:CODE,DS:DATA;CODE对应代码段寄存器,DATA对应数据段寄存器
BEG: 	MOV AX,DATA
	MOV DS,AX;借助AX间接将DATA段地址赋值给DS,因为段寄存器只接受通用寄存器数据作为源操作数
	MOV SI,OFFSET NUM1;将NUM1的偏移地址移入SI以便访问
        MOV AL,0;初始化AL,该句及下一句可化简成MOV AL,[SI+0]
        ADD AL,[SI+0];加上第一个数
        ADD AL,[SI+1];加上第二个数
        ADD AL,[SI+2];加上第三个数   
        MOV [SI+3],AL;将AL中的结果存入内存
	JMP $;程序暂停
CODE ENDS
DATA SEGMENT
NUM1 DB 11H ;N1。由于是8位数据,使用字节保存
NUM2 DB 22H ;N2
NUM3 DB 33H ;N3
NUM4 DB 00H ;N4
DATA ENDS
	END BEG

结果图片展示:

可以看到AX及内存中存储了计算结果66H

实验一 多位十六进制加法运算实验

实验一 多位十六进制加法运算实验

相关标签: 微机原理实验