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

技术标签: 汇编  

试 题:

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

智能推荐

Linux系统下DNS配置指南_linux 服务器修改网络dns-程序员宅基地

文章浏览阅读548次,点赞10次,收藏6次。Linux系统下DNS配置指南_linux 服务器修改网络dns

Springboot/java/node/python/php基于springboot+vue手机售后管理系统【2024年毕设】-程序员宅基地

文章浏览阅读779次,点赞19次,收藏24次。springboot微信小程序的小疾病问诊服务系统的设计与实现。springboot基于spring的物业管理系统的设计与实现。springboot基于Java的高校学生请假系统。ssm基于Android的购物商场APP设计与实现。springboot基于微信小程序的智慧校园系统。ssm基于Android的英语词典的设计与开发。ssm基于SSM+Vue的学生实践管理平台开发。ssm基于android的企业员工考勤系统。ssm基于web的暗香小店系统的设计与实现。ssm基于Web的高等学校公费医疗管理系统。

css中hover属性的使用技巧_css hover的用法-程序员宅基地

文章浏览阅读2.3w次,点赞15次,收藏63次。hover属性用不同的书写方式,来改变不同关系的元素样式。元素:hover 表示聚焦后改变自己元素:hover 元素 表示聚焦后改变其子元素元素:hover + 元素 表示聚焦后改变其指定的“亲兄弟”(条件是该兄弟元素与其相邻)元素元素:hover ~ 元素 表示聚焦后改变其指定的兄弟元素,两个元素相不相邻都行。示例:.first:hover {color: white;}/* 聚焦我改变自己 */.three:hover .three-son {font-size: 20px._css hover的用法

coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习_pca反向压缩-程序员宅基地

文章浏览阅读6k次,点赞3次,收藏15次。coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习coursera-斯坦福-机器学习-吴恩达-第8周笔记-无监督学习1聚类算法clutering1聚类算法简介2K-means21kmeans的目标函数22随机初始化23选择类别数3考试quiz维数约减 dimensionality reduction1数据压缩2数据可视化3维度约简-主成分分析法PCA1 PCA_pca反向压缩

vim插件安装及常用技巧_bxbx.vim-程序员宅基地

文章浏览阅读5.2k次。一、插件安装Vundle是vim的一个插件管理器, 同时它本身也是vim的一个插件。插件管理器用于方便、快速的安装、删除、Vim更新插件。mkdir -p ~/.vim/bundlegit clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim管理器安装完成后,vim ~/.vimrc命令创建.vimrc文件syntax on" tab宽度和缩进同样设置为4set tabstop=4set softta_bxbx.vim

java.lang.ClassNotFoundException:如何解决-程序员宅基地

文章浏览阅读7.2w次,点赞10次,收藏41次。本文适用于当前面临java.lang.ClassNotFoundException挑战的Java初学者。 它将为您提供此常见Java异常的概述,这是一个示例Java程序,可支持您的学习过程和解决策略。 如果您对与更高级的类加载器相关的问题感兴趣,我建议您复习有关java.lang.NoClassDefFoundError的文章系列,因为这些Java异常密切相关。 java.lang..._java.lang.classnotfoundexception:

随便推点

【全开源】JAVA婚恋相亲红娘牵线系统源码支持微信小程序+微信公众号+H5+APP-程序员宅基地

文章浏览阅读530次,点赞23次,收藏10次。springboot+mybatisplus+mysql 用户端 uniapp(vue语法)管理后台 vue+elementUi。后台服务 springboot+mybatisplus+mysql。一、我们技术使用JAVA后台服务 前后端分离。管理后台 vue+elementUi。用户端 uniapp(vue语法)适配小程序+H5+公众号。私信客服获取演示地址。私信客服获取演示地址。

6.python输入整数年份,判断对应整数年份是否为闰年并输出结果_判断闰年的python程序直接输入一个代表年份的正整数-程序员宅基地

文章浏览阅读3.3k次,点赞3次,收藏5次。# -*- coding: UTF-8 -*-year = int(input("输入一个年份:"))if year % 100 == 0: if year % 400 == 0: print('%d年是闰年' % year) else: print('%d年不是闰年' % year)else: if year % 4 == 0: print('%d年是闰年' % year) else: print('%d_判断闰年的python程序直接输入一个代表年份的正整数

【图像去噪】偏微分方程PDE图像去噪(含SNR)【含Matlab源码 1890期】_pdnet 深度学习 偏微分方程 去噪-程序员宅基地

文章浏览阅读987次,点赞20次,收藏19次。偏微分方程PDE图像去噪(含SNR)完整的代码,方可运行;可提供运行操作视频!适合小白!_pdnet 深度学习 偏微分方程 去噪

Ubuntu18.04安装教程(很详细)_ubuntu18安装-程序员宅基地

文章浏览阅读6.6w次,点赞128次,收藏962次。Ubuntu18.0详尽版安装教程下载Ubuntu18.04下载VMware Workstation安装虚拟机下载Ubuntu18.04官方网站:http://old-releases.ubuntu.com/releases/18.04.4/?_ga=2.44113060.1243545826.1617173008-2055924693.1608557140下载VMware Workstation这个在网上有很多教程下载,这里我就不写了,我用的版本是14 pro。如下图:安装虚拟机1、打开_ubuntu18安装

Android四大组件之Activity--管理方式_android activityrecord中的activitytype-程序员宅基地

文章浏览阅读1.7k次。1. 概览Activity的管理有静态和动态两层涵义: 静态是指Activity的代码组织结构,即Application中声明的Activity的集合,这些Activity被组织在一个APK中,有特定的包名。 在编写应用程序时,Activity对应到用户界面,它定义了用户界面的布局、交互行为、启动方式等,最重要的,是Activity的生命周期函数。 在应用进程看来,只需要按照Android定义的规范,实现生命周期函数的具体逻辑即可,所有的用户界面都遵循同一个规范。 编写完一个应用程序的所有用户界面_android activityrecord中的activitytype

[LINUX]sed查找不包含某个字符串的行,并进行替换_sed不包含字符串-程序员宅基地

文章浏览阅读5.5k次,点赞3次,收藏7次。sed 查找不包含某个特性 sed -i "/src/!s/xxx/bbb/g" xxx将不包含src的行中的xxx替换为bbb_sed不包含字符串

推荐文章

热门文章

相关标签