实验一8086计CPU系统寻址方式和汇编语言程序设计

这篇具有很好参考价值的文章主要介绍了实验一8086计CPU系统寻址方式和汇编语言程序设计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

实验一8086计CPU系统寻址方式和汇编语言程序设

一、实验目的

(1)掌握8086CPU系统的逻辑地址和寻址方式。

(2)掌握8086CPU系统中机器数的表示方式。

(3)掌握指令的机器码表示方法。

(4)掌握堆栈的概念和操作过程。

(5)掌握集成开发环境下的程序设计和调试方法。

(6)掌握汇编语言实现具体算法的方式,区分汇编语言与高级语言的编程风格。

二、实验内容

●1. 汇编语言程序设计过程和调试实验

执行汇编源程序的编辑、编译和链接操作,并完成调试内容,掌握汇编语言程序设计的基本方法和技巧。

下面的汇编语言源程序实现了将16位(双字节)数据存入寄存器,进行寄存器和内存单元之间的数据传送,并将寄存器CX的数据送入栈内,再从栈内取出送人寄存器DX。程序流程图(即描述程序执行的过程)如图5.1所示,代码如下:

行号 代码

1 CODE SEGMENT

2 ASSUME CS:CODE

3 START: MOV AX ,8086H

4 MOV BX, 6800H

5 MOV SI,8H

6 MOV DS:[000BH],AX

7 MOV ES:[6808H],SI

8 ADD AX,SI .

9 MOV BX,[S1+3]

10 MOV CX. ES:[BX+ SI]

11 PUSH CX

12 MOV BX,0

13 MOV CX,3[BX][SI]

14 POP DX,

15 L1: JMP L1

16 CODE ENDS

17 END START

调试过程包括“单步调试”和“设置断点”两种,具体调试内容如下:

(1)单步调试:在TPC-USB集成开发环境的调试状态下,采用“单步执行”操作调试上述源程序中的每条汇编指令,观察执行过程,实时记录并描述每条指令运行后相关寄存器(如AX、BX、CX、DX)、内存(包括数据段.代码段、附加段、堆栈段)的变化情况以及所采用的寻址方式。

例如:1 MOV AX,8086H AX:0000H-→8086H 源操作数立即寻址方式和目标操作数寄存器寻址方式

2 MOV BX, 6800H BX:8FEAH→6800H 源操作数立即寻址方式和目标操作数寄存器寻址方式

3. MOV SI,8H SI:0100H→8H 源操作数立即寻址方式和目标操作数寄存器寻址方式

4 MOV DS:[000BH],AX DS:[000BH]: 3802H→8086H 源操作数寄存器寻址方式和目标操作数直接寻址方式

5 MOV ES:[6808H],SI ES:[6808H]:06C6H→8H 源操作数寄存器寻址方式和目标操作数直接寻址方式

6 ADD AX,SI AX:8086H→808EH 源操作数寄存器寻址方式和目标操作数寄存器寻址方式

7 MOV BX,[SI+ 3] BX: 6800H→8086H 源操作数寄存器相对寻址方式和目标操作数寄存器寻址方式

8 MOV CX, ES:[BX+SI] CX:0000H→6620H 源操作数基址加变址寻址方式和目标操作数寄存器寻址方式

9 PUSH CX SP:FFFEH→FFFCH 目标操作数寄存器寻址方式

10 MOV BX,0 BX: 8086H→0H 源操作数立即寻址方式和目标操作数寄存器寻址方式

11 MOV CX ,3[BX][SI] CX:6620H→8086H 源操作数相对的基址加变址方式和目标操作数寄存器寻址方式

12 POP DX SP:FFFCH→FFFEH DX:2002H→6620H 目标操作数寄存器寻址方式

注意:只记录变化的寄存器和内存单元。

  1. 设置断点。在TPC-USB集成开发环境的调试状态下,在上述源程序的第10行语句处“设置断点”。首先,执行“连续执行”操作到断点处,记录此时堆栈段的栈底数据,以及寄存器SS、SP、CX和DX的实时数据情况;然后,执行“单步执行”操作,运行当前PUSH CX指令,记录并描述运行指令后堆栈窗口栈底数据的变化情况,以及寄存器SS、SP、CX和DX是否有变化;最后,再次执行“单步执行”操作,运行当前POP DX指令,记录并描述运行指令后堆栈窗口栈底数据的变化情况,以及寄存器SS、SP、CX和DX是否有变化,总结并描述8086CPU栈操作的过程。

图1.1 执行到第10行时栈底数据

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.2 执行到第10行时寄存器数据

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.3 执行PUSH后栈底数据

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.4 执行PUSH后寄存器数据

通过图1.3和图1.4,我们可以得出执行完PUSH指令后,堆栈窗口由0FE6:FFFE变为了0FE6:FFFC,内容也有FF FF变为了20 66 FF FF,寄存器SS,CX,DX没有变化,SP由FFFE变为了FFFC。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.5 执行POP后栈底数据

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.6 执行POP后寄存器数据

通过图1.3和图1.4,我们可以得出执行完POP指令后,堆栈窗口由0FE6:FFFC变为了0FE6:FFFE,内容也由20 66 FF FF变为了FF FF,寄存器SS,CX没有变化,SP由FFFC变为了FFFE,DX变为了6620H。

通过对比图1.4和图1.6我们可以得到8086CPU栈操作的过程是在PUSH指令时SP地址先减2,然后高字节存入高地址,低字节存入低地址,在POP指令时,先将SP和SP+1的内容弹入到应存放的寄存器,再进行SP地址加2。

  1. 查看反汇编结果。切换至“反汇编"显示窗口,查看每条指令的机器码表示方法(包括操作码和操作数),记录反汇编结果并分析上述源程序的反汇编结束指令语句和末地址;记录并描述上述源程序第3行(MOV AX ,8086H)、第9行(MOV BX,[SI + 3])语句中的操作码和操作数。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.7 反汇编结果

根据图1.7,我们可以看出反汇编结束指令语句为POP BX,结束地址为0FE88H,第3行的操作码为B8,操作数为8680,第9行的操作码为8B,操作数为5C03。

  1. 将第3行(MOV AX ,8086H)、第4行(MOV BX , 6800H)语句中8086H和6800H分别修改为8086和6800,然后重新进行编译和链接操作,采用“单步执行”操作这两句指令,记录并描述寄存器窗口中AX和BX的变化,总结并描述8086CPU机器数的表示方式及双字节数在寄存器中的存放规律。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.8 AX中的变化

实验一8086计CPU系统寻址方式和汇编语言程序设计

图1.9 BX中的变化

由图1.8和图1.9可以看出将第3行(MOV AX ,8086H)、第4行(MOV BX , 6800H)语句中8086H和6800H分别修改为8086和6800后,AX变为了1F96H,BX变为了1A90H,由此可以看出8086CPU机器数的表示方式为以16进制数表示,双字节数在寄存器的存放规律为高字节存放在高地址,低字节存放在低地址。

●2. 编程设计实验(一)

内存中现有X和Y两个存储单元,分别存有42和-43,利用汇编语言编程计算这两个数之和,并将结果放入SUM存储单元。

实验操作及调试步骤如下:

(1)在TPC-USB环境中根据编程设计任务完成汇编源程序的编辑、编译和链接操作,生成可执行文件。

(2)在调试状态下应用“单步执行”或“设置断点”操作进行调试。结合程序调试过程自行设计调试方案。记录源程序在内存(包括数据段和代码段)中的位置、大小,以及数据段存储单元中数据的变化情况,并描述机器数在内存(数据段)中的存放规律以及有符号数在内存中的表示形式。

注意:①位置是指源程序的数据段和代码段在内存中存放的开始地址到结束地址的逻辑地址及范围(数据段或代码段的段地址:开始地址~ 结束地址)。

②大小是指所占内存的字节(或存储单元)个数。

代码:

DATA SEGMENT

X DB 42

Y DB -43

SUM DB 00H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV BL,X

ADD BL,Y

MOV SUM,BL

MOV AH,4CH

INT 21H

CODE ENDS

END START

我们进行单步调试,当执行完MOV BL,X后,BL中的内存变化如图2.1所示,我们可以看出执行后BL变为了2AH,即42。执行ADD BL,Y后我们可以由图2.2看出,BL变为了0FFH,即-1。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图2.1 执行MOV BL,X后

实验一8086计CPU系统寻址方式和汇编语言程序设计

图2.2 执行ADD BL,Y后

将断点设置在第12行,即MOV SUM,BL,我们查看此时的内存如图2.3所示,X和Y两个存储单元分别存放在0FE6:0000H和0FE6:0001H中,SUM存储在0FE6:0002H,当执行单步执行后,其内存存储情况变化如图2.4所示,我们可以看到SUM中存储了X和Y中存的数之和,由00H变为了0FFH,即-1,数据段存储的位置为从0FE6:0000H~0FE6:0002H,大小为3字节,同时SUM中存储的数为0FFH,我们可以得出有符号数在内存中的表示形式为补码。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图2.3 执行MOV SUM,BL前的内存存储情况

实验一8086计CPU系统寻址方式和汇编语言程序设计

图2.4 执行MOV SUM,BL后的内存存储情况

实验一8086计CPU系统寻址方式和汇编语言程序设计

图2.5 代码段存储情况

打开反汇编,我们根据图2.5,从中可以从中读出代码段的存储位置为从0FE70H~0FE96H,大小为27字节。

●3. 编程设计实验(二)

数据段中的一个存储单元X中存放的数据为10H,编程实现将该存储单元中的数据循环左移四位后存放到数据段的另一个存储单元Y中。

实验操作及调试步骤如下:

(1)在TPC-USB环境中根据编程设计任务完成汇编源程序的编辑、编译和链接操作,生成可执行文件。

(2)结合程序调试过程自行设计调试方案,记录源程序在内存(包括数据段和代码段)中的位置、大小,以及数据段存储单元中数据的变化情况,并描述循环左移操作的实现过程。

代码:

DATA SEGMENT

X DB 10H

Y DB 00H

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE, DS:DATA

START: MOV AX,DATA

MOV DS,AX

MOV BL,X

MOV CL,4

ROL BL,CL

MOV Y,BL

MOV AH,4CH

INT 21H

CODE ENDS

END START

我们进行单步调试,当执行完MOV BL,X后,BL中的内存变化如图3.1所示,我们可以看出执行后BL变为了10H。执行MOV CL,4后我们可以由图3.2看出,CL变为了4H。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图3.1 执行MOV BL,X后

实验一8086计CPU系统寻址方式和汇编语言程序设计

图3.2 执行MOV CL,4后

实验一8086计CPU系统寻址方式和汇编语言程序设计

图3.3 执行ROL BL,CL指令前

实验一8086计CPU系统寻址方式和汇编语言程序设计

图3.4 执行ROL BL,CL指令后

通过对比图3.3和图3.4,我们可以看出在执行ROL BL,CL后,BL由10H变为了01H,FLAGS的低字节也由02H变为了03H,我们从中可以看出循环左移四次后,是以二级制数进行左移,并且将移出的最高位移动到数的最后一位,并同时移动到FLAGS中的CF位,移动的示意图如图3.5所示。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图3.6 执行MOV Y,BL后内存变化情况

根据图3.6,我们可以得出存储单元X,Y分别存放在0FE6:0000H和0FE6:0001H,大小为2字节。执行MOV Y,BL后Y中的内容变为了01H。

实验一8086计CPU系统寻址方式和汇编语言程序设计

图3.7 代码段存储情况

打开反汇编,我们根据图3.7,从中可以从中读出代码段的存储位置为从0FE70H~0FE95H,大小为26字节。文章来源地址https://www.toymoban.com/news/detail-421838.html

到了这里,关于实验一8086计CPU系统寻址方式和汇编语言程序设计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    南京邮电大学汇编语言程序设计实验一(汇编语言语法练习与代码转换)

    排除语法错误:给出的是一个通过比较法完成8位二进制数转换成十进制数送屏幕显示功能的汇编语言源程序,但有很多语法错误。要求实验者按照原样对源程序进行编辑,汇编后,根据TASM给出的信息对源程序进行修改,知道没有语法错误为止。然后进行链接,并执行相应可

    2024年02月08日
    浏览(13)
  • <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    <微机原理>[汇编语言]-[实验八]矩阵键盘应用实验

    实验八 矩阵键盘应用实验.doc 掌握矩阵式键盘识别技术 进一步掌握数码管显示原理 Keil5 普中A2开发板 stc-isp 用单片机的并行口P1接矩阵键盘,在数码管上显示每个按键的“0—F”序号。对应的按键的序号排列如图所示: 使用EQU伪指令重新命名R0为KEY_VALUE方便代码后续的理解。

    2024年02月10日
    浏览(10)
  • 汇编语言:矩阵式键盘扫描实验

    汇编语言:矩阵式键盘扫描实验

    利用4x4矩阵键盘和一个LED数码管构成简单的输入显示系统,实现对键盘的扫描和LED数码管的显示键盘按下键的键号。共有4x4个按键和一个数码管,16个按键的键号分别对应十六进制数字:0~F。单机相应按键,数码管就会显示相应的数字。 数码管:这里采用共阳极数码管 CA为共

    2024年02月11日
    浏览(49)
  • <微机原理>[汇编语言]-[实验七]数码管动态显示实验

    <微机原理>[汇编语言]-[实验七]数码管动态显示实验

    实验一 软件开发环境和简单程序设计 实验二 I_O输入输出实验 实验三 键盘扫描显示实验 实验四 中断实验 实验五 定时器实验 实验六 串行口实验 实验七 数码管动态显示实验 实验八 矩阵键盘应用实验 实验九 电子时钟 微机原理实验课程,会陆续根据目录更新文章 掌握LED八段

    2024年02月07日
    浏览(11)
  • 《汇编语言》王爽(第四版)第八章 实验7

    《汇编语言》王爽(第四版)第八章 实验7

    文章目录 前言 一、题目 二、分析 1.内存分配情况 2.数据结构分析 3.实现思路 (1)设置段寄存器 (2)复制“年份”数据 (3)复制“年总收入”数据 (4)复制“雇员人数”数据 (5)计算“人均收入” 三、代码 1.实现代码 2.优化代码 3.最终代码 总结 王爽老师《汇编语言》

    2024年02月04日
    浏览(16)
  • 《汇编语言》王爽(第四版) 第十章 实验10

    文章目录 前言 一、子程序1 显示字符串 1.实验任务 2.分析 (1)如何在指定位置显示 (2)如何显示指定颜色 (3)保存子程序中用到的寄存器 3.代码 二、子程序2 解决除法溢出的问题 1.实验任务 2.代码 三、子程序3 数值显示 1.实验任务 2.显示一个word型数据的代码 总结 本文是

    2024年02月08日
    浏览(9)
  • 汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

    汇编实验4(99乘法表,整数分解,素数环,迷宫问题)【栈传参,递归,寻址方式】

    目录 一、99乘法表 汇编代码 效果 二、整数拆分 问题描述 c代码 汇编代码 效果 三、素数环 问题描述 c代码 效果 四、迷宫问题 问题描述 c代码 汇编代码 效果 汇编代码 效果 貌似有点问题,忘了把运算结果加上...... 问题描述 问题描述 输入一个N,输出所有拆分的方式。 如

    2023年04月09日
    浏览(15)
  • 【汇编语言与微机原理】实验五:键盘按键与数码管显示

    熟悉星研集成开发环境,掌握微机接口程序编写调试的基本方法。 掌握矩阵式键盘工作原理及识别按键的方法。 掌握8段数码管显示数字或字符的工作原理和它的使用方法。 掌握用8255扫描键盘及用8255刷新数码管的显示方法。 在2*8(看 着像4*4,实际上是2*8 )的小键盘上按下

    2024年02月16日
    浏览(13)
  • 南京邮电大学汇编语言程序设计实验二(用户登录验证程序的设计)

    1.掌握循环程序的编写以及结束循环的方法。 2.掌握DOS、BIOS功能调用的使用方法。 用户登录验证程序的实现 程序执行后,给出提示操作,请用户键入用户名和密码;用户在键入密码时,程序不回显键入字符;只有当用户键入的用户名,密码字符串和程序内定的字符串相同时

    2023年04月18日
    浏览(15)
  • 汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计

    汇编语言实验8:BIOS/DOS功能调用与宏指令程序设计

    掌握汇编语言程序设计的基本方法和技能 掌握汇编语言源程序的编辑汇编连接和执行的完整过程 通过上机操作理解宏定义、宏调用、宏展开的概念,熟练运用宏功能编写程序 掌握BIOS/DOS基础功能的实现调用方法 理解常用的DOS功能调用的基本使用,能熟练运用1号,2号,9号,

    2024年02月03日
    浏览(14)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包