技术标签: 汇编
试 题:
实验1 汇编语言的标准格式
实验2 Debug命令学习
实验3 Dos调用
实验4 串操作指令、分支与循环程序设计
实验5 堆栈指令及位操作
实验6 数据传送指令操作
要 求:
独立完成所有实验项目,并记录实验过程,完成实验报告
实验报告(一)
实验项目 |
实验一 汇编语言环境的建立 |
实验人员 |
|
实验性质 |
验证性实验 |
实验内容 |
1.汇编软件环境建立 2.掌握汇编语言程序的编辑、调试、链接、运行操作 |
实验目的 和要求 |
1.掌握汇编软件环境的建立 2.掌握汇编语言程序的编辑、调试、链接、运行操作 |
重点与难点 |
重点:熟悉汇编软件环境的建立、汇编语言程序的调试 难点:汇编语言程序的调试 |
实 验 进 程 实 验 进 程 |
输入命令dir: 录入程序实例: 保存文件并检查程序是否错误: 链接T1.OBJ生成可执行T1.EXE文件: 实验二: 检查环境是否生成: 程序实例二: 修改星号为20个,背景为绿色,星号居中: |
思考题 |
实验报告(二)
实验项目 |
实验 DEBUG的使用 |
实验人员 |
|
实验性质 |
验证性实验 |
实验内容 |
1.汇编软件环境建立 2.掌握汇编语言程序的编辑、调试、链接、运行操作 3.学习debug子命令 |
实验目的 和要求 |
1.掌握汇编软件环境的建立 2.掌握汇编语言程序的编辑、调试、链接、运行操作 3.初步学习debug T,Q, D,R,E,A,U,G字命令。 |
重点与难点 |
重点:熟悉汇编软件环境的建立、汇编语言程序的调试 难点:汇编语言程序的调试 |
实 验 进 程 实 验 进 程 |
修改后: 录入程序: |
思考题 |
实验报告(三)
检查Debug命令学习请况汇编语言实验方案
第5课 2学时
一、目标任务
Mov ax,【0000】
Add ax,【0002】
Mov 【0004】,ax
Retf
3.用AL寄存器计算35H+76H=?观察标志寄存器。若使用AX寄存器结果又是什么?并分析之。
二、实验主要步骤:
1.在DOS的命令行窗口执行命令Debug(进入Debug程序环境,熟悉Debug各个命令的用法。)
输入 程序段
Debug
A
0483:0100 MOV AX,[0000]
0483:0103 ADD AX,[0002]
0483:0107 MOV [0004],AX
0483:010A RETF
输入数据段内容如下:
E DS:0000 23 00 25 00 00 00 00 00 ;两个已知数
T
T
在Debug中编制简单的汇编程序片断,并调试运行,得出结果。
2.步骤
(1)用E命令键入上述机器语言程序和数据段的初值。
—E DS:000 23 25
—E DS:006 2A 2A 2A (2A为*,是为便于查看数据段内容而设置)
—E CS:100 A1 00 00 03 06 02 00
—E CS:107 A3 04 00 CB
(2)用D,U命令检查数据段、代码段内容。
—D DS:0000
—U CS:0100
(3)用T命令逐条执行上述程序,注意观察每条指令执行后相应寄存器的变化,找出计算结果。
(4)用U命令反汇编本程序。(填入程序段)
—U cs:0100
(5)用R命令修改CS和IP的内容为0483:0100重新执行上述程序。
—R IP
0100
—R cs
0483
-T运行程序
查看计算结果 【0004】= 48H
由于用的自己电脑,不是学校电脑,所以这里的-R CS :0483得修改成:073F,否则结果会错。
(7)用Q命令退出程序。
3.用以上方法计算35H+76H=?记录标志寄存器的内容。
AL寄存器 35H+76H=ABH
三.自己试着写段程序,给出结果:
-A16C6:100
16C6:0100 CLD
16C6:0101 MOV di,1000
16c6:0104 MOV cx,010
16c6:0107 MOV ax,55aa
16c6:010a REP STOSW
16C6:010C CLD
16C6:010D MOV SI,100
16C6:0110 MOV DI,2000
16C6:0113 MOV CX,A
16C6: 0115 MOV AX, [SI]
16C6:0117 REP MOVS
16C6:0118
-T
修改IP 及CS 查看目标数据。
实验报告(四)
实验项目 |
串操作指令、分支与循环程序设计 |
实验性质 |
综合性实验 |
实验人员 |
|
实验内容 |
1.串操作 2.数据的输入与输出 3.分支与循环程序设计 |
目的和要求 |
1.掌握常用串操作指令 2.学习提示信息的显示及键盘输入字符的方法。 3.掌握分支程序和循环程序的设计方法。 |
重点与难点 |
重点:串操作指令、DOS常用系统功能调用 难点: 分支与循环程序设计方法 |
实 验 进 程 |
实验内容布置与实施 1.输入以下程序段并运行之,回答后面的问题。 CLD MOV DI,1000 MOV AX,55AA MOV CX,10 REP STOSW 上述程序段执行后:
答:AA 55 AA 55 AA 55 AA 55-AA 55 AA 55 AA 55 AA 55
答:[DI]= 0000,(CX)= 0000,原因:在x86架构中,DI寄存器存储的是数据段偏移量,而CX寄存器存储的是代码段偏移量。所以当程序执行时,DI和CX会被初始化为0。 2.在上题的基础上,再输入以下程序段并依次运行之。 程序段1: Cld MOV SI,1000 MOV DI,2000 MOV CX,12 MOV AX, [SI] REP MOVSB 执行后: 从DS:2000H开始的16个单元的内容是什么? [SI]= ?[DI]= ?并分析之。 答:从DS:2000H开始的16个单元的内容是AA 55 AA 55 AA 55 AA 55-AA 55 00 00 00 00 00 00。[SI]= 0000,[DI]= 0000 程序段2: STD MOV ds[2008],4433 MOV SI,1000 MOV DI,2020 MOV CX,10 MOV AX,DS[2008] REPZ STOSW 查看原地址[SI]和目标地址[DI]的内容?并分析之。 答:输入D DS:1000得AA55... 输入D DS:2020得3344... 分析:MOV DS【2008】,4433的影响。 3.通过下述程序段的输入和执行来熟悉 Debug的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下: datas segment char db '?' datas ends stacks segment db 128 dup(?) stacks ends codes segment assume cs:codes,ds:datas,ss:stacks ;mov cx,5h start: mov ax,datas mov ds,ax mov cx,10h st0: mov ah,0 int 16h mov char,al mov ah,2 mov dl,char int 21h jz st1 loop st0 st1: mov ah,4ch int 21h codes ends end start |
思考题 |
答:0号功能的输入参数是:ds:datas, es:stacks。输出参数是:ax, ax+1。它们分别放在ds和es寄存器中。2号功能与0号功能类似,输入参数是:ds:datas, es:stacks。输出参数是:cx, cx+1。它们分别放在ds和es寄存器中。9号功能与0号功能类似,输入参数是:ds:datas, es:stacks。输出参数是:dx, dx+1。它们分别放在ds和es寄存器中。10号功能与0号功能类似,输入参数是:ds:datas, es:stacks。输出参数是:bx, bx+1。它们分别放在ds和es寄存器中。
答:(1)读取字符或字符串:使用DOS中断服务程序int 16h,将数据从键盘缓冲区读入内存中。具体操作是先设置寄存器cx为要读取的字符数,然后调用int 16h中断,将数据存储在ds:dx指向的内存地址中。 (2)输出字符或字符串:同样使用DOS中断服务程序int 16h,将内存中的字符或字符串输出到屏幕。具体操作是先设置寄存器dx为要输出的内存地址,然后调用int 16h中断,将数据从内存中读取并显示在屏幕上。 |
作业 |
从键盘输入任意一个字符,并把结果显示在屏幕上。 |
课后自我 总结分析 |
汇编语言中的串操作指令主要用于处理字符串数据,如复制、比较、移动等。熟练掌握这些指令对于编写高效的汇编程序至关重要。分支与循环程序设计是汇编语言中的重要组成部分,它们可以实现程序的逻辑控制。通过合理地使用分支和循环指令,可以提高程序的执行效率和可读性。在学习汇编语言时,要注意理解指令的功能和用法,而不仅仅是死记硬背。通过实际编程练习,加深对汇编语言的理解和运用能力。 |
实验报告(五)
实验项目 |
汇编语言程序设计 |
实验性质 |
综合性实验 |
实验人员 |
|
实验内容 |
1. 数据传送指令操作 2. 堆栈指令及位操作 |
目的和要求 |
1.掌握常用传送指令的使用方法 2.了解各种状态标识的意义及指令执行对状态标识的影响 |
重点与难点 |
重点:数据传送指令 难点: 各种指令执行对标志位的影响 |
教 学 进 程 |
实验内容布置与实施 1.把下述指令段变为程序运行,使用Debug,并通过显示器屏幕观察程序的执行情况。练习程序段如下: MOV BL,08 MOV CL,BL MOV AX,0327 MOV BX,AX MOV DS[0020],BX 填写[0020]的内容=2703 2.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下: MOV AX,0102 MOV BX,0304 MOV CX,0506 MOV DX,0708 PUSH AX PUSH BX POP BX POP AX 则: (ax)= 0102 (IP)= 0110 (SP)=FFFB (bx)= 0304 (IP)= 010F (SP)=FFFB 3.补齐程序,填在空格处,上机验证程序: Data SEGMENT BUF DB -51,0A4H,64, -21,72H,0,92H CON=$-BUF ; CON= ___7____。 DATA ENDS CODE SEGMENT ASSUME DE:DATA,CS:CODE START: MOV BX,0 MOV CX,CON MOV DL,0 M: CMP BUF [BX],0 JG N INC DL N: INC BX LOOP M CODE ENDS END START 请问:
(4/5选作一题) 4.指出以下指令执行后,ax寄存器的内容。(每步记录AX) MOV AX, 4321H AX= PUSH AX AX= MOV CL,4 AX= SHL AH, CL AND AL,0FH OR AL, AH MOV BL, AL POP AX SHR AL, CL AND AH, 0F0H ADD AH, AL MOV AL, BL 5.从DS:1000H开始存放有一个字符串”This is a string”,要求把这个字符串从后往前传送到DS:2000H开始的内存区域中(即传送结束后,从DS:2000H开始的内存单元的内容为”gnirts a si sihT”),试编写程序段并上机验证之。 DATA SEGMENT ORG 1000H STRING DB ‘This is a string’ CN DB ($-STRING) DATA ENDS CODE SEGMENT ASSUME DS:DATA, CS:CODE START: MOV AX, DATA MOV DS, AX MOV DI, OFFSET STRING ADD DI, 15 MOV BX, 2000H MOV CL, CN MOV CH, 0 AGAIN: MOV AL, [DI] MOV BYTE PTR[BX], AL INC BX DEC DI LOOP AGAIN MOV AH, 4CH INT 21H CODE ENDS END START |
思考题 |
1.整理出运行正确的各题源程序段和运行结果。 2.写出第4/5题中程序段。 |
作业 |
将实验内容中的1和2题的标准源程序代码写到作业本。 |
课后自我 总结分析 |
1.堆栈指令 PUSH:将一个16位或32位的通用寄存器内容压入堆栈。 POP:从堆栈中弹出一个字的数据到指定的通用寄存器。 PUSHA:将AX、CX、DX、BX、SP和BP的内容依次压入堆栈。 POPA:将堆栈中的内容依次弹出到AX、CX、DX、BX、SP和BP寄存器 2.位操作指令 NOT:对一个字节进行取反操作,即将0变为1,将1变为0。 SHL:对一个字节进行左移操作,左边空出的位用0填充。 SHR:对一个字节进行右移操作,右边空出的位用0填充。 SAR:对一个字节进行算术右移操作,右边空出的位用符号位填充。 |
实验报告(六)
实验项目 |
汇编语言程序设计 |
实验性质 |
综合性实验 |
实验人员 |
|
实验内容 |
1. 数据传送指令操作 2. 堆栈及位操作 |
目的和要求 |
1.掌握常用传送指令的使用方法 2.了解各种状态标识的意义及指令执行对状态标识的影响 |
重点与难点 |
重点: 堆栈指令 难点: 各种指令执行对标志位的影响 |
实 验 进 程 |
实验内容布置与实施 1.用以下程序段将一组数据压入(PUSH)堆栈区,然后通过不同的出栈顺序出栈,观察出栈后数据的变化情况。压栈程序段如下: MOV AX,0102 MOV BX,0304 MOV CX,0506 PUSH AX PUSH BX PUSH CX POP AX POP BX POP CX 则: (ax)=0506 (IP)=010D (SP)=FFF9 (bx)=0304 (IP)=010E (SP)=FFFB (cx)=0102 (IP)=010F (SP)=FFFD 1.设AX寄存器中的内容为1111H,BX寄存器中的内容为2222H,DS:0010H单元中的内容为3333H。将AX寄存器中的内容与BX寄存器中的内容交换,然后再将BX寄存器中的内容与DS:0010H单元中的内容进行交换。试编写以上程序,并上机验证结果。 3. 分析并执行下列指令序列后的结果: MOV AL,10110101B (B5H) AND AL,00011111B (1FH) OR AL,11000000B (C0H) XOR AL,00001111B (0FH) NOT AL (AL)=25H 4.通过下述程序段的输入和执行来熟悉 Debug的使用,并通过显示器屏幕观察程序的执行情况。练习程序段如下: DATA SEGMENT STRING1 DB HAPPY ASM LEN1 EQU $-STRING1 STRING2 DB HAPPYAS LEN2 EQU $-STRING2 MSG1 DB"Match!',0DH,OAH,'$' MSG2 DB ‘No match!',ODH,OAH,'$ DATA ENDS CODE SEGMENT ASSUME CS;CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS, AX MOV ES,AX LEA SI,STRING1 LEA DI,STRING2 MOV CX,LEN1 LENCMP : MOV DX,[LEN2] CMP CX,DX COMPARE: MOV AL,[SI] MOV BL,[DI] CMP AL,BL INC SI INC DI DEC CX JNZ COMPARE MATCHMATCH: LEA DX,MSG1 JMP DISP DISMATCH: LEA DX,MSG2 DISP:MOV AH,09H INT21H MOV AH,4CH INT21H CODE ENDS END START 逐条分析程序,并运行程序填写结果。 屏幕显示 Match! DATA SEGMENT STRING1 DB 'HAPPY ASM' LEN1 EQU $-STRING1 STRING2 DB 'HAPPY ASM' LEN2 EQU $-STRING2 MSG1 DB 'Match!',0DH,0AH,'$' MSG2 DB 'No match!',0DH,0AH,'$' DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX LEA SI,STRING1 LEA DI,STRING2 MOV CX,LEN1 LENCMP: MOV DX,[LEN2] CMP CX,DX JNE DISMATCH COMPARE: MOV AL,[SI] MOV BL,[DI] CMP AL,BL JNE DISMATCH INC SI INC DI DEC CX JNZ COMPARE MATCHMATCH: LEA DX,MSG1 JMP DISP DISMATCH:LEA DX,MSG2 DISP:MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START |
思考题 |
1.整理出运行正确的各题源程序段和运行结果。 2.写出第2题中的程序分析过程。 答:073F:0100 MDV AX,1111: 将AX寄存器的值(即1111)存储到内存地址为0x0100的单元中。073F:0103 MOU BX,2222: 将BX寄存器的值(即2222)存储到内存地址为0x0103的单元中。073F: 0106 MOU DS[ 0010 ] , 3333: 将DS[0010]单元的值(即3333)存储到内存地址为0x0106的单元中。073F: 010C XCHG AX,BX: 将AX寄存器的值与BX寄存器的值交换。073F: 010E XCHG BX,DS[0010]: 将BX寄存器的值与DS[0010]单元的值交换 |
作业 |
|
课后自我 总结分析 |
在进行位操作时,需要注意一些细节。首先,我们需要明确操作的位数和位置,以确保对正确的位进行操作;其次,我们需要了解不同指令之间的区别和用法,以避免出现错误的结果。总的来说,汇编位操作是计算机科学中一个非常基础且重要的知识点。通过学习和掌握位操作,我们可以更好地理解和应用计算机底层的原理和机制,提高程序的效率和灵活性。 |
文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程
文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你
文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_
文章浏览阅读4.7k次,点赞5次,收藏6次。MFC 文本框换行 标签: it mfc 文本框1.将Multiline属性设置为True2.换行是使用"\r\n" (宽字符串为L"\r\n")3.如果需要编辑并且按Enter键换行,还要将 Want Return 设置为 True4.如果需要垂直滚动条的话将Vertical Scroll属性设置为True,需要水平滚动条的话将Horizontal Scroll属性设_c++ mfc同一框内输入二行怎么换行
文章浏览阅读832次。检查Linux是否是否开启所需端口,默认为6379,若未打开,将其开启:以root用户执行iptables -I INPUT -p tcp --dport 6379 -j ACCEPT如果还是未能解决,修改redis.conf,修改主机地址:bind 192.168.85.**;然后使用该配置文件,重新启动Redis服务./redis-server redis.conf..._redis-server doesn't support auth command or ismisconfigured. try
文章浏览阅读4.9k次。济大数电实验报告_数据选择器及其应用
文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件
文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt
文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的
文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法
文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战
文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search