文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言实验

汇编语言实验

实验四屏幕字符显示程序

实验目的:

通过实验掌握下列知识:

1、8088指令: JMP,ROR,XOR,HLT。

2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。

3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。

4、IBM-PC机的ASCII码表及控制字符。

5、命令(。COM)文件及使用方法。

6、利用^Break退出程序的方法及局限性。

实验内容及步骤:

一、利用INT 21 0AH号功能调用显示字符串。

1、用A命令在100H处键入下列程序:

MOV AH, 9

MOV DX,110

INT 21

INT 20

2、用A命令在110H处键入下列字符串的ASCII码:

DB 'This is a sample!$'

3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。

4、用Q命令退出DEBUG。

5、在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。

二、利用INT 21H 2号功能显示字符:

1、用A命令在100H处键入下列程序:

XOR DL,DL

MOVCX,100

LOP:MOV AH,2

INT 21

INC DL

PUSH CX

MOV CX,8

DELY: PUSH CX

MOV CX,0

J: LOOP J

POP CX

LOOP DELY

POP CX

LOOP LOP

INT 20

2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同?

3、按CTRL+BREAK退出此程序,若一次不行可多做几次。

三、直接向VRAM送ASCII码显示字符

1、用A命令在100H处键入下列程序:

MOV AX,B000

MOV DS,AX

XOR AL,AL

XOR BX,BX

MOV CX,100

LOP: MOV [BX],AL

INC BX

INC AL

PUSH CX

MOV CX,8

DELY: PUSH CX

MOV CX,0

J: LOOP J

POP CX

LOOP DELY

POP CX

LOOP LOP

INT 20

2、用N命令和W命令将此程序存入https://www.wendangku.net/doc/155745506.html,文件中。(一定要先存入!)

3、用G命令运行此程序,仔细观察每一个ASCII码显示结果,并和字符表及上一道程序运行情况进行对照,其控制字符区(07-0DH)显示结果和INT 21H2号功能调用有何不同?

四。自编一个程序,要求显示AX的内容,即能显示AX=xxxx。调试时AX的内容可用R命令赋值,也可用MOV指令赋值。

实验报告要求:

1、各项实验记录及观察体会。

2、利用INT 21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同?

3、自编程序草稿及调试结果。

实验七分枝程序

实验目的:

1、掌握利用间接转移指令JMP BX实现多岔分枝的方法。

2、宏替换指令MACRO及ENDM。

3、符号扩展指令CBW。

实验程序:

disp macro msg

lea dx,msg

mov ah,9

int 21h

mov ah,4ch

int 21h

endm

stack segment stack

db 256 dup(0)

stack ends

data segment

parm db 16 dup(?)

brtable dw offset bra,offset brb,offset brc dw offset brd,offset bre,offset brf

msga db 'I like my IBM-PC!$'

msgb db 'How are you!$'

msgc db 'Nibao College$'

msgd db 'This is a sample$'

msge db 'Wellcome use my coputer!$' msgf db 'Theassemder language of 8088$' errms db 'Error!! invalid parameter!!$' data ends

code segment

assume cs:code,ds:data,ss:stack

start: mov ax,data

mov es,ax

mov si,80h

lea di,parm

mov cx,16

cld

rep movsb

mov ds,ax

cmp parm,2

jc err

mov al,parm+2

sub al,30h

jc err

cmp al,6

jnc err

lea bx,brtable

cbw

add ax,ax

add bx,ax

jmp [bx]

err: disp errms

bra: disp msga

brb: disp msgb

brc: disp msgc

brd: disp msgd

bre: disp msge

brf: disp msgf

code ends

end start

实验步骤:

1、输入并汇编此程序。要求生成一个.LST文件。用TYPE命令检查.LST文件,观察宏替换命令产生的指令集。

2、将OBJ文件连接成EXE文件(假设为AA。EXE)。

3、用命令DEBUG AA.EXE XXX (XXX为任意字符串)将AA.EXE带参数调入DEBUG用D命令观察DS:0080处的命令行,记录80H处的内容和字符个数的关糸。

4、退出DEBUG。直接带参数运行此程序:

AA n(n=0--5)

依次观察并记录n从0到5时的运行结果。

实验六汇编语言程序上机过程

实验目的:

1、掌握常用工具软件PE,MASM和LINK的使用。

2、伪指令: SEGMENT,ENDS,ASSUME,END,OFFSET,DUP。

3、利用的1号功能实现键盘输入的方法。

4、了解.EXE文件和.COM文件的区别及用INT 21H 4C号功能返回系统的方法。

程序:

data segment

message db 'This is a sample program of keyboard and disply'

db 0dh,0ah,'Please strike the key!',0dh,0ah,'$'

data ends

stack segment para stack 'stack'

db 50 dup(?)

stack ends

code segment

assume cs:code,ds:data,ss:stack

start: mov ax,data

mov ds,ax

mov dx,offset message

mov ah,9

int 21h

again: mov ah,1

int 21h

cmp al,1bh

je exit

cmp al,61h

jc nd

cmp al,7ah

ja nd

and al,11011111b

nd: mov dl,al

mov ah,2

int 21h

jmp again

exit: mov ah,4ch

int 21h

code ends

end start

实验步骤:

1、用用文字编辑工具(记事本或EDIT)将源程序输入,其扩展名为.ASM。

2、用MASM对源文件进行汇编,产生.OBJ文件和.LST文件。若汇编时提示有错,用文字编辑工具修改源程序后重新汇编,直至通过。

3、用TYPE命令显示1产生的.LST文件。

4、用LINK将.OBJ文件连接成可执行的.EXE文件。

5、在DOS状态下运行LINK产生的。EXE文件。即在屏幕上显示标题并提示你按键。每按一键在屏幕上显示二个相同的字符,但小写字母被改成大写。按ESC键可返回DOS。若未出现预期结果,用DEBUG检查程序。

实验报告:

1、汇编,连接及调试时产生的错误,其原因及解决办法。

2、思考:

1)若在源程序中把INT 21H的'H'省去,会产生什么现象?

2)把INT 21H 4CH号功能改为INT 20H,行不行?

计算机组成原理实验1-汇编语言实验

微处理器与接口技术 实验指导

实验一监控程序与汇编语言程序设计实验 一、实验要求 1、实验之前认真预习,明确实验的目的和具体实验内容,设计好主要的待实验的程序,做好实验之前的必要准备。 2、想好实验的操作步骤,明确通过实验到底可以学习哪些知识,想一想怎么样有意识地提高教学实验的真正效果。 3、在教学实验过程中,要爱护教学实验设备,认真记录和仔细分析遇到的现象与问题,找出解决问题的办法,有意识地提高自己创新思维能力。 4、实验之后认真写出实验报告,重点在于预习时准备的内容,实验数据,实验过程、遇到的现象和解决问题的办法,自己的收获体会,对改进教学实验安排的建议等。善于总结和发现问题,写好实验报告是培养实际工作能力非常重要的一个环节,应给以足够的重视。 二、实验目的 【1】学习和了解TEC-XP16教学实验系统监控命令的用法; 【2】学习和了解TEC-XP16教学实验系统的指令系统;

【3】学习简单的TEC-XP16教学实验系统汇编程序设计。 三、实验注意事项 (一)实验箱检查 【1】连接电源线和通讯线前TEC-XP16实验系统的电源开关一定要处于断开状态,否则可能会对TEC-XP16实验系统上的芯片和PC机的串口造成损害。 【2】五位控制开关的功能示意图如下: 【3】几种常用的工作方式【开关拨到上方表示为1,拨到下方为0】 (二)软件操作注意事项 【1】用户在选择串口时,选定的是PC机的串口1或串口2,而不是TEC-XP16实验系统上的串口。即选定的是用户实验时通讯线接的PC机的端口; 【2】如果在运行到第五步时没有出现应该出现的界面,用户需要检查是不是打开了两个软件界面,若是,关掉其中一个再试; 【3】有时若TEC-XP16实验系统不通讯,也可以重新启动软件或是重新启动PC再试; 【4】在打开该应用软件时,其它的同样会用到该串口的应用软件要先关掉。

汇编语言程序设计实验教程第二章实验报告

汇编语言程序设计实验教程第二章 实验报告

实验2.1 用表格形式显示字符 1.题目:用表格形式显示ASCII字符SMASCII 2.实验要求: 按15行*16列的表格形式显示ASCII码为10H-100H的所有字符,即以行为主的顺序及ASCII码递增的次序依次显示对应的字符。每16个字符为一行,每行中的相邻两个字符之间用空白符(ASCII为0)隔开。 3.提示: (1)显示每个字符可使用功能号为02的显示输出功能调用,使用方法如下:mov ah,02h mov dl,输出字符的ASCII码 int 21h (2)显示空白符时,用其ASCII码0置入dl寄存器。每行结束时,用显示回车(ASCII 为0dh)和换行符(ASCII为0ah)来结束本行并开始下一行。 (3)由于逐个显示相继的ASCII字符时,需要保存并不断修改dl寄存器的内容,而显示空白、回车、换行符时也需要使用dl寄存器,为此可使用堆栈来保存相继的ASCII字符。具体做法是:在显示空白或回车、换行符前用指令 push dx 把dl的内容保存到堆栈中去。在显示空白或回车、换行符后用指令 pop dx 恢复dl寄存器的原始内容。 4.程序清单: code segment assume cs:code start: mov dx,0010h next: mov cx,10h loop1: mov ah,02h int 21h inc dx push dx

int 21h pop dx loop loop1 push dx mov dl,0ah int 21h mov dl,0dh int 21h pop dx cmp dx,100h jb next mov ah,4ch int 21h code ends end start 5.运行结果如下: 6.实验总结: 通过本次实验我深刻的知道用汇编语言编译程序的方法,掌握了如何合理的利用各个寄存器进行程序的控制操作,初步了解到循环程序的控制方法,以及dos中断调用的基本要领对学习汇编语言有了非常好的帮助作用! 汇编语言实验二查找匹配字符串 一、目的 查找匹配字符串SEARCH

实验四-循环结构汇编语言程序的设计实验报告

循环结构汇编语言程序设计实验报告

实验四循环结构汇编语言程序设计 一、实验目的 1、学习循环结构的汇编语言程序的设计和调试。 2、学习通过直接对8086计算机的寄存器和存的直接访问,编写更高效简洁的汇编程序。 3、加深掌握计算机整体的工作过程。 3、加深对排序算法的理解。 二、实验任务 编写程序求出数组A中(20个元素)的最大值和最小值(数组没有排序)。 要求至少采用二种不同的排序算法来实现。( 快速排序,归并排序、堆排序、Shell排序、插入排序、冒泡排序、交换排序、选择排序、基数排序……) 三、实验容 为了更好地实现老师所布置的实验任务,我们根据情况选取以下两种方式实

验。 1、利用冒泡排序的方式求解数组A中元素的最大值最小值。设计流程图如 下所示: 2、利用选择排序的方式求得数组A中元素的序列。设计流程图如下所示:

四、实验环境 PC机: winXP/win7(32位)/win7(64位)+winxp 虚拟机 汇编工具:Masm.exe+Link.exe。 五、实验步骤 1)建立和生成的文件 (1)编写的源程序,源程序名为abc、扩展名为.asm (2)源程序经汇编程序Masm.exe汇编(翻译)后生成二进制目标程序,文件名为abc.obj (3)目标程序需要经Link.exe连接生成可执行程序,文件名为abc.exe 2)汇编环境 最基本的汇编环境只需要两个文件:Masm.exe和Link.exe。将这两个文件拷入到已经建好的文件夹(例如 huibian)中,并将文件夹huibian放在硬盘根

目录C :\>下 3)上机步骤 进入DOS窗口中执行。 4)调试程序 进入DEBUG后,调试程序 5)调试成功后重新汇编、连接并生成可执行代码 6)执行程序,并对运行结果截图。 利用冒泡排序求得数组A中元素的最大值最小值的实验结果如下图所示:(说明:输入数据为:13,0,59,900,587,1,657,234,34,48) 利用选择排序对数组A中元素排序得到的序列得实验结果如下图所示:(说明:输入数据为13,0,59,900,587,1,657,234,34,48)

实验1_认识汇编语言

实验一 认识汇编语言 1.1 实验目的 (1)理解汇编语言的概念及其与高级语言的区别 (2)了解MASM6.11和TASM软件包的安装及配置 (3)了解常用汇编语言集成环境 (4)掌握汇编语言程序的上机过程 1.2 预备知识 1.2.1 系统环境 对汇编语言的初学者来说,DOS环境的优点是:DOS操作系统简单,程序员可以管理系统的所有资源,访问和修改系统中的所有内存(包括内存控制块、中断向量表),直接对I/O端口进行读写,便于对知识的学习和理解。其缺点是:单任务的DOS操作系统只有一个运行级别,任何进程与DOS操作系统都是同等级别的,致使系统中各个进程会相互影响。如果某个进程死机,整个系统就会瘫痪。 但是DOS系统已经退出历史舞台,目前的学生只熟悉Windows环境而对DOS知之甚少,继续要求学生在DOS系统的命令行界面下编写和调试程序,无疑存在巨大的困难。 目前,IBM PC及其兼容机配置的Intel系列微处理器可以工作在实模式、保护模式和虚拟86三种模式下。实模式是汇编语言入门的基础,是汇编语言教学中无法跨越的阶段。了解实模式是理解内存分段式管理和寻址方式的基础。保护模式是Windows系统的工作模式,虚拟86模式则是在保护模式下提供的模拟8086处理器工作的模式,为学习汇编语言提供了便利。DOS汇编程序在Win32环境中运行时,操作系统会模拟实模式运行16位进程。对于一些可能会影响整个操作系统工作的指令,windows操作系统会拒绝执行。64位的Windows 环境则不提供16位应用的虚拟环境。 因此,采用Win32环境进行汇编语言程序的编辑工作,在虚拟控制台环境中学习(汇编、连接和调试)汇编语言是最佳方案。下面我们将逐步给大家讲解如何安装和配置汇编语言的编译调试环境,并选择适合的编辑软件来组建汇编语言的集成环境。最后,叙述如何使用Visual Studio 2008 Express作为汇编语言的工作环境。 1.2.2 汇编语言上机过程 汇编语言程序需要经过编辑、汇编、连接、调试与执行等过程才能实现其具体功能。图1-1说明了汇编语言的上机过程。 第一步:编辑 使用编辑软件创建和编写汇编语言源文件,并以 .asm 作为文件名后缀。 第二步:汇编 使用汇编程序将源程序翻译成机器码形式的文件,以 .obj 为后缀的目标程序。汇编包括把源程序翻译成目标代码,并产生中间的.OBJ文件或模块。汇编程序的任务是为数据段中的每个数据项和代码段中的每条指令计算偏移值,并在所产生的.OBJ模块的前面直接建立一个头部来存储不确定的地址信息。在汇编时可以选择产生列表文件(.LST)和交叉引用文件(.CRF)。列表文件含有出错诊断信息,可以用来帮助检查源程序中的错误。交叉引用文件在编写大型程序时可以提供指令引用的数据项列表。 第三步:连接 使用连接程序完成对于目标程序的装配工作,生成可执行程序,以.exe或者.com为后缀的执行文件。连接程序的任务包括确定由汇编程序遗留下来的不确定的地址,并把分别汇

汇编语言实验2

计算机工程系实验报告 课程名称:汇编语言 实验项目名称:用机器指令和汇编语言指令编程 班级:15级计科4班姓名:梁红梅学号:15091413 一、实验目的: 1.学习Debug中D命令的使用方法,掌握查看指定内存单元的内容的指令,其中本实验中 主要掌握“d段地址:偏移地址”的格式; 2.了解Debug 中D命令程序的执行者:CPU,了解D命令的执行过程; 3.掌握CPU在访问内存单元时的主要过程; 4.学习怎样利用在Debug中cs、ds、ss、es这4个段寄存器,简化debug命令格式。 二、实验要求: 使用Debug,将下面的程序段写入内存,逐条执行,根据指令执行后的实际运行情况填空。Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax= Add ax,[2] ;ax= Mov bx,[4] ;bx= Add bx,[6] ;bx= Push ax ;sp= 修改的内存单元的地址是内容为 Push bx ;sp= 修改的内存单元的地址是内容为 Pop ax ;sp= ;ax= Pop bx ;sp= ;ax= Push [4] ;sp= 修改的内存单元的地址是内容为 Push [6] ;sp= 修改的内存单元的地址是内容为

三、实验数据记录: 1.进入Debug后使用-a命令将程序写入内存 2.通过使用-t命令将写入内存的程序逐一执行,直到命令执行完毕

三、实验结果及分析: 1.mov ax,[0] 执行完成后 ax=C0EA; 2.add ax,[2]执行完成后ax=C0FC; 3.mov bx,[4] 执行完成后 bx=30F0; 4.add bx,[6]执行完成后 bx=6021; 5.push ax 执行完成后 sp= 00FE 修改的内存单元的地址是 2200:00FE 内容为C0FC 6.push bx 执行完成后 sp= 00FC 修改的内存单元的地址是 2200:00FC 内容为6021

汇编语言实验一

淮阴工学院 汇编语言程序设计实验报告 选题名称:实验一调试工具的使用方法训练 系(院):计算机工程学院 专业:计算机科学与技术 班级: 1101 姓名:康志杰学号: 1101301132 指导教师:王福德 学年学期:2013 学年第 2 学期 2013 年 4 月15 日

实验一利用DEBUG调试程序调试程序段 <1 > 实验目的: (1)熟悉DEBUG有关命令的使用方法 (2)利用DEBUG掌握有关指令的功能 (3)利用DEBUG运行简单的程序段 <2 > 实验内容 (1)进入和退出DEBUG程序 1)开始——运行,输入cmd,点确定或回车键进入DOS环境 2)在命令窗口输入debug进入debug程序 3)进入debug程序后,按q退出

(2) 学会DEBUG中的D命令、E命令、R命令、T命令、A命令、G命令等的使用。对于U命 令、N命令、W命令等,也应试一下。 1 显示存储器单元命令D 格式:D [<地址范围>] 功能:显示指定地址范围内的存储区数据,包括十六进制数据形式及其对应的ASCII码字符显示。 2 写存储器单元命令E 格式:E <地址> [<字符串>] 功能:逐个修改指定单元内容或将字节串写入指定的一组连续单元。 例:将字节串′computer′写入以100H为起始地址的存储器区。 -E 100′computer′ 3显示和修改某个指定寄存器内容, 格式为:-R 寄存器名 例如打入:-R AX 系统将响应如下: AX 0000

: 表示AX当前内容为0000,此时若不对其作修改,可按ENTER键,否则,打入修改后内容,如: -R BX BX 0000 :1000 则BX内容由0000改为1000 4显示和修改标志位状态, 命令格式为:-RF 系统将给出响应,如 NV UP EI PL NZ NA PO NC- 这时若不作修改可按ENTER键,否则在“-”号之后键入修改值,键入顺序任意。如 NV UP EI PL NZ NA PO NC-ZR CY

汇编语言实验

实验四屏幕字符显示程序 实验目的: 通过实验掌握下列知识: 1、8088指令: JMP,ROR,XOR,HLT。 2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。 3、直接向视频RAM(VRAM)送ASCII码进行屏幕显示的方法。 4、IBM-PC机的ASCII码表及控制字符。 5、命令(。COM)文件及使用方法。 6、利用^Break退出程序的方法及局限性。 实验内容及步骤: 一、利用INT 21 0AH号功能调用显示字符串。 1、用A命令在100H处键入下列程序: MOV AH, 9 MOV DX,110 INT 21 INT 20 2、用A命令在110H处键入下列字符串的ASCII码: DB 'This is a sample!$' 3、用N命令和W命令将此程序(包括数据区)存入文件名为AA。COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。 4、用Q命令退出DEBUG。 5、在DOS命令下打AA,运行此程序,即在屏幕上显示'This is a sample!'字符串,若不出现,用DEBUG检查程序有无错误。

二、利用INT 21H 2号功能显示字符: 1、用A命令在100H处键入下列程序: XOR DL,DL MOVCX,100 LOP:MOV AH,2 INT 21 INC DL PUSH CX MOV CX,8 DELY: PUSH CX MOV CX,0 J: LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20 2、用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同? 3、按CTRL+BREAK退出此程序,若一次不行可多做几次。

汇编语言第1-2章考前复习题

1. 知识点:0202(基于微处理器的计算机系统构成) 在下列的选项中,能够组成计算机系统的是(A )。选项A)硬件系统和软件系统 选项B)CPU、存储器、输入/输出设备 选项C)操作系统、各种语言 选项D)系统软件和应用软件 2. 知识点:01 (基础知识) 汇编语言属于(B) 选项A)用户软件 选项B)系统软件 选项C)高级语言 选项D)机器语言 5知识点:0203(中央处理机) 中央处理器CPU是由(D)组成的 选项A)运算器 选项B)控制器 选项C)寄存器组 选项D)前三者 答案:D 6. 知识点:0201(80x86微处理器) IBM PC机的DOS是属于(B)。 选项A)用户软件

选项B)系统软件 选项C)系统硬件 选项D)一种语言 8. 知识点:0203(中央处理机) 8086/8088 CPU的寄存器组中,8位的寄存器共有(C)个 选项A)4 选项B)6 选项C)8(al ah bl bhcl chdl dh) 选项D)10 9. 知识点:0203(中央处理机) 8086/8088 CPU的寄存器组中,16位的寄存器共有(D)个。 AX,BX,CX,DX,DS,CS,SS,ES,FS,GS,DI,SI,BP,SP 选项A)10 选项B)12 选项C)13 选项D)14 10. 知识点:0204(存储器) 8086/8088 CPU执行算术运算时PSW共有(C)个标志位会受影响。SF,ZF,PF,CF,OF,AF 选项A)4 选项B)5 选项C)6

11. 知识点:0204(存储器) 在程序执行过程中,IP寄存器始终保存的是(C)。选项A)上一条指令的首地址 选项B)本条指令的首地址 选项C)下一条指令的首地址 选项D)需计算有效地址后才能确定地址 12. 知识点:0204(存储器) IBM PC机的存储器可分(D)个段。 选项A)4 选项B)256 选项C)512 选项D)65536 13知识点:0204(存储器) 当使用BP作编程地址时,此时使用的是(D)段。选项A)CS 选项B)DS 选项C)ES 选项D)SS(堆栈段) 17知识点:0204(存储器) 存储器的一个字节表示( A)位。 选项A)8

实验二 _C语言程序和C调用汇编程序实验

实验二C语言程序和C调用汇编程序实验 一、实验目的 了解ARM 启动过程,学会使用ADS 编写简单的C 语言程序 掌握C 语言调用汇编程序,并进行调试的方法 二、实验设备 硬件:嵌入式实验平台一套、仿真器一个、PC机一台。 软件:Windows XP 操作系统、仿真器驱动程序、ADS开发软件一套。 三、实验内容 在C 语言程序中调用汇编子程序,实现计算1+2+3+…+(N-1)+N 的值(N>0)的加法运算。汇编子程序实现两个数的加法运算,其原型为:uint32 doadd(uint32 x,uint32 y),其中uint32 已定义为unsigned int 。 四、实验原理 (1)作为最基本的编程语言之一,汇编语言虽然应用的范围不算很广,但重要性却勿庸置疑,因为它能够完成许多其它语言所无法完成的功能。就拿Linux 内核来讲,虽然绝大部分代码是用C 语言编写的,但仍然不可避免地在某些关键地方使用了汇编代码,其中主要是在Linux 的启动部分。由于这部分代码与硬件的关系非常密切,即使是 C 语言也会有些力不从心,而汇编语言则能够很好扬长避短,最大限度地发挥硬件的性能。大多数情况下Linux 程序员不需要使用汇编语言,因为即便是硬件驱动这样的底层程序在Linux 操作系统中也可以用完全用C 语言来实现,再加上GCC 这一优秀的编译器目前已经能够对最终生成的代码进行很好的优化,的确有足够的理由让我们可以暂时将汇编语言抛在一边了。但实现情况是Linux 程序员有时还是需要使用汇编,或者不得不使用汇编,理由很简单:精简、高效和libc 无关性。假设要移植Linux 到某一特定的嵌入式硬件环境下,首先必然面临如何减少系统大小、提高执行效率等问题,此时或许只有汇编语言能帮上忙了。 汇编语言直接同计算机的底层软件甚至硬件进行交互,它具有如下一些优点: 能够直接访问与硬件相关的存储器或I/O 端口; 能够不受编译器的限制,对生成的二进制代码进行完全的控制; 能够对关键代码进行更准确的控制,避免因线程共同访问或者硬件设备共享引起的死锁; 能够根据特定的应用对代码做最佳的优化,提高运行速度,能够最大限度地发挥硬件的功能。 同时还应该认识到,汇编语言是一种层次非常低的语言,它仅仅高于直接手工编写二进制的机器指令码,因此不可避免地存在一些缺点: 编写的代码非常难懂,不好维护; 很容易产生bug,难于调试; 只能针对特定的体系结构和处理器进行优化; 开发效率很低,时间长且单调。 (2)混合编程的一般方法有三种:一是对C 程序编译后形成的汇编程序进行手工的修改与优化。二是直接在C 语言程序中嵌入汇编语句。三是分别编写C 程序和汇编程序,再独立编译成目标代码模块,再进行链接。 第一种编程方式要求对汇编与C 语言都极其熟悉,并且这样的编程方式对程序的可读性和扩展性的负面影响比较大。 第二种方法适用于语句执行频率非常高,并且C 编程与汇编编程效率差异较大的情况,

实验4汇编实验

数学与软件科学学院实验报告 学期:2017至 2018第 2 学期 2018年4月4日课程名称: 汇编语言专业:信息与计算科学班级: 2015级_5班实验编号:4实验项目:编写、调试具有多个段的程序 指导教师:冉茂华 姓名:黄玉含学号:2015060512实验成绩: 1、将下面的程序编译、连接,用Debug加载、跟踪,然后回答问题。assume cs: code, ds:data, ss:stack data segment dw 0123h,0456h,0789h,0abch,0defh,0fedh,0cbah,0987h data ends stack segment dw 0,0,0,0,0,0,0,0 stack ends code segment start: mov ax,stack mov ss,ax mov sp,16 mov ax,data mov ds,ax push ds:[0] push ds:[2] pop ds:[2] pop ds:[0] mov ax,4c00h int 21h code ends end start 执行结果如下:

○1说明了cs=___076c_____,ss=____076b______,ds=_______076a_________ (1)、CPU执行程序,程序返回前,data段中的数据是多少? 还未执行时的数据:

执行程序后的数据: ○2不变,因为程序加载进去段内容就已经固定。 (2)、CPU执行程序,程序返回前,cs=___076c_____,ss=____076b______,ds=_______076a_________。 (3)、设程序加载后,code段的段地址为X,则data段的段地址为___X-2_____,stack段的段地址为____x-1______。 分析:程序段的段地址总是16的倍数且程序在内存中顺序加载。

汇编语言-课程设计1

) 汇编语言课程实验报告 实验名称 课程设计1 实验环境 硬件平台:Intel Core i5-3210M 操作系统:DOSBox in Windows 软件工具:Turbo C , Debug, MASM 实验内容 《 将实验7中的Power idea公司的数据按照下图所示的格式在屏幕上显示出来。 实验步骤 1.要完成这个实验,首先我们需要编写三个子程序。第一个子程序是可以显示字符串到屏 幕的程序,其汇编代码如下: ;名称:show_str

;功能:在屏幕的指定位置,用指定颜色,显示一个用0结尾的字符串 ;参数:(dh)=行号,(dl)=列号(取值范围0~80),(cl)=颜色,ds:si:该字符串的首地址 ;返回:显示在屏幕上 ¥ show_str: push ax push cx push dx push es push si push di mov ax,0b800h - mov es,ax mov al,160 mul dh add dl,dl mov dh,0 add ax,dx mov di,ax mov ah,cl . show_str_x: mov cl,ds:[si] mov ch,0 jcxz show_str_f mov al,cl mov es:[di],ax inc si inc di 【 inc di jmp show_str_x show_str_f: pop di pop si pop es pop dx pop cx } pop ax ret 2.第二个程序是将word型数据转换为字符串,这样我们才能调用第一个程序将其打印出

实验2 建立运行汇编语言源程序

实验2建立运行汇编语言程序 实验目的: 1.熟悉8088/8086的数据传送和算术运算指令的书写格式、功能。 2.编写源程序,掌握汇编语言程序格式。 3.掌握汇编、连接、运行汇编程序的全过程;使用DEBUG调试和运行汇编程序。 实验内容: 在硬盘E中建立自己的文件夹,以“班级姓名”命名(比如计科1111张三),实验文件以“实验次数-序号”命名,比如sy2-1.asm。 1、有3个内存单元x,,y z,其中x=1234h,y=0c3f6h,z=10c5h,请编写源程序,计算x+2z-y,结果保存在z单元中,并用debug调试运行查看结果,观察标志位变化。 2、写一个完整的源程序,用DEBUG调试运行,查看运行结果。 DATA SEGMENT;定义数据段DATA AUGEND DD99251 SUM DD? DATA ENDS ;请补充语句定义附加段EXTRA,将ADDEND赋值为双精度数-15962 CODE SEGMENT;定义代码段CODE ASSUME CS:CODE,DS:DATA,ES:EXTRA START:MOV AX,DAT MOV DS,AX ;请补充完成给ES赋值的语句,将EXTRA赋值给ES。 ;请补充进行加法运算的语句,把数据段DATA中的AUGEND和附加段EXTRA中的ADDEND相加,并把结果存放在DATA的SUM中。 MOV AX,4C00H INT21H CODE ENDS END START 3、完成实验教程第一章的内容。学习字符串处理指令(课本P75)和DOS显示字符串功能调用(课本P335),理解实验教程例题1.1的程序。 实验报告要求:

汇编语言实验四

福建农林大学金山学院实验报告 系:信息与机电工程系专业:计算机科学与技术年级: 08 姓名:游品尧学号: 082231044 实验课程:汇编语言 实验室号:___ _605 实验设备号: F5 实验时间:11.22 指导教师签字:成绩: 实验四 DOS功能调用 1.实验目的和要求 1.学会DOS中关于显示功能调用指令的用法。 2.领会修改显存方法显示字符。 2.实验环境 实验的硬件环境是: IBM—PC机及其兼容机 实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:https://www.wendangku.net/doc/155745506.html,;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。 3.实验内容及实验数据记录 1、输入一个字符,显示出来 2、输入一个字符串,显示出来 3、buf开始的3个的16位二进制数用十六进制数的形式显示出来, (1)理解程序 (2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。 (3)如果要分行显示,程序要如何修改? DATA SEGMENT BUF DW 4F59H, 56A8H, 0FF90H DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DA TA START: MOV AX, DA TA MOV DS, AX

MOV SI, 0 P: MOV BX, BUF[SI] MOV CH, 4 L: MOV CL, 4 ROL BX, CL MOV DL, BL AND DL, 0FH CMP DL, 10 JB NEXT ADD DL, 7 NEXT: ADD DL, 30H MOV AH, 2 INT 21H DEC CH JNZ L INC SI INC SI CMP SI, 4 JNA P MOV AH, 4CH INT 21H CODE ENDS END START 4、运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段STACK SEGMENT DB 128 DUP(0) STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK START: MOV AX,STACK MOV SS,AX MOV SP,128 MOV AX,0B800H

实验一基础汇编语言程序设计

实验一基础汇编语言程序设计 实验目的 1.学习和了解TEC-XP十六位机监控命令的用法; 2.学习和了解TEC-XP十六位机的指令系统; 3.学习简单的TEC-XP十六位机汇编程序设计。 实验内容 1.使用监控程序的R命令显示/修改寄存器内容、D命令显示存储器内容、E命令修改存储器内容; 2.使用A命令写一小段汇编程序,U命令反汇编刚输入的程序,用G命令连续运行该程序,用T、P命令单步运行并观察程序单步执行情况。 3.学习联机使用TEC-XP教学试验系统和仿真终端软件。 实验要求 在使用该教学机之前,应先熟悉教学机的各个组成部分及其使用方法。 实验步骤 1.关闭电源,将大板上的COMl口与PC机的串口相连; 2.接通电源,在PC机上运行PCEC.EXE文件,设置所用PC机的串口为“l”或“2”,其它的设置一般不用改动,直接回车即可; 3.置控制开关为001110(连续、内存读指令、组合逻辑、16位、联机),开关拨向上方表示“1”,拨向下方表示“0”,“X”表示任意。其它实验相同; 4.按一下“RESET”按键,再按一下“START”’按键,主机上显示: 5.用R命令查看寄存器内容或修改寄存器的内容 1.用R命令查看寄存器或修改寄存器内容 1)在命令行提示符状态下输入: R↙;显示寄存器的内容 注:寄存器的内容在运行程序或执行命令后会发生变化。

2)在命令行提示符状态下输入: R R0↙;修改寄存器R0的内容,被修改的寄存器与所赋值之间可以无空格, 也可有—个或数个空格 主机显示: 寄存器原值:xxxx 在后面输入新的值0036 再用R命令显示寄存器内容,则R0的内容变为0036。 2.用D命令显示存储器内容 在命令行提示符状态下输入: D 2000↙ 会显示从2000H地址开始的连续128个字的内容; 连续使用不带参数的D命令,起始地址会自动加128(即80H)。

汇编语言实验(1)

课程名称汇编语言与微机原理实验名称字符串显示实验 实验目的、要求 1.掌握汇编语言程序设计的编写链接调试运行的完整过程 2.掌握利用masm.exe、link.exe等进行汇编、连接的方法及执行目的程序的方法。 3.初步认识ASCII码 4.初步认识利用DOS系统功能调用显示字符与字符串的方法 5.认识汇编源程序结构(框架)。 实验原理 利用DOS的中断调用在屏幕上显示字符串”Hello World”。 主要设备 计算机一台汇编语言软件 实验步骤及原始数据记录 程序源代码 1.显示数据区中的字符串"Hello World" assume cs:code,ds:data,ss:stack stack segment stack dw 256 dup (0) stack ends data segment msg db 'Hello World!',0dh,0ah,$ data ends code segment start: mov ax,data mov ds,ax mov ah,09h mov dx,offset msg int 21h exit: mov ah,4ch int 21h code ends end start

四、操作步骤: 1.在C盘生成一个新文件夹,例如P1,在该文件夹中拷入masm.exe、link.exe、debug.exe等工具程序 2.打开记事本,将上面第1个程序复制生成纯文本文件,文件名以.asm为扩展名。例如:A1.ASM。(注意保存时要选择保存类型为“所有文件”)。 3.从“开始”→程序→附件→命令提示符,进入DOS命令界面。 4. 使用CD命令,进入新文件夹,例如:P1,命令为:CD C:\P1 5. 执行MASM <文件名>,对源程序进行编译。 6. 执行LINK.EXE <文件名>,连接生成执行程序。例如:LINK A1 7. 执行生成的程序,记录屏幕响应的情况。例如:A1 可以不带扩展名EXE。程序运行正常的话,应该要显示字符串"Hello World!"。 实验结果 程序运行之后,屏幕上显示字符串“Hello World”。 闲来无聊,想重新学习一下汇编,第一个helloworld,想起绝影的一句话"你们学高级语言,但是高级语言会变,我学低级语言,学了永远也不会变!" - -b stack segment stack ; 定义堆栈段 db 100 dup(?) ;堆栈段长100字节, 这里db就是字节的意思,如果是用dw就是字,100 dup(?) 中的dup是重复的意思,这句话是重复100遍,一遍定义一个字节,每个字节里全填0 stack ends ; 堆栈段结束 data segment ;数据段 szHello db 'hello,world',0dh,0ah,'$' ;定义szHello , 0dh,0ah分别是回车键,换行键的ASCII码, '$'是DOS功能调用INT 21H中9号功能要求的要显示字符串的结束标志,写成szHello db

汇编语言(第2版)王爽著 课后实验报告详解

汇编语言实验报告 : 班级学号 学生姓名 提交日期 成 绩

实验1-1如下: 用E命令将指令写入内存:

用A命令将指令写入内存: 实验1-2代码如下: 用a命令在2000:0000处写如要写如的代码,然后用R命令来修改CS为2000,IP修改为0,然后用T命令执行,直到AX中的值为10,因为是默认为十六进制,所以ax中的0010实际代表十进制的16。如图:

实验1-3: 用D 命令输入内存fff0h~fffffh,则可看到:

生产日期为06/15/09在地址为FFFF5~FFFF12处,现在用E命令随便修改一下有: 在window7下虚拟的dos中可以改,但如果重新打开dos中的debug 则日期任然不会改变,因为那是ROM。 实验1-4代码如下:

内存地址为B800:0开始的为显存,是RAM,可以改变其值来在屏幕中显示,其中这一个字符占两个字节,前一个(低)为字符的ASCII 码,后一个(高)为要显示的颜色,内存B800:0和B800:1这两个字节对应着屏幕中的第一个字符的位置,依次类推,每个屏幕的行有80个字符,对应的内存占160个字节 实验2-1:(按实验结果填空) Mov ax,ffff Mov ds,ax Mov ax,2200 Mov ss,ax Mov sp,0100 Mov ax,[0] ;ax=5BEA Add ax,[2] ;ax=5CCA Mov bx,[4] ;bx=30F0 Add bx,[6] ;bx=6026 Push ax ;sp=00FE; 修改的内存单元的地址是2200:00FE 内容是5CCA Push bx ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是6026 Pop ax ;sp=00FE; ax=6026. Pop bx ;sp=0100; bx=.5CCA Push [4] ;sp=00FE; 修改的内存单元的地址是2200:00FE内容是30F0 Push [6] ;sp=00FC; 修改的内存单元的地址是2200:00FC内容是2F36 实验截图如下:

汇编语言实验4-分支程序设计

汇编语言实验报告 Assembly Language Programming Lab Reports ______________________________________________________________________________ 班级: _________ 姓名:___________ 学号:___________ 实验日期:_____________ 学院: _____计算机与通信工程学院____ 专业:_______计算机科学与技术___________ 实验顺序:___实验四____ 实验名称:____________分支程序设计________________ 实验分数:_______ 考评日期:________ 指导教师: ______________________________________________________________________________ 一.实验目的 1.掌握主要的转移指令和位操作指令。 (1)无条件转移指令。Jmp理解掌握段内寻址和段间寻址方式。 (2)条件转移指令,无符号数比较转移,带符号数比较转移,cx为0转移指令(jcxz)这 些都为短转移指令,当代码过长超出-128-127的的转移范围,学会使用无条件指令 作为中间桥梁完成相应的功能。 (3)Test指令和Cmp指令。 2.掌握分支程序实现的方法。 (1)在完成一个程序的功能时,先简单列出要完成这个程序需要的步骤。 (2)根据列出的步骤画出程序框图。 (3)根据框图写代码。 3.在调试运行程序时,理解程序的加载过程。进一步掌握编辑、编译、链接、调试过程。 ______________________________________________________________________________ 二.实验环境 操作系统:windows xp 编译程序:masm 5.0 ______________________________________________________________________________ 三.实验原理 1.无条件转移指令 格式:JMP OPR 举例:JMP AA1 2.条件转移指令 格式:JZ、JNZ、JC、JNC 举例:JZ let1 3.逻辑与AND 格式:AND DST,SRC 举例:AND AL,0FH 4.循环左移,循环右移 格式:ROL、ROR 举例:ROL AX,1 ROR AL,1

单片机汇编语言实验教程(1).

本文由zaoangy贡献 doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 实验一熟悉MCS-51寻址方式及传送类指令 一.实验目的: 1.熟悉uVision2集成调试环境 2.熟悉 MCS-51寻址方式及传送类指令二.uVision2集成调试环境的使用uVision2是德国Keil Software公司用于多种嵌入式微处理器的一个理想、快速、 可靠的程序调试器。此调试器包含一个高速模拟器,能够让你模拟整个8051 系统,包括片上外围.....器件和外部硬件。 1.创建项目uVision2是以项目来管理你的任务,它可以使你的8051应用系统设计变得简单。要创建一个应用,你需要按下列步骤进行操作:①第一次使用,首先为我们编写的实验程序在D盘上新建一个文件夹D:\单片机实验;②启动uVision2,新建一个项目文件并从器件库中选择一个器件,操作步骤如下:直接在桌面上点击uVision2程序图标就可以启动它。要新建一个项目文件,从uVision 2的Project菜单中选择New Project,这将打开一个标准的Windows对话框,此对话框要求你输入项目文件名,例如为实验一新建项目:D:\单片机实验\ex1.vu2。紧接着,Select Device for Target,即为你的项目选择一个CPU。我们选择Gene ric下的8032。 2.新建一个源文件你可以用菜单选项File-New来新建一个源文件。这将打开一个空的编辑窗口让你输入你的源代码。编辑后,我们把我们的实验程序保存为D:\单片机实验\dpj1.asm。 3.将你的源文件加入到你的项目中在你的P roject Workspace窗口双击Target1及Suorce Group1,将你的目标系统一直展开到看到源文件组,如图1(a所示。右击Suorce Group1,出现Add files选项, 选择它可打开一个标准的文件对话框,从对话框中选择你刚刚生成的文件dpj1.asm 。 (a (b

汇编语言实验整理

1.设计程序。实现Y=2X+3,X是一位十进制数。要求X从键盘输入,在下一行 显示“Y=2X+3=”以及十进制计算结果。 data segment\x db?\y dw?\mess1db0ah,0dh,'input x:$'\mess2db 0ah,0dh,'Y=2X+3=$'\data ends\code segment\assume cs:code,ds:data\start:\mov ax,data\mov ds,ax\let3:\mov dx,offset mess1\mov ah,9\int21h\mov ah,1\int21h\cmp al,'0'\jb out1\ cmp al,'9'\ja out1\and al,0fh\mov bl,2\mul bl\add ax,3\mov y,ax\mov cx,0\mov bx,10\let0:\mov dx,0\inc cx\idiv bx\push dx\cmp ax,0\jne let0\mov dx,offset mess2\mov ah,9\int 21h\let1:\pop ax\add ax,0030h\mov dl,al\mov ah,2\int21h\ dec cx\cmp cx,0\jnz let1\jmp let3\out1:\mov ah,4ch\int21h\ code ends\end start 2.编写程序,将键盘输入的小写字母变为大写字母显示在屏幕上,输入小写字 母以外的其它字符则退出。 data segment\mess1db0ah,0dh,'xiaoxieinput:$'\mess2db 0ah,0dh,'daxieoutput:$'\data ends\code segment\assume cs:code,ds:data\start:\mov ax,data\mov ds,ax\let2:\mov dx,offset mess1\mov ah,9\int21h\mov ah,1\int21h\cmp al,'a'\jb out1\ cmp al,'z'\ja out1\mov bl,al\mov dx,offset mess2\mov ah,9\int 21h\let0:\sub bl,20h\mov dl,bl\mov ah,2\int21h\jmp let2\out1:\mov ah,4ch\int21h\code ends\end start 3.设计程序。实现Z=X/4+16*Y,X和Y都是一位十进制数。要求从键盘输入, 在下一行显示“Z=X/4+16*Y”以及十进制计算结果。 data segment\mess1db0ah,0dh,'input x:$'\mess2db0ah,0dh,'input y:$'\ mess3db0ah,0dh,'z=x/4+16*y=$'\data ends\code segment\assume cs:code,ds:data\start:\mov ax,data\mov ds,ax\let0:\mov dx,offset mess1\mov ah,9\int21h\mov ah,1\int21h\mov cl,2\sub al,30h\ mov ah,0\sar ax,cl\mov bl,al\mov dx,offset mess2\mov ah,9\int 21h\mov ah,1\int21h\sub al,30h\mov ah,0\mov cl,4\sal ax,cl\ add al,bl\mov bx,ax\mov dx,offset mess3\mov ah,9\int21h\let1:\ mov ax,bx\mov cx,0\mov bx,10\let2:\mov dx,0\inc cx\idiv bx\ push dx\cmp ax,0\jne let2\let3:\pop ax\add ax,0030h\mov dl,al\ mov ah,2\int21h\dec cx\cmp cx,0\jne let3\mov ah,4ch\int

相关文档
相关文档 最新文档