汇编语言程序设计 实例详解
第4章汇编语言程序设计PPT教学课件

图 分支程序结构流程图
2020/12/11
《单片机应用技术》教学课件
12Leabharlann 第4章 汇编语言程序设计条件满足? Y
A
4.2.2 分支程序结构
第4章 汇编语言程序设计
目的:1.进一步熟悉指令系统 2.会编写简单的程序 3.上机训练
内容:4.1 汇编语言程序设计概述
4.2 三种程序结构 4.3 程序设计举例
2020/12/11
《单片机应用技术》教学课件
1
第4章 汇编语言程序设计
4.1 汇编语言程序设计概述
所谓程序设计,就是按照给定的任务要求,编写 出完整的计算机程序。要完成同样的任务,使用的方 法或程序并不是唯一的。
汇编后: (1000H)=12H (1001H ) = 34H
(1002H ) = 00H ( 1003H ) = ABH (1004H ) =00H (1005H) =0AH
2020/12/11
《单片机应用技术》教学课件
7
第4章 汇编语言程序设计
• (6)定义存储区伪指令DS
• 功能:从指定地址开始预留一定数量的内 存单元,以备源程序执行过程中使用。预
(4) 编写源程序
(5) 程序优化。
(6)上机调试、修改和最后确定源程序。
2020/12/11
《单片机应用技术》教学课件
10
第4章 汇编语言程序设计
4.2.1 顺序程序设计
顺序结构程序是一种最简单、最基本的程序,按照程序编 写的顺序依次执行。
【例4-1】两个多字节数加法
1.两个三字节无符号相加,其中被加数在内部RAM的 50H、51H和52H单元中;加数在内部RAM的53H、54H和 55H单元中;要求把相加之和存放在50H、51H和52H单元中 进位存放在位寻址区的00H位中。
汇编语言程序例题知识讲解

第一遍101690328
第二遍169032108
第三遍903216108
程序流程图如图5.9所示。
DATASEGMENT
BUFDW 3,-4,6,7,9,2,0,-8,-9,-10,20
N=($-BUF)/2
DATAENDS
STACKSEGNMENT STACK
DB 200 DUP(0)
DI存放ASCII码首地址
出口参数:
转换后的字符串存放在以DI作指针的字节存贮区中
程序清单:
DATASEGMENT
NUM8DB93H
NUM16DW0ABCDH
ASCBUFDB20DUP(0)
DATAENDS
CODESEGMENT
ASSUME DS:DATA,CS:CODE,SS:STACK
START:MOVAX,DATA
题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,需要完成减法运算,即用0减去这个数。8086/8088指令系统中有专门的求相反数的指令NEG。
DATASEGMENT
XDB -25
RESULTDB ?
DATAENDS
CODESEGMENT
程序流程如图下所示。
DATASEGMENT
TABDW P1,P2,P3,P4,P5,P6,P7,P8
NDB 5
DATAENDS
STACKSEGMENT
DB 200 DUP(0)
STACKENDS
CODESEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:MOVAX,DATA
MOVDS,AX
汇编语言编程实例

汇编语言编程实例一、引言汇编语言是计算机硬件和软件之间的桥梁,它是一种低级语言,可以直接控制计算机硬件。
汇编语言编程可以让程序员更加深入地理解计算机的工作原理,从而实现更高效的程序。
本文将介绍几个汇编语言编程实例,涉及到基本的输入输出、循环、条件判断、数组等知识点。
在这些实例中,我们将使用NASM汇编器进行编译和链接。
二、基本输入输出1. 输出字符串在汇编语言中,我们可以使用系统调用来进行输入输出操作。
在Linux 系统中,输出字符串的系统调用为write。
下面是一个输出字符串的示例程序:```section .datamsg db 'Hello, World!',0xa ;定义一个字符串len equ $-msg ;获取字符串长度section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 1 ;exit系统调用号为1xor ebx, ebx ;退出状态码为0int 0x80 ;调用系统调用退出程序```2. 输入数字类似地,在Linux系统中,输入数字的系统调用为read。
下面是一个输入数字的示例程序:```section .datamsg db 'Please enter a number: ',0xa ;提示信息len equ $-msg ;获取字符串长度buf resb 1 ;定义一个字节的缓冲区section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 3 ;read系统调用号为3mov ebx, 0 ;文件描述符为0(标准输入)mov ecx, buf ;缓冲区地址mov edx, 1 ;要读取的字节数int 0x80 ;调用系统调用sub al, '0' ;将ASCII码转换成数字值```三、循环和条件判断1. 计算1到100的和下面是一个计算1到100的和的示例程序,其中使用了循环和条件判断:```section .datasum dd 0 ;定义一个双精度浮点型变量sumsection .textglobal _start_start:xor eax, eax ;eax清零,作为计数器和累加器使用loop_start:inc eax ;eax自增1,相当于i++cmp eax, 100+1 ;比较i是否大于100,注意要加1je loop_end ;如果i等于101,跳转到loop_endadd dword [sum], eax ;将i加到sum中jmp loop_start ;跳转到loop_startloop_end:mov eax, dword [sum] ;将sum赋值给eax,作为返回值mov ebx, 1 ;exit系统调用号为1int 0x80 ;调用系统调用退出程序```2. 判断一个数是否为素数下面是一个判断一个数是否为素数的示例程序,其中使用了循环和条件判断:```section .datamsg db 'Please enter a number: ',0xa ;提示信息len equ $-msg ;获取字符串长度buf resb 1 ;定义一个字节的缓冲区section .textglobal _start_start:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, msg ;要输出的字符串地址mov edx, len ;要输出的字符数int 0x80 ;调用系统调用mov eax, 3 ;read系统调用号为3mov ebx, 0 ;文件描述符为0(标准输入)mov ecx, buf ;缓冲区地址mov edx, 1 ;要读取的字节数int 0x80 ;调用系统调用sub al, '0' ;将ASCII码转换成数字值check_prime:xor ebx, ebx ;ebx清零,作为除数使用mov ecx, eax ;将eax的值赋给ecx,作为被除数使用inc ebx ;将ebx自增1,相当于除数加1cmp ebx, ecx ;比较除数是否大于被除数jge is_prime ;如果除数大于等于被除数,跳转到is_prime xor edx, edx ;edx清零,作为余数使用div ebx ;将ecx/ebx的商放在eax中,余数放在edx中 cmp edx, 0 ;判断余数是否为0je not_prime ;如果余数为0,跳转到not_primejmp check_prime ;跳转到check_primenot_prime:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, not_prime_msg ;要输出的字符串地址mov edx, not_prime_len ;要输出的字符数int 0x80 ;调用系统调用exit:mov eax, 1 ;exit系统调用号为1xor ebx, ebx ;退出状态码为0int 0x80 ;调用系统调用退出程序not_prime_msg db 'The number is not prime.',0xa ;提示信息not_prime_len equ $-not_prime_msgis_prime:mov eax, 4 ;write系统调用号为4mov ebx, 1 ;文件描述符为1(标准输出)mov ecx, is_prime_msg ;要输出的字符串地址mov edx, is_prime_len ;要输出的字符数int 0x80 ;调用系统调用jmp exit ;跳转到exitis_prime_msg db 'The number is prime.',0xa ;提示信息is_prime_len equ $-is_prime_msg```四、数组1. 计算数组的和下面是一个计算数组的和的示例程序:```section .dataarr dd 1, 2, 3, 4, 5 ;定义一个双精度浮点型数组arrn equ ($-arr)/4 ;获取数组长度section .textglobal _start_start:xor eax, eax ;eax清零,作为计数器和累加器使用xor ecx, ecx ;ecx清零,作为数组下标使用loop_start:cmp ecx, n ;比较ecx是否大于等于njge loop_end ;如果ecx大于等于n,跳转到loop_endadd eax, dword [arr+ecx*4] ;将arr[ecx]加到eax中inc ecx ;将ecx自增1,相当于下标加1jmp loop_start ;跳转到loop_startloop_end:mov ebx, eax ;将sum赋值给ebx,作为返回值mov eax, 1 ;exit系统调用号为1xor ecx, ecx ;退出状态码为0int 0x80 ;调用系统调用退出程序```2. 查找数组中的最大值下面是一个查找数组中的最大值的示例程序:```section .dataarr dd 10,20,30,-40,-50,-60,-70,-80,-90,-100 ;定义一个双精度浮点型数组arrn equ ($-arr)/4 ;获取数组长度section .textglobal _start_start:mov eax, dword [arr] ;将arr[0]赋值给eax,作为最大值使用xor ecx, ecx ;ecx清零,作为数组下标使用loop_start:cmp ecx, n ;比较ecx是否大于等于njge loop_end ;如果ecx大于等于n,跳转到loop_endcmp eax, dword [arr+ecx*4] ;比较eax和arr[ecx]jge loop_next ;如果eax大于等于arr[ecx],跳转到loop_next mov eax, dword [arr+ecx*4] ;将arr[ecx]赋值给eax,更新最大值loop_next:inc ecx ;将ecx自增1,相当于下标加1jmp loop_start ;跳转到loop_startloop_end:mov ebx, eax ;将max赋值给ebx,作为返回值mov eax, 1 ;exit系统调用号为1xor ecx, ecx ;退出状态码为0int 0x80 ;调用系统调用退出程序```五、总结本文介绍了几个汇编语言编程实例,涉及到基本的输入输出、循环、条件判断、数组等知识点。
第4章 汇编语言程序设计

因此, 因此,对例子中的存储器地址作如下运 算: SUM+2 CYCLE-5 NOT_DONE-GO 是有效的表达式。 是有效的表达式。而 SUM-CYCLE
(2)逻辑运算符 逻辑运算符是按位操作的AND、OR、 、 逻辑运算符是按位操作的 、 XOR和NOT。 和 。 1010 1010 1010 1010B AND 1100 1100 1100 1100B=1000 1000 1000 1000B 1100 1100 1100 1100B OR 1111 0000 1111 0000B=1111 1100 1111 1100B NOT 1111 1111 1111 1111B=0000 0000 0000 0000B
ASSUME CS:MY_CODE, ;规定 和DS 规定CS和 : 的内容 DS:MY_DATA : PORT_VA1 EQU 3 ;端口的符号名 GO: MOV AX, MY_DATA ;DS : 初始化为MY_DATA 初始化为 MOV DS, AX MOV SUM, 0 ;清SUM单元 单元
变量可以具有以下几种寻址方式: 变量可以具有以下几种寻址方式: ① 直接寻址 ② 基址寻址 变址(索引) ③ 变址(索引)寻址 ④ 基址变址寻址
2.运算符(Operators) .运算符( ) 算术运算符( Operators) ① 算术运算符(Arithmetic Operators) 逻辑运算符( Operators) ② 逻辑运算符(Logical Operators) 关系运算符( Operators) ③ 关系运算符(Relational Operators) 分析运算符( Operators) ④ 分析运算符(Analytic Operators) 合成运算符( Operators) ⑤ 合成运算符(Synthetic Operators)
汇编程序设计举例

③ 循环结束条件:在循环体中包括了循环结束条件运算部分。 每循环一次除了工作部分进行相应的操作外,循环条件部分还要通过 运算,得出当前循环的状态,以便在适当的条件下结束循环。
2. 循环的类型
循环体的结构依照问题的不同,一般可以分为 两种类型:
① 先判断后处理 ② 先处理后判断
3. 控制循环次数的方法
有三种:用计数控制循环,用条件控制循环和用 逻辑变量控制循环。其中,前两种方法用的最多。 ①用计数控制循环
对于循环次数已知的程序,或是在进入循环前可 由某变量确定循环次数的程序,通常用计数器来控 制循环。(用LOOP指令)
(1)利用寄存器。这是一种最常见方法,把所 需传递的参数直接放在主程序的寄存器中传递 给子程序。
(2)利用存储单元。这种参数传递方法,把所 需传递的参数直接放在子程序调用指令代码之 后。
(3)利用堆栈。这种方法将参数压入堆栈,在 子程序运行时从堆栈中取参数。
[例2] 求绝对值 求AX寄存器和BX寄存器中两个无符号数之差
的绝对值,结果放在内存(偏移地址为2800)单元 中。
分析:利用比较指令,判断谁大谁小,然后大 数减小数。
CLC SUB AX,BX JC AA MOV DI,2800H MOV [DI],AX JMP EXIT AA: SUB BX,AX MOV DI,2800H MOV [DI],BX EXIT: MOV AH,4CH INT 21H
1 x>0
[例3] 有一符号函数如下 y=f(x)= 0 x=0
开始
-1 x<0
汇编语言程序设计实例

汇编语言程序设计实例汇编语言是一种非常底层的编程语言,它允许程序员直接与计算机硬件进行交互。
汇编语言程序设计通常用于需要高性能或者对硬件有特定需求的场合。
以下是一些汇编语言程序设计的实例,以帮助理解其基本结构和应用。
实例一:数据传输在汇编语言中,数据传输是最基本的操作之一。
以下是一个简单的数据传输程序实例,它将一个立即数(即直接给出的数值)移动到寄存器中:```assemblymov ax, 1234h ; 将十六进制数1234h移动到ax寄存器```实例二:算术运算汇编语言支持基本的算术运算,如加法、减法、乘法和除法。
以下是一个进行加法运算的例子:```assemblymov ax, 5 ; 将数值5移动到ax寄存器add ax, 3 ; 将数值3加到ax寄存器中```实例三:条件跳转条件跳转是控制程序流程的重要手段。
以下是一个基于条件跳转的简单程序,它检查ax寄存器的值是否为0,并根据结果跳转到不同的代码段:```assemblymov ax, 0 ; 将数值0移动到ax寄存器jz zero ; 如果ax为0,则跳转到标签zero; 继续执行其他代码...zero:; 如果ax为0,执行这里的代码```实例四:循环结构循环结构在汇编语言中实现起来较为复杂,但可以通过重复使用跳转指令来模拟。
以下是一个简单的循环结构实例,它将ax寄存器的值减1,直到值为0:```assemblystart_loop:dec ax ; 将ax寄存器的值减1jnz start_loop ; 如果ax不为0,跳回start_loop```实例五:字符串处理汇编语言程序设计中,字符串处理是一个常见的任务。
以下是一个将字符串从源地址复制到目标地址的程序:```assemblymov si, source ; 将源字符串的地址移动到si寄存器mov di, dest ; 将目标地址移动到di寄存器mov cx, length ; 将字符串的长度移动到cx寄存器copy_loop:movsb ; 从si复制一个字节到diloop copy_loop ; 减少cx的值并重复循环直到cx为0```实例六:子程序调用在汇编语言中,子程序是一种将代码封装成模块化单元的方法。
汇编语言程序设计实验篇(emu8086)

1.汇编语言程序设计实验篇1.1.汇编系统软件简介Emu8086-Microprocessor Emulator是集源代码编辑器、汇编/反汇编工具以及debug 的模拟器。
它能模拟一台"虚拟"的电脑运行程序,拥有独立的“硬件”,避免访问真实硬件。
该软件兼容Intel的下一代处理器,包括PentiumII、Pentium4。
利用该软件提供的调试工具,能够单步跟踪程序,观察程序执行过程中寄存器、标志位、堆栈和内存单元的内容。
1.1.1创建程序 TEMPLATE程序本章与指令相关的实验都是用COM TEMPLATE类型的程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“COM template-simple and tiny executable file format, pure machine code.”后,单击按钮。
在如所示的编辑界面中,在“;add your code here”部分输入相应的指令,第一条指令默认的偏移地址为100h。
输入全部指令后,单击按钮,保存相应的程序段。
2.EXE TEMPLATE程序本章与DOS功能调用和汇编源程序相关的实验都是用EXE TEMPLATE程序完成的。
打开emu8086,在“welcome…”对话框中,单击按钮,创建文件。
在“choose code template”对话框中,选择“EXE template-advanced executable file.header: relocation, checksum.”后,单击按钮。
在如图所示的编辑界面中,已经可以给出了源程序的框架,包含数据段、堆栈段和代码段的定义以及必要的功能调用等,在“add your data here”和“;add your code here”部分可以分别输入相应的变量定义和指令。
汇编语言程序设计 实例详解

_c_int00: start:
Done:
.text B NOP NOP SSBX STM STM RPT MVPD STM STM STM RPTZ MAC STH B .end
start
FRCT #0,SWWSR #x,AR1 #7 table,*AR1+ #x,AR2 #a,AR3 #y,AR4 A,#3 *AR2+,*AR3+,A A,*AR4 done
DARAM2: origin = 0200h,length = 100h
}
SECTIONS
{
.data :> RAM
PAGE 0
.text :> RAM
PAGE 0
PROM :> RAM1 PAGE 0
.bss :> DARAM1 PAGE 1
DATA :> DARAM2 PAGE 1
}
[例7-4]使用C54汇编语言编程计算z1=x1+y1、z2=x1-y1,z3=x1* Z4=x2*y2,观察计算结果。其中,x1=20,y1=54,x2=0.5,y2=-0.5
.bss a,20
.bss x,20
DATA
.bss y,20 .usect “DATA”,20
.text
_c_int00: B start
NOP
NOP
start: STM #a,AR1
;a[20]={0,1,2,3,4,5,6,7,8,9,10,
;11,12,13,14,15,16,17,18,19}
.text
_c_int00: B
start
NOP
start:
LD
#x1,DP
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
;地址 0405h
.bss z3_h,1
;地址 0406h
.bss z3_l,1
;地址 0407h
.bss z4,1
;地址 0408h
v1
.set 014H
;20---x1
v2
.set 036H
;54---y1
v1
.set 04000H
;0.5---x2
v2
.set 0b548H
;-> z1
LD
x1,A
;x1->A
SUB
y1,A
;A+y1 ->A
STL
A,z2
;保存 AL -> z1
;********text MPY(整数)*******
RSBX
FRCT
;FRCT=0 整数乘法
LD
x1,T
;x1 ->T
MPY
y1,A
;x1*y1 ->A (结果32位)
STH
A,z3_h
RPT #39
;x[20]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}
MVPD TBL,*AR1+
STM #x,AR2
;将数据存储器x[20]到y[20]
STM #y,AR3
RPT #19
MVDD *AR2+,*AR3+
STM #a,AR1
;数据存储器a[20]写入程序存储器PROM
Z-1 h(2)
Z-1 h(N-2)
图7-10 横截型FIR数字滤波器的结构图
h(N-1) y(n)
图7-12 FIR滤波器循环缓冲区存储器图
*****采用循环缓冲区法编写的FIR数字滤波器程序*****
.mmrege
.global
start
.def
start, _c_int00
KS
.set
256
FRCT #h,AR2 #4 table,*AR2+ #y,AR5 #x+4,AR1 #h+4,AR2 #4,AR0 #x1,AR3 #x,AR4 #5,BRC loop-1 PA0,*AR3 *AR3,*AR4 *AR1-,T *AR2-,A *AR1*AR2-,A *AR1*AR2-,A *AR1*AR2-,A *AR1+0 *AR2+0,A A,*AR5 *AR5,PA1
MVPD COEF_FIR,*COEF_P+
STM #-1,AR0
;地址步进-1
STM
#DATABUF,DATA_P ;数据缓冲区清0
RPTZ A,#N-1
STL
;乘法结果高16位在z3_h
STL
A,z3_l;乘法结果低16位在z3_l
**************test MPY(小数)*********
****** 0.5x(-0.58374)=-0.29187(0xdaa4)
ST
#v3,x2
ST
#v4,y2
SSBX
FRCT
;准备小数乘法,FRCT=1
LD
a1=0.1,a2=0.2,a3=-0.3,a4=0.4,x1=0.8,x2=0.6,x3=-0.4,x4=-0.2
Table:
.title “chef.asm” .mmregs .def start,_c_int00 .bss x,4 .bss a,4 .bss y,1 .data .word 1*32768/10 .word 2*32768/10 .word -3*32768/10 .word 4*32768/10 .word 8*32768/10 .word 6*32768/10 .word -4*32768/10 .word -2*32768/10
;该指令为单字指令
WAIT: NOP
B
WAIT
.end
建立链接命令文件
MEMORY
{ PAGE 0: RAM: origin = 1000h,length = 800h
RAM1: origin = 2000h,length = 300h
PAGE 1: DARAM1: origin = 0100h,length = 100h
;输入的样本数
N
.set
17
;FIR滤波器阶数
COEF
.sect
“COEF_FIR” ;FIR滤波器系数
.word 1,158,264,-290,-1406,-951,3187,9287,12272
.word 9287,3187,-951,-1406,-290,264,158,0
.data
INPUT
.text
.asg
AR4,DATA_P
.asg
AR5,COEF_P
.asg
AR6,INBUF_P
.asg
AR7,OUTBUF_P
_c_int00: B
start
start:
SSBX FRCT
;小数乘法,FRCT=1
STM
#COEFTAB,COEF_P ;FIR系数从程序区搬移到数据区
RPT #N-1
.copy
“firin.inc”
;输入数据在数据区0x2400
OUTPUT .space
1024
;输入数据在数据区0x2500
COEFTAB .usect
“FIR_COEF”,N
DATABUF .usect
“FIR_BFR”,N
BOS
.usect
“STACK”,0Fh
TOS
.usect
“STACK”,1
RPT #4
;重复执行的次数为5
STL A,*AR1+
****对数组x[5]中的元素加1****
LD #1,16,B
STM #4,BRC
STM #x,AR4
RPTB next-1
ADD *AR4,16,B,A
STH A,*AR4+
next:
LD #0,B
.end
[例7-3] 1.实现数组
a[20]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19}
0213H)
.def _c_int00 .data
TBL:
.word 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19
PROM
.word 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 .usect “PROM”,20
PAGE 1: OTHER: origin = 0100h,length = 100h
}
SECYIONS
{
.text :> ROM
PAGE 0
.data :> ROM
PAGE 0
.bss :> OTHER PAGE 1
.stack :> OTHER PAGE 1
}
4
[例7-5]用双操作数编程计算 y ai xi i 1
LD
#PROM,A
STM #19,AR3
LOOPP: WRITA *AR1+
ADD #1,A,A
BANZ LOOPP,*AR3-
LD
#PROM-1,A ;程序存储器PROM存入数据存储器DATA
STM #DATA,AR1
STM #19,BRC
RPTB LOOP2
ADD #1,A,A
LOOP2: READA *AR1+
.word
4*32768/10
.word
-3*32768/10
.word
2*32768/10
_c_int00: FIR1: loop:
.text SSBX STM RPT MVPD STM STM STM STM STM STM STM RPTB PORTR MVDD LD MPY LTD MAC LTD MAC LTD MAC LTD MAC STH PORTW NOP .end
.bss a,20
.bss x,20
DATA
.bss y,20 .usect “DATA”,20
.text
_c_int00: B start
NOP
NOP
start: STM #a,AR1
;a[20]={0,1,2,3,4,5,6,7,8,9,10,
;11,12,13,14,15,16,17,18,19}
数据 存储器
x(n) x(n-1)
x(n-2) x(n-3)
数据 存储器
数据 存储器
x(n+1) PORTR x(n) x(n-1)
x(n-2)
x(n+2) x(n+1)
x(n) x(n-1)
x(n-4)
x(n-3)
x(n-2)
*Arx-
x(n-5) *Arx- x(n-4) *Arx- x(n-3)
.title "FIR.ASM"
;用线性缓冲区和间接寻址方法实现FIR滤波器
.mmregs
.def
_c_int00
x
.usect
"x",5
h
.usect
"h",5
.bss
x1,1
.bss
y,1
PA0
.set
0
PA1
.set
1
.data
table:
.word
2*32768/10
.word
-3*32768/10
.text
_c_int00: B