AHU 汇编 实验一

news2024/11/19 9:36:49

一、实验名称:实验1 实验1 用Debug命令查看寄存器和内存中的内容

  • 实验目的:求掌握使用Debug命令查看寄存器和内存的方法。
  1. 通过第2章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用。
  2. 掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤,即编辑、汇编、连接。了解汇编语言的系统工作文件和工作环境。理解汇编程序和连接程序的作用。理解列表文件内容。
  3. 初步了解程序的运行和调试方法。学会使用Debug主要命令和常用的DOS命令。
  • 实验内容:

(1)掌握安装使用汇编语言编译运行环境。

(2)使用Debug命令查看寄存器的值。

(3)使用Debug命令查看内存的内容。

【1】编辑第3章两个简单实例,通过汇编、连接。

【2】用Debug对HELLO程序进行调试。

【3】(1)用A命令从地址0B63:00CH处输入汇编语句:

MOV  AH, 09

INT  21H

MOV  AH,4C

INT  21H

(2)如果用带有断点的G命令显示字符串‘HELLO,WORLD!’,写出命令。

(3)用T命令跟踪程序HELLO.EXE,写出每一步执行后,相关寄存器的内容。

(4)用T命令跟踪程序,在跟踪执行INT 21时出现什么问题,如何解决?进一步说明P命令和T命令的区别。

  • 实验过程:

(1)用-r命令查看,改变CPU寄存器中的内容

(2)用DEBUG中的D命令查看内存中的内容

(3)用DEBUG中的E命令改写内存中的内容

  • 实验小结:

这节课是我们第一次上机写汇编程序,在学习汇编的时候感觉这是一门非常难的语言,汇编牵涉到计算机底层硬件,这对我来说是一个非常大的挑战,在接触汇编语言的时候,对汇编的第一印象就是觉得这种语言非常繁琐和松散,里面有很多细小的知识点,而且有很多规定,必须要根据严格的规则来编写才能够写出正确的程序,但是经过这次上机实验以后初步对汇编语言有了一个大概的了解,相信通过以后的学习未来可以较为熟练地掌握这门语言。

  • 实验名称:

实验二 上机过程及程序调试

  • 实验目的:

1.通过第2章两个简单实例认识汇编语言程序,初步了解程序格式;段定义;标号;DOS系统功能;操作数;指令;说明语句等作用。

2.掌握汇编语言程序从设计到形成可执行程序文件的方法和步骤,即编辑、汇编、连接。了解汇编语言的系统工作文件和工作环境。理解汇编程序和连接程序的作用。理解列表文件内容。

3.初步了解程序的运行和调试方法。学会使用Debug主要命令和常用的DOS 命令。

三、实验内容:

四、实验过程:

(1)单个字符的键盘输入与显示输出

汇编代码

2.对.asm文件进行汇编

3.对.obj文件进行连接,生成.exe文件

4.运行.exe文件

(2)显示字符串

1.编写汇编程序

2.汇编.asm文件为.obj文件

3.连接.obj文件为.exe文件

4.运行.exe文件

五、实验小结:

通过第二个实验,我初步掌握了如何在EDIT里编写汇编的.asm文件,这次实验并未涉及过多如何自主编写代码,而是从0开始模仿书上的例题。学会了如何再将.obj文件连接为可执行文件.exe。汇编语言,是除了机器语言外的最底层的编程语言了。学习这门语言,可以帮助我们更加深入地理解CPU、内存等硬件的工作原理。用机器的思维去操作计算机。汇编语言和机器语言是一一对应的,汇编语言被编译成机器语言,这样的程序执行效率更高在接触汇编语言的时候,对汇编的第一印象就是觉得这门语言非常繁琐和松散,里面有很多小的知识点,而且有很多规定,必须要严格遵守规则才能编写出正确的程序,譬如一些指令的具体作用,如lea指令等,我们应该在不断的实验中加强自己的编写代码的能力,只有不断地实践才能更好的进步。

在接触汇编语言的时候,对汇编的第一印象就是觉得这门语言非常繁琐和松散,里面有很多小的知识点,而且有很多规定,必须要严格遵守规则才能编写出正确的程序,譬如一些指令的具体作用,如lea指令等,我们应该在不断的实验中加强自己的编写代码的能力,只有不断地实践才能更好的进步。

实验三 用不同的寻址方式去显示

源代码:

data segment
  arr dw 1,2,3,4,5,6
data ends
code segment
  assume cs:code,ds:data
start:
   mov ax,data
   mov ds,ax
   mov ax,arr
   mov bx,ax        ;  NO.1   //寄存器寻址
   add bx,30h
   mov dl,bl
   mov ah,2
   int 21h
   mov bx,arr+2  ; every vraite is word type   NO.2   //直接寻址
   add bx,30h
   mov dl,bl
   mov ah,2
   int 21h
   mov si,offset arr+4 ;get arr+4(NO.3) effective address  
   mov bx,[si]//寄存器间接寻址
   add bx,30h
   mov dl,bl
   mov ah,2
   int 21h
   mov bx,[si+2] ;NO.4      //寄存器相对寻址
   add bx,30h
   mov dl,bl
   mov ah,2
   int 21h
   mov bx,4
   mov cx,[si+bx]  ;NO.5    //基址变址寻址
   add cx,30h
   mov dl,cl
   mov ah,2
   int 21h
   mov cx,[si+bx+2]   ;NO.6  //相对基址变址寻址
   add cx,30h
   mov dl,cl
   mov ah,2
   int 21h
   mov ah,4ch
   int 21h
code ends
end start

运行截图:

实验小结:

操作数作为指令的一部分而直接写在指令中,这种操作数称为立即数,这种寻址方式也就称为立即数寻址方式。指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的寻址方式称为寄存器寻址方式。

指令所要的操作数存放在内存中,在指令中直接给出该操作数的有效地址,这种寻址方式为直接寻址方式。操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。

通过本次实验,我初步了解了不同寻址方式的方法和优势,希望在以后的学习中能够强化对不同寻址方法的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505705.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

017-$route、$router

$route、$router 1、$route2、$router 1、$route $route 对象表示当前的路由信息,包含了当前 URL 解析得到的信息。包含当前的路径,参数,query对象等。 使用场景: 获取路由传参:this.$route.query、this.$route.par…

Linux-socket套接字

前言 在当今数字化时代,网络通信作为连接世界的桥梁,成为计算机科学领域中至关重要的一部分。理解网络编程是每一位程序员必备的技能之一,而掌握套接字编程则是深入了解网络通信的关键。本博客将深入讨论套接字编程中的基本概念、常见API以及…

C++指针(五)完结篇

个人主页:PingdiGuo_guo 收录专栏:C干货专栏 前言 相关文章:C指针(一)、C指针(二)、C指针(三)、C指针(四)万字图文详解! 本篇博客是介…

Independent Variable Dependent Variable

自变量(Independent Variable) -----------> 因变量(Dependent Variable) 数据 ----------------------------------------------结果,报告等等

面试宝典-【redis】

目录 1.什么是缓存穿透 ? 怎么解决 ? 2.什么是布隆过滤器 3.什么是缓存击穿 ? 怎么解决 ? 4.什么是缓存雪崩 ? 怎么解决 ? 5.redis做为缓存,mysql数据如何与redis进行同步?(双写) 6.排他锁是如何保证读写、读读互斥的呢? 7.你听说过延…

3月10日

微机原理 1M1000k 1000/5200 200 NMI INTR 主 从 从 8-288 ZF0 100H MOVBX,[DI] 0AA55 基址 寄存器 ENDS SP 指示型和指令行的区别 指令型的语句是可执行的最终产生机器码会上机运行需要CPU去运行 指示型语句是指示如何汇编 数据定义 DB DW 符号定义 EQU 取值 TYPE OF…

Vite:下一代前端开发与构建工具

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

基于鹦鹉优化算法(Parrot optimizer,PO)的无人机三维路径规划(提供MATLAB代码)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行…

鲜为人知的闰年判定大坑

【题目描述】 输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。 提示:简单地判断除以4的余数是不够的。 【题目来源】 刘汝佳《算法竞赛入门经典 第2版》习题1-7 年份(year) 【解析】 一、闰…

多线程多进程处理服务器并发(多进程处理如何解决僵死进程)

目录 1.可循环发送数据的代码 2.改成循环之后每次发现只能处理一个客户端 3.服务器端处理并发问题 3.1 思路 3.2 利用多线程实现并发 ​编辑 3.3 利用多进程实现并发 3.3.1 多进程并发产生的僵死进程问题 ​3.3.2 解决僵死进程问题 1.可循环发送数据的代码 服务器代…

vue 在什么情况下在数据发生改变的时候不会触发视图更新

在 Vue 中,通常数据发生变化时,视图会自动更新。但是,有几种情况可能导致数据变化不会触发视图更新: 1.对象属性的添加或删除: Vue 无法检测到对象属性的添加或删除。因为 Vue 在初始化实例时对属性执行了 getter/se…

【教学类-34-09】20240310华文彩云学号拼图(3*3格子浅灰底图 深灰拼图块)(AI对话大师)

作品展示 背景需求: 制作了两位数的学号3*3格子, 【教学类-34-05】20230523拼图(数字学号0X-长方块拼图-双色深灰浅灰)3*3格子(中班主题《个别化拼图》偏艺术-美术)_灰底白色方块数字怎么制作-CSDN博客文…

PhantomCrawler:一款功能强大的多代理IP网站请求生成工具

关于PhantomCrawler PhantomCrawler是一款功能强大的多代理IP网站请求生成工具,该工具允许广大研究人员通过不同的代理IP地址来模拟与目标Web站点的交互行为。 PhantomCrawler基于Python、requests和BeautifulSoup实现其功能,并提供了一种简单且高效的方…

【Linux】gcc与make、makefile

文章目录 1 gcc/g1.1 预处理1.2 编译1.3 汇编1.4 链接1.4.1 静态链接1.4.2 动态链接 2 make和makefile2.1 依赖关系2.2 依赖方法2.3 伪目标 3 总结 1 gcc/g 当我们创建一个文件,并向里面写入代码,此时,我们该如何使我们的代码能够运行起来呢&…

Delphi 的Read 与Readln 的区别

结合运行窗口,你输入1 2 3 4 这是一行ReadLn在读入时把这四个数当成一行,read(a,b)只读入了前两个数:1 2,就准备读下一行了,下一行输入3,再下一行输入2,所以输出1232; Read是逐个读…

【MySQL 系列】MySQL 语句篇_DQL 语句

DQL(Data Query Language),即数据查询语言,用来查询数据记录。DQL 基本结构由 SELECT FROM、WHERE、JOIN 等子句构成。 DQL 语句并不会改变数据库,而是让数据库将查询结果发送结果集给客户端,返回的结果是一…

IDEA打开项目文件目录不见了

偶尔发生新拉下来的代码,或者旧代码修改了包名,项目名称等,idea左侧project一栏不显示代码的文件目录。例如下面此时不要慌张,不用删除项目重新拉取,通过以下方式解决: 本人尝试能够解决,如果无…

Learn OpenGL 05 变换

万向节死锁 万向节死锁(Gimbal Lock)是用欧拉角定义旋转时,产生的在某一情况下旋转轴重合导致的系统丢失自由度的情况,一种最简单的解决方式是调整三维软件中的旋转轴顺序来避免该情况发生。 也就是说当中间轴旋转至90的时候就会…

Vue+ElementUI启动vue卡死的问题

0 引言 今天&#xff0c;博主在学习vueelementui的时候遇到一个问题&#xff0c;卡了博主很久。 1 问题复现 在vue页面的<template>标签中写入两个<div>标签&#xff0c; <template><div><h1>第一个div标签</h1><el-table></…

vue学习笔记21-组件传递数据_Props

组件与组件之间不是完全独立的&#xff0c;而是有交集的&#xff0c;那就是组件与组件之间是可以传递数据的 传递数据的解决方案就是props 父级&#xff1a; 在父级中引入子集 <template><h3>Parent</h3><Child/> </template><script> i…