汇编上机实验-程序员宅基地

技术标签: 汇编  

试 题:

实验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学时

一、目标任务

  1. DEBUG的加载及其常用命令(A、U、R、D、E、T、G、Q)的使用情况。(注意:微机进入DEBUG状态下之后,一切立即数和地址数据均被默认为十六进制数,在输入时数的后面不加后缀“H”。)
  2. 将数据段中的两个数求和,结果保存在数据段中。
    源程序、机器语言程序如下:设X=23  Y=25 求 X+Y=?

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

上述程序段执行后:

  1. 从DS:1000H开始的16个单元的内容是什么?

答:AA 55 AA 55 AA 55 AA 55-AA 55 AA 55 AA 55 AA 55

  1. [DI]= ?(CX)= ?,并解释其原因。

答:[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

思考题

  1. 1、2、9、10号功能的输入输出参数有哪些?分别放在什么寄存器中?

答: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. 总结一下,如何实现字符及字符串的输入输出

答:(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

      请问:

  1. 程序执行后:(DL)=___5____ 。

  1. 若将指令:“JG  N ”改为“JA  N ”, 程序执行后:(DL)=___1___。

(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]单元的值交换

作业

课后自我

总结分析

在进行位操作时,需要注意一些细节。首先,我们需要明确操作的位数和位置,以确保对正确的位进行操作;其次,我们需要了解不同指令之间的区别和用法,以避免出现错误的结果。总的来说,汇编位操作是计算机科学中一个非常基础且重要的知识点。通过学习和掌握位操作,我们可以更好地理解和应用计算机底层的原理和机制,提高程序的效率和灵活性。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/m0_61064631/article/details/137012821

智能推荐

Docker 快速上手学习入门教程_docker菜鸟教程-程序员宅基地

文章浏览阅读2.5w次,点赞6次,收藏50次。官方解释是,docker 容器是机器上的沙盒进程,它与主机上的所有其他进程隔离。所以容器只是操作系统中被隔离开来的一个进程,所谓的容器化,其实也只是对操作系统进行欺骗的一种语法糖。_docker菜鸟教程

电脑技巧:Windows系统原版纯净软件必备的两个网站_msdn我告诉你-程序员宅基地

文章浏览阅读5.7k次,点赞3次,收藏14次。该如何避免的,今天小编给大家推荐两个下载Windows系统官方软件的资源网站,可以杜绝软件捆绑等行为。该站提供了丰富的Windows官方技术资源,比较重要的有MSDN技术资源文档库、官方工具和资源、应用程序、开发人员工具(Visual Studio 、SQLServer等等)、系统镜像、设计人员工具等。总的来说,这两个都是非常优秀的Windows系统镜像资源站,提供了丰富的Windows系统镜像资源,并且保证了资源的纯净和安全性,有需要的朋友可以去了解一下。这个非常实用的资源网站的创建者是国内的一个网友。_msdn我告诉你

vue2封装对话框el-dialog组件_<el-dialog 封装成组件 vue2-程序员宅基地

文章浏览阅读1.2k次。vue2封装对话框el-dialog组件_

MFC 文本框换行_c++ mfc同一框内输入二行怎么换行-程序员宅基地

文章浏览阅读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同一框内输入二行怎么换行

redis-desktop-manager无法连接redis-server的解决方法_redis-server doesn't support auth command or ismis-程序员宅基地

文章浏览阅读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次。济大数电实验报告_数据选择器及其应用

随便推点

灰色预测模型matlab_MATLAB实战|基于灰色预测河南省社会消费品零售总额预测-程序员宅基地

文章浏览阅读236次。1研究内容消费在生产中占据十分重要的地位,是生产的最终目的和动力,是保持省内经济稳定快速发展的核心要素。预测河南省社会消费品零售总额,是进行宏观经济调控和消费体制改变创新的基础,是河南省内人民对美好的全面和谐社会的追求的要求,保持河南省经济稳定和可持续发展具有重要意义。本文建立灰色预测模型,利用MATLAB软件,预测出2019年~2023年河南省社会消费品零售总额预测值分别为21881...._灰色预测模型用什么软件

log4qt-程序员宅基地

文章浏览阅读1.2k次。12.4-在Qt中使用Log4Qt输出Log文件,看这一篇就足够了一、为啥要使用第三方Log库,而不用平台自带的Log库二、Log4j系列库的功能介绍与基本概念三、Log4Qt库的基本介绍四、将Log4qt组装成为一个单独模块五、使用配置文件的方式配置Log4Qt六、使用代码的方式配置Log4Qt七、在Qt工程中引入Log4Qt库模块的方法八、获取示例中的源代码一、为啥要使用第三方Log库,而不用平台自带的Log库首先要说明的是,在平时开发和调试中开发平台自带的“打印输出”已经足够了。但_log4qt

100种思维模型之全局观思维模型-67_计算机中对于全局观的-程序员宅基地

文章浏览阅读786次。全局观思维模型,一个教我们由点到线,由线到面,再由面到体,不断的放大格局去思考问题的思维模型。_计算机中对于全局观的

线程间控制之CountDownLatch和CyclicBarrier使用介绍_countdownluach于cyclicbarrier的用法-程序员宅基地

文章浏览阅读330次。一、CountDownLatch介绍CountDownLatch采用减法计算;是一个同步辅助工具类和CyclicBarrier类功能类似,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。二、CountDownLatch俩种应用场景: 场景一:所有线程在等待开始信号(startSignal.await()),主流程发出开始信号通知,既执行startSignal.countDown()方法后;所有线程才开始执行;每个线程执行完发出做完信号,既执行do..._countdownluach于cyclicbarrier的用法

自动化监控系统Prometheus&Grafana_-自动化监控系统prometheus&grafana实战-程序员宅基地

文章浏览阅读508次。Prometheus 算是一个全能型选手,原生支持容器监控,当然监控传统应用也不是吃干饭的,所以就是容器和非容器他都支持,所有的监控系统都具备这个流程,_-自动化监控系统prometheus&grafana实战

React 组件封装之 Search 搜索_react search-程序员宅基地

文章浏览阅读4.7k次。输入关键字,可以通过键盘的搜索按钮完成搜索功能。_react search