当前位置:文档之家› DSP控制器汇编语言程序设计(精)

DSP控制器汇编语言程序设计(精)

DSP控制器汇编语言程序设计(精)
DSP控制器汇编语言程序设计(精)

DSP 控制器汇编语言程序设计

摘要:在当今的数字化时代背景下,DSP 控制器在数字信号处理中起着重要的作用。本论文概括介绍了TMS320C6XDSP 的硬件结构,并对TMS320C6XDSP 的汇编语言指令系统做了重点说明。在具备以上知识的基础上,详细介绍了基于DSP 的高速数据采集和IIR 数字滤波器在DSP 上的实现,通过这两个应用实例了解DSP 汇编语言程序开发的方法。

关键字: TMS320C6X DSP 汇编语言 IIR数字滤波器高速数据采集

Abstract :In digitized time ,DSP plays an important role in the digital signal processing. This paper summarily describes the hardware structure of the

TMS320C6XDSP,and It introduced in detail the assembly language introductions.On the basis of having all above knowledge, a high speed data acquisition system based on DSP and using DSP to IIR Digital filter design was introduced,in order to understand the DSP assembly language program development method.

Keyword: TMS320C6X DSP the assembly language IIR Digital filter design

a high speed data acquisition system

前言

数字信号处理是一种将现实世界中的连续信号转换为计算机能够处理的信息的过程。比如人们说话的声音,这就是一个连续信号, 除此之外,现实生活中还有很多这样的信号,比如光、压力、温度等等。这些信号通过一个模拟向数字的转换过程(称之为AD ,变成数字信号送给处理器,进行数字计算,处理结束后,再把结果通过数字向模拟的转换过程重新变成连续信号(称之为DA 。用一般的通用微处理器可以完成这些工作,但是面临的问题是满足如此高的计算速度,就很难保证耗电量很低,更难保证价格足够便宜。因此,另一种微处理器应运而生:数字信号处理器,简称DSP 。

在当今的数字化时代,DSP 已成为通信、计算机、消费类电子产品等领域的基础器件,被誉为信息社会革命的旗手。未来10年,全球DSP 产品将向着高性能、低功耗、加强融合和拓展多种应用的趋势发展,DSP 芯片将越来越多地渗透到各种电子产品当中,成为各种电子产品尤其是通信类电子产品的技术核心,将会越来越受到业界的青睐。

因此,开发应用DSP 及其软件是当今科学和社会发展的需要。

而DSP 芯片的最大优越性在于其具有可重复编程的能力。将各种不同应用的

数字信号处理技术以及软件的形式下载到DSP 芯片中,可以实现相应的通信和控制功能。DSP 的发展和应用使得软件开发和硬件设计变得相对独立,DSP 是数字信号处理的核心, DSP硬件系统具有灵活的可编程性。

对于DSP 的程序员来说,主要的DSP 应用程序都是用汇编语言写的(至少部分是汇编语言优化的)。这里有两个理由:首先,大多数广泛使用的高级语言,例如C ,并不适合于描述典型的DSP 算法。其次,DSP 结构的复杂性,如多存储器空间、多总线、不规则的指令集、高度专门化的硬件等,使得难于为其编写高效率的编译器。

因此,汇编语言程序设计是DSP 应用软件设计的基础。

汇编语言是一种利用DSP 处理器所有硬件特性并能直接控制硬件的程序设计语言,是被实践证明了的开发硬件系统最优秀的语言。采用汇编语言开发,可合理地应用芯片提供的硬件资源,其代码效率高、占用资源少、程序执行速度快。诸多优点,使汇编语言受到广大专业硬件程序设计人员的青睐。

汇编语言直接描述机器指令,比机器指令容易记忆和理解。通过学习和使用汇编语言,能够感知、体会、理解机器的逻辑功能,向上为理解各种软件系统的原理,打下技术理论基础;向下为掌握硬件系统的原理,打下实践应用基础。学习汇编语言是我们理解整个DSP 处理器的最佳起点和最有效途径。

因此DSP 控制器汇编语言程序设计是当今软件设计领域中系统编程人员密切关注的研究课题之一。

1 DSP简介和结构特点

DSP 芯片,也称数字信号处理器,是一种具有特殊结构的微处理器。DSP 芯片的内部采用程序和数据分开的哈佛结构,具有专门的硬件乘法器,广泛采用流水线操作,提供特殊的DSP 指令,可以用来快速地实现各种数字信号处理算法。

TMS320C6x 核心CPU 由32个32比特字长的通用寄存器和8 个功能单元组成(2个乘法器和6个算术逻辑单元),故而可以在一个时钟周期中完成8条指令。它支持8/16/32比特的数据格式,并为声音合成或其它增强运算提供了对40比特数据算术运算的支持。TMS320C6x 拥有大容量的片内RAM (64KB 的数据存储器的64KB 的程序存储器),并通过32比特的EMIF 支持SDRAM 、SBSRAM 、SRAM 以及其它的非同步存储器。此外TMS320C6x 还提供了多通道的DMA 操作,用以相对CPU 进行后台的数据存取,DMA 的辅助通道还提供了对主机端口界面(HPI )的支持,主机可以通过HPI 异步地访问TMS320C6x 内外存储器及外围设备。C6x 还为通信提供两个多通道、多缓冲的串行口。此外,TMS320C6x 也和一般的DSP 一样具备较完善的中断处理机制、定时器结构,并可以以不同的方式启动系统。

2 DSP的硬件结构和片内外设

TMS320C6000 的CPU 有两个数据通道A 和B ,每个通道有16个32位字长的寄存器(A0~A15,B0~B15),四个功能单元(L ,S ,M ,D ),每个功能单元负责完成一定的算术或者逻辑运行。A 、B 两通道的寄存器并不是完全共享,只能通过TM320C6000提供的两个交换通道1X 、2X ,才能实现处理单元从不同通道的寄存器堆那里获取32位字长的操作数。

TMS320C6x 系列DSP 内部集成的外围设备也非常丰富:具有4 个独立通道的DMA 控制器,外部存储器接口(EMIF ),主机接口(HPI ),扩展总线(XBUS ),多通道缓冲串口(MCBSP ),定时器等。

3 DSP汇编语言程序设计

3.1 DSP系统设计

在DSP 系统设计中,应当先进行系统的总体设计。首先采用高级语言或Matlab 等对算法进行仿真,确定最佳算法并初步确定参数。对系统中的哪些功能用软件实现,哪些功能用硬件实现进行初步的分工。完成总体设计以后,就可以进入软硬件设计阶段。这里介绍软件设计的过程,如图所示。

3.2 DSP汇编语言的特点

汇编语言(Assembly Language 是面向机器、功能很强的程序设计语言, 也是利用DSP 处理器所有硬件特性并能直接控制硬件的语言。

汇编语言的主要优点是占用资源少、程序执行效率高。在对速度有极高要求的场合(如DSP 处理器的高速图像采集和图像解压缩),目前主要还要用汇编写程序。汇编语言正是以其“体积”小和效率高而受到专业硬件程序设计人员的青睐,是被实践证明了的开发硬件系统最优秀的语言。

3.3 DSP指令系统

3.3.1 寻址方式

C6000指令的寻址模式比较单一,只有间接寻址模式,即以通用寄存器作为基址,而且偏移地址可以为通用寄存器或常数。

在存储器地址计算时,可以采取两种方式:一种是线性寻址,即偏移量经过?1、?2、?4、?8(分别对应字节、半字、字和双字寻址)处理后直接加到基址上;另一种是循环寻址,即偏移量在经过?1、?2、?4、?8(分别对应字节、半字、字和双字寻址)处理后,还要以循环缓冲区的长度取模数后加到基址上。由AMR 寄存器选择是线性寻址还是循环寻址,并指定循环缓冲区的长度。

3.3.2句法格式

C6000汇编代码的基本形式为:

[标号] [:] 并行符号 [条件] 指令功能单元 [操作数] [;注释]

3.3.3 延迟间隙

C6000指令的执行具有延迟间隙(Delay Slots )。延迟间隙在数量上等于指令的源操作数被读取直到执行的结果可以被访问所需要的指令周期数。

延迟间隙等于一个指令的执行或结果获得的潜在周期。所有TMS320C62X 系列和TMS320C67X 系列DSPs 指令都有一个功能单元潜在周期,这意味着每个周期均可有一条新指令在功能单元中开始。

3.3.4 指令分类

汇编代码的指令包括伪指令和命令助记符。

一汇编器伪指令是汇编语言程序的一个重要内容,它给程序提供数据并控制汇编过程。汇编器伪指令可完成以下工作:将代码和数据汇编进指定的段;在存储

器中为未初始化的变量保留空间;控制是否产生清单文件;初始化存储器;汇编条件代码块;声明全局变量;为汇编器指定从中可以获得宏的库;考察符号调试信息。下面对一些常用的伪指令的使用方法进行分类说明。

(1)定义段的伪指令

这些伪指令指定汇编语言程序的段,包括以下几种:.bss .data.sect.text

(2)初始化常数的伪指令

以下一些伪指令为当前的段中保留指定的位数:.byte,.char.field.float .half, . half, .int ,.uint, .short, .ushort , .word .uword

(3)对准段程序计数器的伪指令

.align 伪指令将段程序计数器对准1字到128字的边界。

(4)引用其他文件的伪指令,包括:.copy.include.def.global.ref

二命令助记符是真正的处理器命令,它执行实际的程序操作。它包括算术操作指令、逻辑操作指令、程序控制指令和加载存储指令四大类,详细的指令形式和执行操作分别介绍如下:

a 、算术操作指令

C6X 的算术指令很丰富,而且运算功能强大。包括取绝对值指令、加法指令、减法指令、乘法指令、比较类指令以及特殊应用指令。

(1)取绝对值类指令

ABS src2,dst ;ABS(src2→dst, 取src 的绝对值放入dst 中。

(2)加/减法类指令

这里只对加法类指令详细介绍:

①不带饱和的有符号或者无符号的整数加法指令ADD[U]

ADD[U] src1, src2,dst ;

src2被加到src1上,结果保存到dst 中。

②使用寻址模式的整数加法指令ADDAB/ADDAH/ADDAW

ADDAB/ADDAH/ADDAW src2, src1,dst ;

src1分别按字节(?1,B )、半字(?2,H )或字(?4,W )寻址模式与src2相加,结果放到dst 中。如果src2为A4~A7或B4~B7,src1还可以按循环寻址模式(ARM 指定)与src2相加。

(3)乘法类指令MPY

①两个低16位的有符号或无符号整数相乘指令MPY

MPY[U/US/SU] src1,src2,dst

源操作数src1和src2相乘,结果放在目标寄存器dst 中。默认情况下,源操作数为无符号数。后缀U 表示两个无符号数相乘,US 表示src1是无符号而src2是

有符号数,SU 反之。

②一个高16位和一个低16位的有符号或无符号整数相乘指令

MPYHL[U]/ MPYHULS/MPYHSLU src1,src2,dst

③两个高16位的有符号或无符号整数相乘指令

MPYH (U/US/SU)src1,src2,dst

④一个低16位和一个高16位的有符号或无符号整数相乘指令

MPYLH (U )/MPYLUHS/MPYLSHU src1,src2,dst

b 、逻辑操作指令

逻辑运算指令包括与或异或、移位指令,分别叙述如下。

(1)位与指令AND

AND src1, src2,dst ;

将操作数src1和src2进行位与运算,结果保存到dst 中。

(2)位清零指令CLR

CLR src2,csta,cstb,dst

或者CLR src2,src1,dst

src2操作数中,由csta 和cstb 指定的字段被清零。csta 和cstb 可以是常数,也可以由scr1寄存器的低10位说明,0位~4位代表cstb 的值,5位~9位代表csta 的值。csta 指明src2要清零的最低位,cstb 指明src2要清零的最高位。换句话说,csta 和cstb 分别代表 src2中要清零字段的起始和结束位置。

(3)移位类指令

①向左移位指令SHL

SHL src2,src1,dst

源操作数src2向左移位,移位的个数为源操作数src1中的值,结果保存在目标寄存器dst 中。

②向右移位指令SHR

SHR src2,src1,dst

源操作数src2向右移位,移位的个数为源操作数src1中的值,结果进行符号扩展保存在目标寄存器dst 中。

③逻辑右移位指令 SHRU

SHRU src2,src1,dst

源操作数src2向右移位,移位的个数为源操作数src1中的值,结果进行零扩展保存在目标寄存器dst 中。

c 、程序控制指令

程序控制指令包括跳转指令、中断返回指令和空操作指令,分别叙述如下。

(1跳转类指令

①使用位移跳转指令B

B label

一个21位的常数左移2位,与包含跳转指令的取指包中第一条指令的地址相加,结果保存在程序取指包计数器(PFC )中。编译器和连接器会根据下列公式自动地计算cst 的值:cst=(label-PCE1>>2

②使用寄存器跳转指令B

B src2

Src2在PFC 寄存器中。

③从中断返回的指令

B IRP ;IRP →PF

C ,PGIE →GIE ,从可屏蔽中断返回

B NRP ;NRP →PF

C ,1→NMIE ,从不可屏蔽中断返回

(2)空操作类指令

①空操作指令NOP

NOP .[count]

源操作数src 被编码为count-1。在src+1个指令周期中,CPU 没有任何操作。其中count 的最大值是9。

②多个空操作指令IDLE

IDLE 指令执行无限多个NOP ,直到遇到中断服务或者一个跳转指令发生时才停止空操作。

d 、加载存储指令

加载存储指令是把源操作数从源存储器送到目的操作数的存储器中。包括从存储器取数指令、向存储器存数据指令和转移类指令等。

(1)从存储器取数指令LDB[U]/LDH[U]/LDW

LDB/LDH/LDW 间接寻址,dst

LDB[U]/LDH[U]/LDW指令可以从存储器读取有符号或无符号数,其中地址偏移量可以是5位无符号数、寄存器偏移或者15位无符号数。

(2)向存储器存数据指令STB/STH/STW

与取数据指令类似,向存储器存数据指令的偏移量也可以是5位无符号数、寄存器偏移或者15位无符号数。

STB/STH/STW src, *+baseR[offsetR]

或STB/STH/STW src, *+B14/B15[ucst15]

(3)转移类指令

①将数据从一个寄存器转移到另一个寄存器指令 MV

MV src,dst

②将数据在控制寄存器和通用寄存器之间转移指令MVC

MVC src2,dst

注意:使用MVC 指令向ISR 或ICR 寄存器中写入数据时会有一个延迟间隙。③将一个16位有符号数转移到通用寄存器并且进行符号扩展指令MVK

MVK cst,dst

将一个16位常量进行符号扩展,结果保存到目标寄存器中。

④将一个16位常量转移到通用寄存器的高16位指令MVKH/MVKLH

MVKH/MVKLH cst,dst

使用MVKH 可以将一个32位常量的高16位装载到目标寄存器中。使用MVKLH 可以将一个32位常量的低16位装载到目标寄存器中。

⑤将一个16位常量进行符号扩展转移到通用寄存器指令MVKL

MVKL cst,dst

4 应用程序设计

4.1应用程序一:高速数据采集系统设计

4.1.1概述

本系统设计的要求:实现对信号频率在30MHz 以下的模拟信号的采样,并分析信号的频谱,将频谱结果通过 USB 接口传送到计算机保存和显示。

由于本案例采用的是高速模数转换器,为了使处理器的速度跟上AD 的速度,DSP 每处理一批数据,在处理数据的时间内,停止对数据的采样,DSP 处理完该批数据后,然后启动 AD,开始下一批数据的采样。并且在处理数据之前将这些数据保存到FIFO 中。此外,信号处理的算法编成程序保存到外部的Flash 中,供DSP 上电读程序到其内部RAM 单元,全速运行程序。

系统的基本框图由 AD、FIFO 、DSP 以及 USB 接口组成,其框图如图所示。

4.1.2器件的选择

对于 AD 转换器,选取的标准主要决定于采样频率和位数,以及价格、供货周期、应用情况等其他因数。根据对各种 AD 芯片的查阅,选择 TI 公司的 AD 转换芯片 ADS5422。

根据AD 和DSP 的接口,可选择美国IDT 公司的FIFO 芯片IDT72V2113,由于有1M 多的数据量,而且IDT72V2113只有512K ×9bit 的数据单元,所以必须做字长和字深扩展。

根据数据的处理时间,选择TMS320C6203B 型号的DSP 。

USB 选择CY7C68031。

Flash 称为闪速存储器,是一种高速的、电擦除、电改写的非易失性的存储器。选择128K 8bit 的闪速存储器SST29LE010。

4.1.3 接口设计

使用TMS320C6203B 的32bit 外部扩展总线接口连接AD ;使用

TMS320C6203B 的定时器输出信号TOUT0提供精确稳定的时钟给AD ,控制AD 的采样频率,并且该时钟可以根据定时器参数由软件设置,增加AD 采样频率的灵活性。在DSP 内部寄存器中,将多通道缓冲串口(MBSP )的引脚配置成通用的I/O引脚,使用DR0 、DR1以及DX0引脚读入或写入AD 的控制信号OVR 、DV 以及OE 。

FIFO与TMS320C6203B 的外部扩展总线的XCE3空间,数据通过DMA 方式从FIFO 传送到TMS320C6203B 的片内ROM 。

FLASH 的地址和数据总线连接到TMS320C6203B 的EMIF 接口总线上,Flash 的片选信号连接到DSP 的CE1引脚,配置成DSP 的CE1空间,此外FLASH 读写信号分别连接到EMIF 接口的读写信号引脚上。

TMS320C6203B 通过EMIF 接口的CE2空间对USB 进行读写操作。

4.1.4 程序部分

上电后,TMS320C6203B 进行初始化,外部扩展总线的/XCE3空间设置为同步FIFO 读模式,DMA 通道0配置为每次传输含8帧,每帧128BYTE ,同步事件设置为外部中断4,触发极性为高电平;手动启动DMA 通道0。设置DX0为低电平;随着数据不断写入FIFO ,当FIFO 中的数据量大于128Byte 时,FIFO 的确将错就错空白标志信号(/PAE)由低电平变为高电平,使得TDS320C6203B 的外部中断信号有效,从而触发DMA 传输;TMS320C6203B 的DMA 通道0开始通过外部扩展总线读取8*128BYTE的数据,存储于内部RAM 中,然后向

TMS320C6203B 发送中断,通知TMS320C6203B 处理数据;TMS320C6203B 处理完数据以后,重新启动DMA 通道0,进行下一次DMA 传输;如此循环,直到处理完所有的数据。

程序流程图如下:

4.2应用程序二:IIR 数字滤波器的DSP 实现

4.2.1 数字滤波器的基本介绍

滤波器可广义的理解为一个信号选择系统,它让某些信号成分通过又阻止或衰减另一些成分。

14 11 滤波器可分为三种:模拟滤波器、采样滤波器和数字滤波器。而从网络结构或者单位脉冲响应分类,可以分为无限脉冲响应(IIR)和有限脉冲响应(FIR)滤波器。这里将介绍的就是无限脉冲响应(IIR)低通数字滤波器,它属于一个离散系统,主要采用递归结构。数字滤波器的传递函数:对 IIR 数字滤波器的差分方程的一般形式:N M y ( n = ∑ ak y ( n ? k + ∑ bk x ( n ? k k =1 k =0 两边同时进行双边 z 变换得:Y ( z = ∑ ai z X ( z + ∑ bi z ? iY ( z i =0 i =1 M ?i N 得 IIR 数字滤波器的传递函数:M H (z = Y ( z = X (z ∑b k =0 N k =1 k z?k = 1 ? ∑ ak z ? k B( z A( z 由上式可推得: Y ( z = B( z X ( z A( z 4.2.2 IIR 数字滤波器 DSP 程序的设计经常用来设计 IIR 滤波器的方法是借助于模拟器的设计方法进行。其设计步骤是:先将给定的数字滤波器的指标转换成模拟低通原型滤波器的指标,并得到满足这些指标要求的模拟低通原型滤波器的传递函数 Ha(s,然后将 Ha(s按某种方法转换成数字滤波器的系统函数 H(z),最后将数字低通原型滤波器转换成所要求的数字滤波器。本程序完成的是一个三阶切比雪夫Ⅰ型低通数字滤波器的滤波功能,为了简化汇编语言的汇编过程,程序中需要滤波的输入信号数据是由 Matlab 生成的,此输入信号是个双正弦信号,频率分别是 62.5Hz 和 250Hz。程序中的参数 b0、 b1、b2、b3 和 a1、a2、a3 也是将滤波器性能指标输入 Matlab,然后调用Matlab 中的切比雪夫Ⅰ型函数生成的。滤波后,输入信号为 250Hz 的频率成分会被削弱。关于 Matlab 如何得到这两部分数据并不是研究的内容,在此不多做解释。

14 12 运用直接Ⅰ型结构,IIR 滤波器的系统函数表示为: Y ( z = 1 [ B ( z X ( z ] A( z M k =0 ω (n = ∑ bk x(n ? k 对应的差分方程为: N y ( n = ∑ ak y ( n ? k + ω ( n k =1 假如 M=N,则由此差分方程可得到如下图所示的信号流程图: x(n z-1 z-1 z-1 z-1 b0 b1 b2 bN ?1 y(n z-1 z-1 z-1 z-1 -a1 -a2 -aN-1 -aN bN 根据差分方程的信号流程图进行编程,由于现在的参数和输入数据,所以在程序一开始就将输入数据

和参数放在定义好的存储空间里,程序的主体就是进行乘加运算。程序流程图如图所示。

14 13 开始将 A0 清零寄存器 A2 指向 inputdata:寄存器 A3 指向 filterdata; 寄

存器 B4 指向 b4; 寄存器 B3 指向 b3 寄存器 B2 指向 b2; 寄存器 B1 指向 b1; 寄存器B7 指向 a3; 寄存器 B6 指向 a2; 寄存器 B5 指向 a1; 滤波个数保存到寄存器 B0 输入4 个源数据依次到 A4、A5、A6、A7,并将 ORIGIN 指针修改到输入的第二个源数据地址。将输出的三个数据依次存放到寄存器 A8、A9、A10 按信号流程图将上面输入的源数据与系数 b 相乘,并且将结果相加后的值存到寄存器 A0 中按信号流程图将输出数据和系数 a 相乘,将结果累加到寄存器 A0 中,并调整 OUTPUT 的指针 B0 是否为 0? B0〈=B0-1 结束

14 14 参考文献 1 刘和平 .TMS320LF240X DSP 结构、原理及应用[M]. 北京

航空航天大学出版社.2002 2 何苏勤. TMS3202000 系列 DSP 原理及实用技术[M].电子工业出版社.2003 3 刘益成.TMS320C54X DSP 应用程序设计及开发[M].北京航空航天大学出版社.2002.2 4 王念旭 DSP 基础与应用系统开发[M]. 北京航空航天大学出版社.2002 5 TEXAS INSTRUMENTS .TMS320C2XX Source Debugger[J/OL] 1995 6 路平,梁军.基于 DSP 及 CPLD 的实时同步测量装置[J].继电器.Vol.32 No.23 7 俞平,秦树人.基于 DSP 和 USB2.0 高速数据采集处理系统[J].重庆大学学报.Vol 28 No.5 8 王文武,曹治国.基于 FPGA 和 DSP 的并行数据采集系统的设计[J].微计算机信息.2004 Vol20 9 田金文,李景奇.基于 TMS320C6414 的视频采集处理硬件系统设计[J].华中科技大学学报.2005.Vol.33 No.7 10 卢伯英.现代控制工程[M].2004 11 王慧.计算机控制系统[M].2005.7 12 于海生.计算机控制技术[M].2002 13 TMS320F24X Fixed Point DSP Assembly Language tools[J/OL]. TI 公司. 1995 14 丁元杰.单片微机原理及应用[M].机械工业出版社.2002 15 黄杨晖等.基于 DSP 芯片的生化检测系统的设计与应用.仪器仪表学报[N].2004.vol 25 No .4 16 宋雪丽,吴勇.数字信号处理器 TMS320LF2407 在油液污染检测中的应用液压与气动[J/OL].2004 年第 9 期. 17 薛雷张金艺彭之威冯远亮王佳.DSPs 原理及应用教程[M] 清华大学出版社 18 周霖 DSP 系统设计与实现[M] 国防工业出版社 19 李真芳苏涛

黄小宇 DSP 程序开发[M] 西安电子科技大学出版社 20 江思敏刘畅TMS320C6000DSP 应用开发教程[M] 机械工业出版社

试验二ARM汇编语言程序设计

实验二 ARM汇编语言程序设计 一、实验目的 1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程 2.掌握ARM汇编指令 二、实验设备 1. EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。 2. PC操作系统WIN98或WIN2000或WINXP, ADS1.2集成开发环境,仿真器驱动程序。 三、汇编语言简介 1.ARM汇编的一些简要的书写规范 ARM汇编中,所有标号必须在一行的顶格书写,其后面不要添加“:”,而所有指令均不能顶格书写。ARM汇编对标识符的大小写敏感,书写标号及指令时字母大 小写要一致。在ARM汇编中,ARM指令、伪指令、寄存器名等可以全部大写或者全 部小写,但不要大小写混合使用。注释使用“;”号,注释的内容由“;”号起到此 行结束,注释可以在一行的顶格书写。 详细的汇编语句及规范请参照ARM汇编的相关书籍、文档。 2. ARM汇编语言程序的基本结构 在ARM汇编语言程序中,是以程序段为单位来组织代码。段是相对独立的指令或数据序列,具有特定的名称。段可以分为代码段的和数据段,代码段的内容为执 行代码,数据段存放代码运行时所需的数据。一个汇编程序至少应该有一个代码段,当程序较长时,可以分割为多个代码段和数据段,多个段在程序编译链接时最终形 成一个可执行文件。可执行映像文件通常由以下几部分构成: ◆ 一个或多个代码段,代码段为只读属性。 ◆ 零个或多个包含初始化数据的数据段,数据段的属性为可读写。 ◆ 零个或多个不包含初始化数据的数据段,数据段的属性为可读写。 链接器根据系统默认或用户设定的规则,将各个段安排在存储器中的相应位置。源程序中段之间的相邻关系与执行的映象文件中的段之间的相邻关系不一定 相同。 3. 简单的小例子 下面是一个代码段的小例子 AREA Init,CODE,READONLY ENTRY LDR R0, =0x3FF5000 LDR R1, 0x0f STR R1, [R0]

【汇编语言程序设计】试题及答案合集

《汇编语言程序设计试题及答案》合集 汇编语言程序设计试题及答案 1.对于有符号的数来说,下列哪个值最大(D) A:0F8H B:11010011B C:82 D:123Q 2.下列有关汇编语言中标号的命名规则中,错误的是(D) A:通常由字母打头的字符、数字串组成 B:标号长度不能超过31个字符 C:?和$不能单独作为标号 D:.号不可位于标号首 3.8088/8086存储器分段,每个段不超过(D ) A.64K个字 B.32K个字节 C.1兆个字节 D.64K个字节 4.寻址指令MOV CX, [BX + DI + 20]使用的是哪一种寻址方式(B)A:寄存器寻址B:相对基址变址寻址 C:变址寻址D:基址变址寻址 5.若AX= - 15要得到AX=15应执行的指令是(A ) A.NEG AX B.NOT AX C.INC AX D.DEC AX 6.8086/8088系统执行传送指令MOV时( A) A.不影响标志位 B.影响DF方向标志 C.影响SF符号标志 D.影响CF进位标志 7.若要求一个操作数中的若干位维持不变,若干位置?1?,可以使用(B)A:NOT B:OR C:AND D:XOR 8.下列指令中段默认为堆栈段的是( C) A.MOV AX,[BX+SI+10] B.ADD AX,ES:[SI] C.SUB [BX],[BP][DI] D. MOV DX,[1000H] 9.关于8086/8088微机系列,下列说法哪个是正确的(D) A:一个存储单元由16个二进制位组成,简称字。

B:当存储一个字数据时,低字节放高地址位,高字节放低地址位。 C:在内存空间中,可以无限分配段,且段的大小不受限制。 D:段与段之间可以邻接,也可以重叠。 10.下列关于堆栈的说法,错误的是(D) A:以?先入后出?为原则。 B:栈区最高地址单元的前一个单元为栈底。 C:运行中SP寄存器动态跟踪栈顶位置。 D:压栈和弹出都是以字节为单位。 11.表示过程定义结束的伪指令是( A) A.ENDP B.ENDS C.END D.ENDM 12.BUF1 DB 3 DUP(0,2 DUP (1,2),3) COUNT EQU $-BUF1 符号COUNT等价的值是( B) A.6 B.18 C.16 D.9 13.下列标志位中,可以用来判断计算结果正负的是(B) A:PF B:SF C:DF D:OF 14.下列指令正确的是( CD) A. MOV [100H], [BX] B.MOV DS, ES C. ADD V[BX], CX D.MOV AX, 34H 15.下列哪个寄存器是属于指针寄存器(C) A:SI B:DX C:SP D:ES 二、填空题 (每小题4 分,共 20 分) 1.下列程序段求数组FLD的平均值,结果在AL中。请将程序填写完整(不考虑溢出) FLD DW 10, -20, 30, -60, -71, 80, 79, 56 _LEA SI,FLD______ MOV CX, 8 XOR AX, AX

汇编语言程序设计(钱晓捷)课后答案

汇编语言程序设计(第二版) 钱晓捷习题答案 第二章(01) 2.1 (1)AX=1200h (2)AX=0100h (3)AX=4C2Ah (4)AX=3412h (5)AX=4C2Ah (6)AX=7856h (7)AX=65B7h 2.2(1) 两操作数类型不匹配 (2) IP指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配 (6) 目的操作数应为[ BP ] (7) 源操作数应为[BX+DI] (8) 立即数不能作目的操作数 2.3 lea bx,table ;获取table的首地址,BX=200H mov al,8 ;传送欲转换的数字,AL=8 xlat ;转换为格雷码,AL=12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。 堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH和POP。 2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop [bx] ;DS:[0f79h]=8057h 2.6 AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 1 2.7 W=X+Y+24-Z

2.8 (1)ADD DX,BX (2)ADD AL,[BX+SI] (3)ADD [BX+0B2H],CX (4)ADD WORD PTR [0520H],3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中X,Y,Z,V 字操作数改为A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax <-- dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx <-- bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx<-- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:[D-(A*B+C-540h)]/A ;ax存商,dx存余数 2.10;(1)xchg的操作数不能是立即数 (2不能对CS直接赋值 (3)两个操作数不能都是存储单元 (4)堆栈的操作数不能是字节量 (5)adc的操作数不能是段寄存器 (6)没有确定是字节还是字操作 (7)in不支持超过FFH的直接寻址 (8)out只能以AL/AX为源操作数 第二章(02) 2.11; 指令AX的值CF OF SF ZF PF Mov ax,1407h1470h----- And ax,ax1470h00000 Or ax,ax1470h00000 Xor ax,ax000011 Not ax0ffffh----- Test ax,0f0f0h0ffffh00101 注意: 1. mov, not指令不影响标志位 2. 其他逻辑指令使CF=OF=0, 根据结果影响其他标志位。

汇编语言程序设计

汇编语言基础《汇编语言程序设计》第01章在线测试 A B C D 、微机中每个存储单元具有一个地址,其中存放一个____量。 A B C D 、设段地址为5788H,该字节的物理地址_____。 A B C D 、汇编语言源程序中,每个语句由项组成,不影响语句功能的是_____。 A B C D 、下列标号不合法的是_____。 A B C D

B、生成的代码序列短小 C、运行速度快 D、编程容易 E、便于移植 2、8086段寄存器有_______。 A、IP B、DS C、CS D、ES E、SS 3、使用MASM 6.x版本的“ML /Fl eg101.asm”命令,如果源程序eg101.asm没有语法错误,则将生成_________文件。 A、目标代码文件 B、可执行文件 C、列表文件 D、调试文件 E、库文件 4、汇编语言中,______可以作为有效的名字,如标号、变量名等。 A、0fffh B、var00 C、loop1 D、test E、add 5、汇编语言中,程序员不能将______作为用户标识符。 A、DS

正确错误、有效地址是指存储器操作数的物理地址。 正确错误、采用汇编语言书写的一个源程序文件,需要使用汇编程序,例如MASM 正确错误 按逻辑段组织程序,需要执行的指令应该在代码段中。 正确错误、使用简化段定义源程序格式,必须具有语句,且位于所有简化段定义语句之前。 正确错误 《汇编语言程序设计》第02章在线测试 A B C D

2、伪指令DW定义的是______量的变量。 A、字节 B、字 C、双字 D、4字 3、将变量var定义如下,“var db 26h, 4ah”,欲以字属性存取该变量值,应采用______var。 A、offset B、byte ptr C、word ptr D、seg 4、语句“xyz db ˊABˊ, ˊCDˊ, ˊEˊ,ˊFˊ”汇编后占用的存储空间是______个字节。 A、4 B、5 C、6 D、8 5、在伪指令语句“number dw 1234h”中的number 项称为______。 A、标号 B、操作符 C、名字 D、操作数 第二题、多项选择题(每题2分,5道题共10分) 1、如下________寻址方式的操作数来自主存储器。 A、立即数寻址 B、寄存器寻址 C、直接寻址 D、寄存器相对寻址 E、寄存器间接寻址 2、“mov [bx+10h],al”指令的两个操作数采用的寻址方式有_______。 A、寄存器间接 B、寄存器 C、寄存器相对 D、基址变址 E、立即数

汇编语言程序设计

汇编语言程序设计 一、选择题 (共72题) 1、 用于指针及变址寄存器的有()。 A、 AX,BX,CX,DX B、 SP,BP,IP C、 CS,DS,SS D、 PSW 考生答案:B 2、 完成把汇编语言源程序模块转换为目标模块的程序是()。 A、 编辑程序 B、 汇编程序 C、 连接程序 D、 调试程序 考生答案:B 3、 指令JMP FAR PTR DONE中的寻址方式属于()。 A、 段内转移直接寻址 B、 段内转移间接寻址 C、 段间转移直接寻址 D、 段间转移间接寻址 考生答案:C 4、 对于下列程序段: AGAIN:MOV AL,[SI]

MOV ES:[DI],AL INC SI INC DI LOOP AGAIN 也可用()指令完成同样的功能。 A、 REP MOVSB B、 REP LODSB C、 REP STOSB D、 REPE SCASB 考生答案:A 5、 在程序执行过程中,IP寄存器中始终保存的是()。 A、 上一条指令的首地址 B、 下一条指令的首地址 C、 正在执行指令的首地址 D、 需计算有效地址后才能确定地址 考生答案:B 6、 在汇编语言程序的开发过程中使用宏功能的顺序是()。 A、 宏定义,宏调用 B、 宏定义,宏展开 C、 宏定义,宏调用,宏展开 D、 宏定义,宏展开,宏调用 考生答案:C 7、 CPU要访问的某一存储单元的实际地址称()。 A、 段地址

偏移地址 C、 物理地址 D、 逻辑地址 考生答案:C 8、 AND、OR、XOR、NOT为四条逻辑运算指令,下面解释正确的是()。 A、 指令XOR AX,AX执行后,AX内容不变,但设置了标志位 B、 指令OR DX,1000H执行后,将DX最高位置1,其余各位置0 C、 指令AND AX,OFH执行后,分离出AL低四位 D、 NOT AX,执行后,将AX清0 考生答案:C 9、 完成对CL寄存器的内容乘以2的正确操作是()。 A、 ROL CL,1 B、 MUL 2 C、 SHL CL,1 D、 SHR CL,1 考生答案:C 10、 检查两个无符号数的关系,若要实现AL≥BL时分支去LOP1处,那么在“CMP A L,BL”指令后应跟的分支指令是()。 A、 JE LOP1 B、 JAE LOP1 C、 JC LOP1 D、 JGE LOP1 考生答案:B 11、 已知变量VAR为字型,则TYPEVAR=()。

汇编语言程序设计教学大纲

《汇编语言程序设计》课程教学大纲 二、课程简介 汇编语言是计算机能够提供给用户使用的最快最有效的语言,也是能够利用计算机所有硬件特性并能直接控制硬件的唯一语言,因而,对程序的空间和时间要求很高的场合及需要直接控制硬件的应用场合,汇编语言的应用是必不可少三、课程目标 汇编语言课程是计算机专业的一门专业选修课。通过本课程的学习,应使学 生系统地了解计算机组成原理与内部的运行机理,掌握汇编语言程序设计及相关 知识,为学习本专业后继课程和进行与硬件有关的技术工作打下良好基础。通过 上机实验,使学生受到软硬件实验的初步训练,并培养学生分析问题和解决问题 的能力。 四、教学内容及要求 第一章基础知识 1.教学内容 (1) 为什么要用汇编语言编写程序 (2) 进位计数制与不同基数的数之间的转换 (3) 二进制数和十六进制数运算 (4) 计算机中数和字符的表示 (5) 几种基本的逻辑运算 2.基本要求 了解机器指令、代码指令、机器语言、汇编指令、汇编语言、汇编语言源程 序、汇编程序、汇编等概念;掌握进位计数制与不同基数的数之间的转换及

运算;计算机中数和字符的表示;“与”、“或”、“非”、“异或”等几种基本的逻辑运算; 第二章80X86计算机组织 1.教学内容 计算机系统概述、存储器、中央处理机和外部设备。 2.基本要求 理解计算机的硬件和软件系统及其关系。掌握计算机的基本结构及总线;存储器的内容、地址及存储器的分段;中央处理机的组成、80X86系列CPU工作寄存器构成和功能,特别是段寄存器和标志寄存器;外设接口、端口和8086/8088的端口地址范围和访问方法。 第三章80X86的指令系统 1.教学内容(重点内容) IBM PC机的寻址方式、IBM PC机的指令系统。 2.基本要求 熟练掌握IBM PC机寻址方式及物理地址的计算;数据传送、算术、逻辑、串处理、控制转移和处理机控制指令六组中的所有指令的格式、操作、及影响的标志位。了解机器语言的指令组成; 第四章汇编语言程序格式 1.教学内容 汇编程序功能、伪操作、汇编语言程序格式、汇编语言程序的上机过程。 2.基本要求 掌握DEBUG程序和命令及能用DEBUG 程序调试和运行简单小程序;汇编语言上机步骤、汇编程序的功能;数据定义及存储器分配、表达式赋值“EQU”和“=”、段定义、程序开始和结束、对准、基数控制等六类伪操作;汇编语言程序格式中的名字、操作、操作数和注释等项。 第五章循环与分支程序设计 1.教学内容 程序设计的一般步骤和基本结构、循环程序设计和分支程序设计 2.基本要求 掌握汇编语言程序的编制步骤和结构化程序设计的三种基本结构;循环的设计方法和多层循环的设计;分支程序的设计方法,并能编制相应的程序。第六章子程序结构 1.教学内容 子程序的设计方法、嵌套与递归子程序、子程序举例和DOS系统功能调用

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

实验一基础汇编语言程序设计 实验目的 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)。

8086汇编语言程序设计

实验1 简单汇编语言程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握简单汇编语言程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG 工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG 工具调试程序,验证程序的正确性。 1. 若X、Y、R、W 是存放8 位带符号数字节单元的地址,Z 是16 位字单元的 地址。试编写汇编程序,完成Z←((W-X) ÷5-Y)?(R+ 2) 。 2.试编写一个程序,测试某数是否是奇数。如该数是奇数,则把DL 的第0 位置1,否则将该位置0。 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验2 分支及循环程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握分支程序和循环程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,汇编连接汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编写汇编程序,统计某存储区若干个数据中英文字母的个数,并将结果在屏幕上显示。 2.从键盘任意输入一组字符数据,请编写汇编程序将该组数据加密后在屏幕上显示。参考加密方法是:每个数乘以2。(说明:本题的加密方法,同学们可以自己拟定) 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

实验3 子程序程序设计 一、实验目的与要求 1.熟悉汇编语言运行、调试环境及方法。 2.掌握子程序的设计方法。 3.熟悉调试工具DEBUG,并运用DEBUG工具调试程序。 二、实验内容 根据下列要求,编写汇编源程序,并利用DEBUG工具调试程序,验证程序的正确性。 1.编程以十进制形式和十六进制形式显示AX的内容,并把两个显示功能分别封装成子程序dispDEC和dispHEX。 2.设在以EXAMSCORE为首地址的数据缓冲区依次存放某班10名同学5门功课的成绩,现要统计各位同学的总分,并将总分放在该学生单科成绩后的单元,并调用第1个程序封装好的子程序,以十进制方式显示统计情况,显示格式自行设计。请编程完成此功能。数据缓冲区参考数据定义如下: EXAMSCORE DB 01 ;学号 DB 89,76,54,77,99 ;单科成绩 DW ? ;该学生的总分 DB 02 ;学号 DB 79,88,64,97,92 ;单科成绩 DW ? ;该学生的总分 三、实验报告要求 1.程序算法流程图。 2.源程序清单。 3.程序运行结果。 4.调试过程中遇到的问题和解决的方法。

汇编语言程序设计

汇编语言程序设计 实验报告 实验名称上机过程及顺序结构与分支结构程序设计实验班级 学号 姓名 日期2017年10月26号 成绩 评阅人 软件学院

一、实验目的与意义 理解并熟练掌握汇编语言程序设计过程中的编辑、汇编、链接和调试等各个步骤,提高对汇编课程内容的理解和汇编语言的掌握,通过上机练习加深对课程内容的理解和掌握。通过汇编语言编制的程序上机调试、运行检验程序设计是否正确。熟悉和掌握编辑、汇编、连接和调试四个实用程序的使用方法,掌握调试程序中的几个常用命令的使用方法。熟悉其基本的指令操作,debug调试操作命令以及分支结构、顺序结构和循环结构的程序设计。 二、实验环境 操作系统:Microsoft Windows8 集成环境:Masm for Windows 上机地点:信息楼B405教室 三、实验的预习内容 预习的主要内容: 1. 使用DEBUG命令的方法; 2. 熟悉掌握从理论上定义数据的类型(即DB,DW,DD,); 3. 分支结构和顺序结构的步骤以及相关的指令; 4. 常用的标志位状态及相应的作用; 实验思路: 在对题目进行分析后,分析出解题方法,并做出与实验思路相对应的程序框图。依照程序框图的内容输入相对应的代码,最终在调试代码后,发现并解决一系列的汇编语言错误。进一步优化算法。实验之前必须了解十进制、十六进制和ASCII码之间的转换。预习查表法相关命令,掌握顺序程序的结构,从键盘输入数据的命令及显示到屏幕上的命令。 实验一: 题目1:将程序编辑、汇编、连接并通过集成环境中的debug调试,观察运行结果;用E命令修改指定地址的数据,再用G命令执行程序查看变化,用A 命令将加法指令修改成减法指令,再将其编译运行,查看寄存器值变化的异同。 题目2:分别用DB、DW和DD数据段9H,0FAH,41H,27H,编译链接之后生成exe文件,再用debug的r命令找到数据段地址,用d命令指定数据段地址,观察汇编后在机器内部对应的存储情况。 实验二: 先设置数据段地址和堆栈段地址;设置堆栈段指针;读取一个字符然后存储在AL中;用BX来存储AL中字符对应的数值;将BX中的值作为偏移地址;并在数据段中查找对应字符串;最终输出结果结束程序。 实验三: 先初始化数据段地址与堆栈段地址;设置堆栈段指针;然后将数据段中的data1放入AL中;读取数据段中的data2并判断data2是否大于0;然后读取数

汇编语言程序设计(第四版)第3章【课后答案】

汇编语言程序设计第四版 【课后习题答案】--囮裑為檤 第3章汇编语言程序格式 〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用? 〔解答〕 伪指令语句与硬指令语句的本质区别是能不能产生CPU动作; 伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。 〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成? 〔解答〕 为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符; 汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。 〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。 〔解答 保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。汇编语言对大小写不敏感。如定义字节数和字符串的DB就是伪指令助记符。 〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成? 〔解答〕 汇编语句有执行性语句和说明性语句; 执行性语句由标号、硬指令助记符、操作数和注释四部分组成; 说明性语句由名字、伪指令助记符、参数和注释四部分组成 〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。 〔解答〕 ⒈编辑文本编辑程序汇编语言源程序.asm ⒉汇编汇编程序目标模块文件.obj ⒊连接连接程序可执行文件.exe或.com

⒋调试调试程序应用程序 〔习题3.6〕区分下列概念: (1)变量和标号 (2)数值表达式和地址表达式 (3)符号常量和字符串常量 〔解答〕 (1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。 (2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。 (3)在程序中,为了使常量更便于使用和阅读,经常将一些常量用常量定义语句定义为符号常量,被一对双引号括起来的若干个字符组成的字符序列被称为字符串常量。 〔习题3.7〕假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的错误原因。 (1)mov byte ptr [bx],1000 (2)mov bx,offset myword[si] (3)cmp mybyte1,mybyte2 (4)mov al,mybyte1+mybyte2 (5)sub al,myword (6)jnz myword 〔解答〕 (1)1000超出了一个字节范围 (2)寄存器的值只有程序执行时才能确定,而offset是汇编过程计算的偏移地址,故无法确定,改为lea bx,myword[si] (3)两个都是存储单元,指令不允许 (4)变量值只有执行时才确定,汇编过程不能计算 (5)字节量AL与字量myword,类型不匹配 (6)Jcc指令只有相对寻址方式,不支持间接寻址方式 〔习题3.8〕OPR1是一个常量,问下列语句中两个AND操作有什么区别? AND AL,OPR1 AND 0feh 〔解答〕

新版汇编语言程序设计钱晓捷第1章习题答案

第1章汇编语言基础知识(全) 2010-10-18 19:32:40| 分类:答案集锦| 标签:|字号大中小订阅 第1章汇编语言基础知识 〔习题1.1〕简述计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:包括运算器、控制器和寄存器组。运算器执行所有的算术和逻辑运算;控制器负责把指指令逐条从存储器中取出,经译码分析后向机器发出各种控制命令,并正确完成程序所要求的功能;寄存器组为 处理单元提供所需要的数据。 存储器:是计算机的记忆部件,它用来存放程序以及程序中所涉及的数据。 外部设备:实现人机交换和机间的通信。 〔习题1.2〕明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 〔解答〕 主存又称内存是主存储器的简称,主存储器存放当前正在执行的程序和使用的数据,CPU可以直接存取,它由半导体存储器芯片构成其成本高、容量小、但速度快。辅存是辅助存储器的简称,辅存可用来长期保存大量程序和数据,CPU需要通过I/O接口访问,它由磁盘或光盘构成,其成本低、容量大,但速 度慢。 RAM是随机存取存储器的英语简写,由于CPU可以从RAM读信息,也可以向RAM写入信息,所以RAM也被称为读写存储器,RAM型半导体存储器可以按地址随机读写,但这类存储器在断电后不能保存信息;而ROM中的信息只能被读出,不能被修改,ROM型半导体通常只能被读出,但这类存储器断电 后能保存信息。 存储器由大量存储单元组成。为了区别每个单元,我们将它们编号,于是,每个存储单元就有了一个存储地址,I/O接口是由一组寄存器组成,为了区别它们,各个寄存器进行了编号,形成I/O地址,通常 称做I/O端口。 KB是千字节、MB是兆字节、GB是吉字节和TB是太字节,它们都是表示存储器存储单元的单位。 〔习题1.3〕什么是汇编语言源程序、汇编程序、目标程序? 〔解答〕 用汇编语言书写的程序就称为汇编语言源程序;完成汇编工作的程序就是汇编程序;由汇编程序编 译通过的程序就是目标程序。

《汇编语言程序设计》考核方式

考核方式与要求 期末总成绩构成:期末开卷考试60% + 平时作业10% + 实验和实验报告30%。 1、试卷考核方式与要求 “汇编语言程序设计”的课程要求是使学生具有一定的程序设计能力。虽然课程是通过80x86微处理机来开展教学的,但学习的重点不仅仅是学会80x86指令的语法和规范,更重要的是通过多读程序、多练习编写程序来掌握程序设计的基本方法和技术,要求学生在工作中遇到其他机型,都应该能利用所掌握的方法和技术顺利解决实际问题。因此,我们在教学过程的各个环节,特别是具有指挥棒作用的考核环节中,着重体现了“能力培养是首位”的指导思想。 为此,汇编课一直实行多元化考核方式,在考核评分上,平时练习和上机实验占40%,期末考试占60%。期末考试实行开卷考试,这样学生平时学习的关注点就会放在分析问题和编程实现的方法上,有利于学生开阔思路,发挥自身创造力。每年设计开卷考试的考题是有一定难度的,教师必须非常熟悉课程的知识点、重点和难点,以及体现这些知识和能力水平的多种题目类型。 2、实验方式与要求 实验的目标为:加强课堂上相关理论和技术学习的有效性;提高学生上机编程和调试的能力;培养学生科学实践的理念和独立分析问题、解决问题的能力。其设计思想是:实验内容兼顾基础性和综合性,实验题目由简单→复杂,程序功能由单一→综合,实验安排有基本要求题+自选题,实验题类型有验证型和自主创新设计型。 √实验课组织形式: 1.系教学实验室按课程要求负责上机环境配置及实验设备管理; 2.以班为单位组织上机实验,并将上机时间安排表发至每位同学; 3.每单元实验课安排一位助教(助博)负责实验指导和答疑; 4.学生每做完一个实验即可提交老师验收,老师将实验运行结果记录下来作为实验成 绩的依据。验收时教师要注意发现比较突出的好的实验例题(完成时间短、程序运行效率高); 5.要求提交实验报告,根据实验报告及实验运行结果的记录,评出实验成绩,实验成 绩一般占总成绩的30%。 √教师指导方法: 1.大课集体指导。每学期实验前教师安排一次实验指导课,讲解实验方法和实验要求; 2.每次实验课都安排助教(助博)进行个别或集体的实验指导和答疑; 3.对具有共性的、问题比较多的实验,主讲教师在课堂上再进行集体指导; 4.每学期对实验中出现的问题,对照实验题目进行分析、总结,以利于以后的教学。 5.对于实验中有创新点的学生,还可以请他上讲台为同学们介绍他的设计思路,引发大家展开讨论。

新版汇编语言程序设计习题答案(钱晓捷主编)

新版汇编语言程序设计习题答案(钱晓捷主编) 第一章汇编语言基础知识 1.1、简述计算机系统的硬件组成及各部分作用 1.2、明确下列概念或符号: 主存和辅存,RAM和ROM,存储器地址和I/O端口,KB、MB、GB和TB 1.3、什么是汇编语言源程序、汇编程序、目标程序? 1.4、汇编语言与高级语言相比有什么优缺点? 1.5、将下列十六进制数转换为二进制和十进制表示 (1)FFH (2)0H (3)5EH (4)EFH (5)2EH (6)10H (7)1FH (8)ABH 1.6、将下列十进制数转换为BCD码表示 (1)12 (2)24 (3)68 (4)127 (5)128 (6)255 (7)1234 (8)2458 1.7、将下列BCD码转换为十进制数 (1)10010001 (2)10001001 (3)00110110 (4)10010000 (5)00001000 (6)10010111 (7)10000001 (8)00000010 1.8、将下列十进制数分别用8位二进制数的原码、反码和补码表示 (1)0 (2)-127 (3)127 (4)-57 (5)126 (6)-126 (7)-128 (8)68 1.9、完成下列二进制数的运算 (1)1011+1001 (2)1011-1001 (3)1011×1001 (4)10111000÷1001 (5)1011 ∧~1011 (8)1011 ⊕1001 1001(6)1011 ∨1001(7) 1.10 数码0~9、大写字母A~Z、小写字母a~z对应的ASCII码分别是多少?ASCII码为0dh、0ah对应的是什么字符? 1.11、计算机中有一个“01100001”编码,如果把它认为是无符号数,它是10进制什么数?如果认为它是BCD码,则表示什么数?又如果它是某个ASCII码,则代表哪个字符? 1.12、简述Intel 80x86系列微处理器在指令集方面的发展。 1.13、什么是DOS和ROM-BIOS? 1.14、简述PC机最低1MB主存空间的使用情况。 1.15、罗列8086CPU的8个8位和16位通用寄存器,并说明各自的作用。 1.16、什么是标志,它有什么用途?状态标志和控制标志有什么区别?画出标志寄存器FLAGS,说明各个标志的位置和含义。

汇编语言程序设计

实验四程序设计 一、实验目的 学习数据传送指令和算术运算指令的用法;掌握数据定义伪指令的格式,会用DEBUG 中的D命令观察DB、DW、DD存储数据的格式;熟悉汇编语言的基本框架,掌握编写汇编语言程序的基本方法。 二、实验题 1、已知当前数据段中DADT1和DADT2开始分别存放若干字节数据,数据个数相同,编制程序检查两数据块中数据是否相同,若相同,则在屏幕上显示1,否则显示0。 【参考程序如下】 DSEG SEGMENT DATA1 DB 'ABCDEFG3' DATA2 DB 'ABCDEF3G' CNT DW 8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT DEC SI DEC DI AGAIN:INC SI INC DI MOV AL,[SI] CMP AL,[DI] LOOPZ AGAIN JZ DISP DEC DL DISP: MOV AH,2

INT 21H MOV AH,4CH INT 21H CSEG ENDS END START 阅读程序,理解循环程序结构及执行过程,并改成串指令实现。 2 编写程序,将00H~0FH共16个数写入内存3000H开始的连续16个存储单元中。 三、实验报告 写出程序清单,记录运行结果。 改写串指令实现: DSEG SEGMENT DATA1 DB'ABCDEFG3' DATA2 DB'ABCDEF3G' CNT DW8 DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG START:MOV AX,DSEG MOV DS,AX MOV ES,AX MOV DL,31H LEA SI,DATA1 LEA DI,DATA2 MOV CX,CNT CLD

河北工业大学汇编语言知识程序设计实验

汇编语言程序设计实验 网络*** *** 实验一 顺序与分支程序设计 一 、实验目的 1) 掌握顺序程序设计方法。 2) 掌握分支程序的结构及分支程序的设计,调试方法。 2) 学习数据传送及算术和逻辑运算指令的用法。 3) 熟悉在pc 机上建立、汇编、连接、调试和运行汇编语言程序的过程。 二、实验内容 1.实验六 从键盘上接收一位十进制数x ,计算y 值,并以十六进制形式显示出来,y 按下列公式计算。 ???????===-=+=) 6(2/) 5()4(2) 3(22 2 2X X X X X X X X X X Y 2..实验七 实验内容:从键盘上接收两个一位十六进制数x 和y ,然后再输入一个a-d 之间的一个字符,按下列要求计算。 a) 当输入字符为a ,则计算x+y ,并以十六进 制形式显示出来 b) 当输入字符为b ,则计算|x-y|,并以十六进制形式显示出来 c) 当输入字符为c ,则计算x*y ,并以十六进制形式显示出来 d) 当输入字符为d ,则计算x/y ,并以十六进制形式显示出来 三、实验代码 实验六 DATE SEGMENT X DB ?

DATE ENDS ;数据段 CODE SEGMENT ASSUME CS:CODE,DS:DATE START:MOV AX,DATE ;代码段 MOV DS,AX ;初始化ds寄存器 MOV AH,1 INT 21H ;读文件到缓冲区 CMP AL,33H ;比较指令 JB L0 ;A

汇编语言的编程步骤与调试方法

汇编语言的编程步骤与调试方法 一、汇编源程序的建立 1. 使用工具 (1)EDIT,记事本等文本编辑软件,编辑源程序,保存为.asm文 件; (2)ASM,MASM汇编程序,对源程序进行汇编,生成.obj文件- 目标文件,以及调试用.LST-列表文件和.CRF-交叉引用表; (3)Link连接程序,对使用的目标文件和库文件进行连接,生 成.exe文件,同时调试用.map-地址映像文件; 如果源程序无语法错误,上述三步将生成可运行的.exe文件, 如果运行结果无误,则完成对汇编程序的编程,如果运行后结果存 在错误,需要进行调试。 (4)Debug调试程序,对.exe文件进行调试,修改,直到程序正 确。 图3 目标程序生成步骤图2. 编程过程 (1)用文本编辑软件,编写扩展名为.asm的源文程序文件。 (2)用汇编程序对编好的源文件进行汇编。 命令行:masm [*.asm] ↙ 如果源文件中存在语法错误,则汇编程序将指出错误类型及位置,可根据这些信息重新编辑源文件,直至无语法错误,汇编后,将生成指定名称的目标文件.obj。 使用MASM50汇编程序进行汇编,输入命令行masm或者masm *.asm后,根据提示,输入文件名,在汇编没有错误的情况下,如屏幕所示:汇编程序可生成三个文件,*.obj,*.lst和*.crf。 *.obj-目标文件,用于连接生成可执行文件; *.lst-列表文件(可选),汇编语言汇编的机器语言与汇编语言对照表,可用于

调试; *.crf-交叉引用文件(可选),给出了用户定义的所有符号和对每个符号定义、引用的行号。 (3)目标文件的连接 命令行:link [*.obj] [*.obj] [*.lib] ↙ 连接程序,将多个目标程序及库文件,连接生成可执行的*.exe文件,同时可选择生成*.map文件。 *.map-地址映像文件,给出内存地址分配的有关信息。 下图所示屏幕,为Link连接两个目标文件,没有错误的情况下,生成*.exe 文件。 (4)执行程序 执行*.exe文件,观察程序运行结果,如果存在错误,需要进行调试。调试工具DEBUG是针对汇编语言程序设计的一种调试工具,熟练使用DEBUG有助于汇编语言程序员对于逻辑错误的调试。 二、汇编程序的调试

汇编语言程序设计基本方法

第七章汇编语言程序设计基本方法1.教学目的:掌握微型汇编语言程序分析和设计方法 2.教学要求: ①熟悉汇编语言程序设计的基本步骤。 ②掌握程序流程图的使用,会利用其分析问题。 ③掌握汇编语言的顺序、分支、循环程序的设计。 ④了解实模式下80386及其后继机型的汇编语言的程序设计3.教学重点: ①利用流程图分析问题。 ②顺序、分支、循环程序的设计。 4.掌握难点: ①分支程序设计 ②循环程序设计 5.教学进程安排:P137~P168 6.教学方法: 课堂讲授 7.教学内容摘要: 7.1 汇编语言程序设计概述 7.1.1 汇编语言程序设计的基本步骤 1.分析问题,抽象出描述问题的数学模型 2.确定算法 3.绘制流程图 4.分配存储空间和工作单元 5.编写程序 6.静态检查 7.上机调试运行 7.1.2 程序流程图 1. 用自然语言表示算法 2. 流程图的组成 ⑴执行框(矩形框) ⑵判别框(菱形框) ⑶开始框和终止框 ⑷指向线 ⑸连接点 3. 三种基本结构和改进的流程图 ⑴传统流程图的弊端 ⑵三种基本结构 ①顺序结构 ②选择结构 ③循环结构

图7.4 顺序结构图图7.5 选择结构图 4. 结构化程序设计的特点 ⑴只有一个入口 ⑵只有一个出口 ⑶各功能框均可执行 ⑷结构中无死循环 7.2 顺序程序设计 顺序结构程序是最简单的程序,在顺序结构程序中,指令按照先后顺序一条条执行。 【例7-3】将—个字节压缩BCD码转换为两个ASCII码。 7.3 分支程序设计 7.3.1 分支程序的结构形式 分支程序结构可以有两种形式,如图7.6 (1) IF_THEN_ELSE结构 (2) CASE结构 7.3.2 分支程序设计方法 程序的分支一般用条件转移指令来产生,利用转移指令不影响条件码的特性,连续地使用条件转移指令使程序产生了多个不同的分支,而对于数组中的每一个数,它只能是多个分支中的某一个。 【例7-5】在附加段中,有一个按从小到大顺序排列的无符号数数组,其首地址存放在DI 寄存器中,数组中的第一个单元存放着数组长度,在AX中有一个无符号数,要求在数组中查找(AX),如找到,则使CF=0,并在SI中给出该元素在数组中的偏移地址;如未找到,则使CF=1。 【例7-6】折半查找算法程序 7.3.3 跳跃表法

相关主题
文本预览
相关文档 最新文档