文档库 最新最全的文档下载
当前位置:文档库 › 汇编语言32位乘法

汇编语言32位乘法

汇编语言32位乘法
汇编语言32位乘法

assume cs:code,ds:data

data segment

NA dw 0F321H,09AFCH

NB dw 08818H,0301DH

;-------第一个字是等待相乘的数的高16位,第二个是低十六位

T1 dw 0,0,0

T2 dw 0,0,0

;-------32位数乘以16位数不可能大于48位,所以分配3个字

R dw 0,0,0,0

;-------32位数乘以32位数不可能大于64位,所以为结果分配4个字

data ends

code segment

start:mov ax,data

mov ds,ax

;-------初始化段寄存器

Step1:mov ax,NA+2

mov bx,NB+2

mul bx

mov T1+4,ax

mov cx,dx

;-------Number A的低16位乘以Number B 的低十六位,结果存入T1+4 ;进位存入CX

mov ax,NA

mov bx,NB+2

mul bx

mov T1+2,ax

add T1+2,cx

adc T1,dx

;-------Number A的高16位乘以Number B 的低十六位,结果存入T1+4 ;结果存入T1+2,将T1+2与上一次相乘的进位相加存入T1+2

;将第二次相乘的进位带符号相加入T1(前一位的相加可能产生进位) Step2:mov ax,NA+2

mov bx,NB

mul bx

mov T2+4,ax

mov cx,dx

;-------同理

mov ax,NA

mov bx,NB

mul bx

mov T2+2,ax

add T2+2,cx

adc T2,dx

;-------同理

SUM:mov ax,T1+4

mov R+6,ax

mov ax,T2+4

add T1+2,ax

mov ax,T1+2

mov R+4,ax

mov ax,T2+2

adc T1,ax

mov ax,T1

mov R+2,ax

mov ax,T2

adc R,ax

;-------错位相加

mov ax,4C00H

int 21H

code ends

end start

原理图:

NA NA+2

×NB NB+2

——————————————————

T1 T1+2 T1+4

+T2 T2+2 T2+4

——————————————————

R R+2 R+4 R+6

编写一个程序,从键盘上连续输入多个字符,遇到“$”时终止,然后以与输入相反的顺序将该字符串以大写的形式在屏幕上显示出来

要求:用“先进后出”的设计思路,使用堆栈技术,结合DOS的中断调用,实现输入字符串的倒序显示

CODE SEGMENT ;作业

ASSUME CS:CODE,ds:code

org 100h

START:

push cs

pop ds

cld

lea dx,msg

mov ah,9

int 21h ;提示

xor cx,cx

t0:mov ah,1

int 21h ;接收数据

cmp al,'$' ;'$'结束程序

jz show

cmp al,'a'

jb y1

cmp al,'z'

ja y1

sub al,20h ;小写转大写

y1:inc cx

push ax

jmp t0

jcxz quit

show:

mov al,0dh

inc cx

push ax

mov al,0ah

inc cx

push ax ;字符串倒序输出mov cx,cx

next:

pop dx

mov ah,2

int 21h

loop next

quit:

mov ah,1

int 21h ;等待

MOV AX,4C00H

INT 21H

msg db 09,'Input a string...',0dh,0ah,'$'

CODE ENDS

END START

32位汇编语言程序设计上机指导

《32位汇编语言程序设计》上机指导 《32位汇编语言程序设计》上机指导 (1) 实验一建立windows环境下32位汇编语言开发环境 (2) 实验2 指令格式与寻址方式 (4) 实验3 数据操作编程 (5) 实验4 分支和循环程序设计 (6) 实验5 子程序设计 (8) 实验6 输入输出程序设计 (9) 实验7:字符串操作 (10) 实验8:宏结构设计 (11) 实验9:混合编程 (12) Windows环境下32位汇编语言开发环境的建立 (13) 调试程序Windbg (19) 宏汇编命令ML和连接命令LINK常用参数速查 (22) 输入输出宏命令 (23)

实验1 建立windows环境下32位汇编语言开发环境 实验目的:建立windows环境下32位汇编语言开发环境,并熟悉它的使用方法。 实验要求:(1)建立windows环境下32位汇编语言开发环境; (2)熟悉自己建立的开发环境的使用方法; (3)熟悉调试工具的使用 实验内容:(1)定制masm32集成开发环境,使之符合教学要求。 (2)分别建立汇编,连接,和汇编&连接批处理命令,能够生成包含调试信息的目标文件,列表文件,以及能够进行调试的可执行WIN32控制台程序。 (3)建立16位和32位汇编语言框架程序。 (4)在自己建立的开发环境下汇编,连接,运行教材中的例3-1和例3-2。 实验步骤: 1、安装开发环境 运行《32位汇编语言程序设计》教材配套开发环境软件“开发工具.exe”,将MASM32安装在根目录下(例如:c:\masm32)。接着运行Exmasm32.exe,将其它软件安装在masm32的目录下(例如:c:\masm32)。建立masm32文件夹中的qEditor.exe和Windbg.exe桌面快捷方式。 2、定制开发环境 修改文件msm32\bin\buildc.bat中的内容,使得执行Project\Console Assemble & Link后能够汇编连接可调试的32位控制台应用程序,同时生成列表文件。 汇编命令改为: \masm32\bin\ml /c /coff /Fl /Zi “%1.asm” 连接命令改为: \masm32\bin\link /debug “%1.obj” 1、建立汇编连接16位应用程序的批处理文件make16.bat 建立汇编连接16位应用程序的批处理文件make16.bat,可以用于汇编连接可调试的实模式应用程序,同时生成列表文件。 make16.bat的主要内容: \masm32\bin\ml /c /Fl /Zi "%1.asm" \masm32\bin\Link16 /debug "%1.obj" 4、建立适合在定制开发环境下使用的32位应用程序框架 .386 ;必须是第一条非注释语句,说明这是一个32位应用程序 .model flat, stdcall ;定义程序的存储模式(32位应用程序中必须采用flat) include \masm32\include\io32.inc ;可选,如果在程序中使用作者自定义的宏命 令需要这一句 .stack 4096 ;定义堆栈段 .data ;定义数据段 ……;数据定义 .code ;定义代码段 start: ;程序起始点 ……;程序代码 ret ;程序结束点,返回WINDOWS ……;子程序代码 end start ;汇编结束

(完整word版)汇编语言常用指令大全,推荐文档

MOV指令为双操作数指令,两个操作数中必须有一个是寄存器. MOV DST , SRC // Byte / Word 执行操作: dst = src 1.目的数可以是通用寄存器, 存储单元和段寄存器(但不允许用CS段寄存器). 2.立即数不能直接送段寄存器 3.不允许在两个存储单元直接传送数据 4.不允许在两个段寄存器间直接传送信息 PUSH入栈指令及POP出栈指令: 堆栈操作是以“后进先出”的方式进行数据操作. PUSH SRC //Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST //Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器. 执行POP SS指令后,堆栈区在存储区的位置要改变. 执行POP SP 指令后,栈顶的位置要改变. XCHG(eXCHanG)交换指令: 将两操作数值交换. XCHG OPR1, OPR2 //Byte/Word 执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp 1.必须有一个操作数是在寄存器中 2.不能与段寄存器交换数据 3.存储器与存储器之间不能交换数据. XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码. XLAT (OPR 可选) //Byte 执行操作: AL=(BX+AL) 指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码. LEA(Load Effective Address) 有效地址传送寄存器指令 LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中. 执行操作: REG = EAsrc 注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器 MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONE MOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中 LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中 LDS(Load DS with pointer)指针送寄存器和DS指令 LDS REG , SRC //常指定SI寄存器。 执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

汇编语言知识大全

第一章基础知识: 一.机器码:1.计算机只认识0,1两种状态。而机器码只能由0,1组成。故机器码相当难认,故产生了汇编语言。 2.其中汇编由三类指令形成:汇编指令(有机器码对应),伪指令,其他符号(编译的时候有用)。 每一总CPU都有自己的指令集;注意学习的侧重点。 二.存储器:1.存储单元中数据和指令没任何差别。 2.存储单元:Eg:128个储存单元(0~127)128byte。 线: 1.地址总线:寻址用,参数(宽度)为N根,则可以寻到2^N个内存单元。 据总线:传送数据用,参数为N根,一次可以传送N/8个存储单元。 3.控制总线:cpu对元器件的控制能力。越多控制力越强。 四.内存地址空间:1.由地址总线决定大小。 2.主板:cpu和核心器件(或接口卡)用地址总线,数据总线,控制总 线连接起来。 3.接口卡:由于cpu不能直接控制外设,需通过接口卡间接控制。

4.各类存储器芯片:RAM,BIOS(主板,各芯片)的ROM,接卡槽的 RAM CPU在操控他们的时候,把他们都当作内存来对待,把他们总的看作一个由 若干个存储单元组成的逻辑存储器,即我们所说的内存地址空间。 自己的一点理解:CPU对内存的操作是一样的,但是在cpu,内存,芯片之间的硬件本身所牵扯的线是不同的。所以一些地址的功能是对应一些芯片的。 第二章寄存器 引入:CPU中含有运算器,寄存器,控制器(由内部总线连接)。而寄存器是可以用来指令读写的部件。8086有14个寄存器(都是16位,2个存储空间)。 一.通用寄存器(ax,bx,cx,dx),16位,可以分为高低位 注意1.范围:16位的2^16-1,8位的2^8-1 2.进行数据传送或运算时要注意位数对应,否则会报错 二.字:1. 1个字==2个字节。 2. 在寄存器中的存储:0x高位字节低位字节;单元认定的是低单元 数制,16进制h,2进制b

(完整word版)汇编语言指令集合-吐血整理,推荐文档

8086/8088指令系统记忆表 数据寄存器分为: AH&AL=AX(accumulator):累加寄存器,常用于运算;在乘除等指令中指定用来存放操作数,另外,所有的I/O指令都使用这一寄存器与外界设备传送数据. BH&BL=BX(base):基址寄存器,常用于地址索引; CH&CL=CX(count):计数寄存器,常用于计数;常用于保存计算值,如在移位指令,循环(loop)和串处理指令中用作隐含的计数器. DH&DL=DX(data):数据寄存器,常用于数据传递。他们的特点是,这4个16位的寄存器可以分为高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。这2组8位寄存器可以分别寻址,并单独使用。 另一组是指针寄存器和变址寄存器,包括: SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置; BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置; SI(Source Index):源变址寄存器可用来存放相对于DS段之源变址指针; DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。 指令指针IP(Instruction Pointer) 标志寄存器FR(Flag Register) OF(overflow flag) DF(direction flag) CF(carrier flag) PF(parity flag) AF(auxiliary flag) ZF(zero flag) SF(sign flag) IF(interrupt flag) TF(trap flag) 段寄存器(Segment Register) 为了运用所有的内存空间,8086设定了四个段寄存器,专门用来保存段地址: CS(Code Segment):代码段寄存器; DS(Data Segment):数据段寄存器; SS(Stack Segment):堆栈段寄存器;

汇编语言指令表

汇编语言指令表文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

伪指令 1、定位伪指令 ORG m 2、定义字节伪指令 DB X1,X2,X3,…,Xn 3、字定义伪指令 DW Y1,Y2,Y3,…,Yn 4、汇编结束伪指令 END 寻址方式 MCS-51单片机有五种寻址方式: 1、寄存器寻址 2、寄存器间接寻址 3、直接寻址 4、立即数寻址 5、基寄存器加变址寄存器间接寻址 6、相对寻址 7、位寻址 数据传送指令 一、以累加器A为目的操作数的指令(4条) MOV A,Rn ;(Rn)→A n=0~7 MOV A,direct ;( direct )→A MOV A,@Ri ;((Ri))→A i=0~1 MOV A,#data ; data →A 二、以Rn为目的操作数的指令(3条) MOV Rn ,A;(A)→ Rn MOV Rn ,direct;( direct )→ Rn MOV Rn ,#data; data → Rn 三、以直接寻址的单元为目的操作数的指令(5条) MOV direct,A;(A)→direct MOV direct,Rn;(Rn)→direct MOV direct,direct ;(源direct)→目的direct MOV direct,@Ri;((Ri))→direct MOV direct,#data; data→direct 四、以寄存器间接寻址的单元为目的操作数的指令(3条) MOV @Ri,A;(A)→(Ri) MOV @Ri,direct;(direct)→(Ri) MOV @Ri,#data; data→(Ri) 五、十六位数据传送指令(1条) MOV DPTR,#data16;dataH→DPH,dataL →DPL

使用VS2015调试罗云彬的32位汇编语言源代码

使用VisualStudio2015 调试罗云彬的32位汇编语言附属光盘中的汇编源代码 (第三版琢石成器版) 整理:太虚野老

本文介绍使用Visual Studio 2015 调试汇编源代码。以罗云彬的《Windows环境下32位汇编语言程序设计(最新琢石成器版)》附属光盘中的汇编源代码为例。 1.创建ASM项目 打开Visual Studio 2015,选择新建一个VC++项目。选择“空项目”,输入项目名称,点确定。 在工程中的“源文件”文件夹新建“.asm”类型的源文件: 在这里会发现不能新建“.asm”类型的文件,选择“C++文件(.cpp)”,然后在文件结尾加上扩展名.asm。

现在项目和源文件都有了,但是这毕竟是个VC++的空项目,VC++项目在默认情况下是不会编译.asm类型的源文件的。所以你点击“生成解决方案”发现根本什么都没有生成,Debug文件夹是空的,就会出现这样的现象。 事实上在创建源文件时,可以使用任意格式的源文件。例如使用文本文件:

要经过下面两步设置。 第一步,右击解决方案选择“生成依赖项”→“生成自定义”: 把“MASM”那项勾上,确定。

第二步,右击你创建的.asm源文件,选择属性,在配置属性->常规->项类型下拉菜单中选择“Microsoft Macro Assembler”。这样就指定了你源文件的类型是.asm格式的,如果不指定默认就是按照.cpp也就是c++语法去编译自然是行不通的。 设置这些之后还要去修改项目配置,这样程序才能得以运行。这包括是否连接其他的库文件(.lib)、是否调试、子系统的原型环境。这些全部都在项目属性中设置。打开项目属性的方法:你可以在刚才右键点“生成自定义”那里选择最下面的属性,也可以在项目选项卡里找到“属性”一项然后选择。 选择配置属性->连接器。 把调试->生成调试信息改为“是(/Debug)”。在Visual Studio 2015中默认是“true”; 把系统->子系统改为“控制台(/SUBSYSTEM:CONSOLE)”:

32位乘法器性能比较

32位乘法器性能比较 对基于阵列乘法器、修正布斯算法(MBA)乘法器、华莱士(WT)乘法器和MBA-WT混合乘法器的四种架构的32位乘法器性能进行了比较,在选择乘法器时,应根据实际应用,从面积、速度、功耗等角度权衡考虑。 乘法是数字信号处理中重要的基本运算。在图像、语音、加密等数字信号处理领域,乘法器扮演着重要的角色,并在很大程度上左右着系统性能。随着实时信号处理的提出和集成电路工艺水平的进步,人们开始致力于高速乘法器设计。 最初,阵列乘法采用移位与求和算法,部分乘积项(Partial Product, PP)数目决定了求和运算的次数,直接影响乘法器的速度。修正布斯算法(Modified Booth Algorithm, MBA)对乘数重新编码,以压缩PP。华莱士树(Wallace Tree, WT)结构改变求和方式,将求和级数从O(N)降为O(logN),提高了运算速度,但是WT存在结构不规整,布线困难的缺点。用4:2压缩器(4: 2 compressor)代替全加器(FA)可以解决这一问题。将MBA算法和WT结构的优点相结合,形成了MBA-WT乘法器。 以下1~4节将分别介绍阵列乘法器、MBA乘法器、WT乘法器、MBA?WT乘法器。最后对四种乘法器的性能进行比较,并总结全文。 1 阵列乘法器 阵列乘法器基于移位与求和算法。被乘数与乘数中的某一位相乘,产生一组PP,将该组PP移位,使LSB与乘数对应位对齐;求出全部PP,并相应移位;对所有PP求和,得到乘积。因此,加法阵列结构非常重要。CRA (Carry Ripple Adder)存在进位问题,运算速度慢。CSA (Carry Save Adder)将本级进位传至下级,求和速度快,且速度与字长无关。阵列乘法器中,CSA 把PP阵列缩减至Sum和Carry两项,再用高速加法器求和得积。阵列乘法器结构规范,利于布局布线。 因为乘数和被乘数可正、可负,所以一般用二进制补码表示,以简化加、减运算。补码运算需要符号扩展,符号扩展宽度与加法器结构有关。对于CRA,加数和被加数符号扩展至本级和的最高位;对于CSA,扩展至两数最高位对齐。符号扩展增加了符号位扇出,使电容负载不平衡,影响电路整体速度;需要冗余的加法器,扩大了版图面积。符号扩展问题可用以下算法解决[1]。假设P1=A、P2=B,求A+B: ①将A符号位扩展一位,对扩展位取反;②将B符号位取反;③在B符号位左边添1;④求和。 假设两个6位部分积A、B相加,需扩展一位符号位,如图1(a)所示;采用新算法后,计算式如图1(b)所示;相应6×6乘法

32位快速乘法器 压缩树连线

34B,33:0 636261605958575655545352515049484746454443424140393837 3635343332313029282726252423222120191817161514131211109876543210A PP0333333333332313029282726252423222120191817161514131211109876543210B PP1 33333332313029282726252423222120191817161514131211109876543210NU NU CIN PP233 3231302928272625242322212019181716151413121110987654321034B,33:0 636261605958575655545352515049484746454443424140393837 363534333231302928272625242322212019181716151413121110987654 3 2 1 A PP33332313029282726252423222120191817161514131211109876543210 B C13 333332313029282726252423222120191817161514131211109876543210NU CIN S1******* 3231302928272625242322212019181716151413121110987654321034B,33:0 636261605958575655545352515049484746454443424140393837 3635343332313029282726252423222120191817161514131211109876 54 3210 A PP4333333333332313029282726252423222120191817161514131211109876543210 B PP5 33333332313029282726252423222120191817161514131211109876543210NU NU CIN PP6333231302928272625 242322212019181716151413121110987654321034B,33:0 636261605958575655545352515049484746454443424140393837 36353433323130292827262524232221201918171615141312 11109 8 76543210 A PP733333332313029282726252423222120191817161514131211109876543210NU B PP8 3332313029282726252423222120191817161514131211109876543210CIN C1433333333323130292827262524 23222120191817161514131211109876543210 34B,33:0 636261605958575655545352515049484746454443424140393837 363534333231302928272625242322212019181716 151413121110 9876543210 A PP9333333333332313029282726252423222120191817161514131211109876543210 B PP10 33333332313029282726252423222120191817161514131211109876543210NU NU CIN PP1133323130292827262524232221201918171615 1413121110987654321034B,33:0 636261605958575655545352515049484746454443424140393837 363534333231302928272625242322 2120191817161514131211109876543210 A PP123332313029282726252423222120191817161514131211109876543210 B C11 333332313029282726252423222120191817161514131211109876543210NU CIN S11333333323130292827262524232221201918171615 14131211109876543210 34B,33:0 63626160595857565554535251504948474645444342414039383736353433323130292827262524 2322212019181716151413121110 9876543210 A PP13333333333332313029282726252423222120191817161514131211109876543210 B PP14 33333332313029282726252423222120191817161514131211109876543210NU NU CIN PP15333231302928272625242322212019181716151413121110987654321038B,37:0 6362616059585756555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210 A PP16313029282726252423222120191817161514131211109876543210NU I15 B C12 32313029282726252423222120191817161514131211109876543210NU CIN S123332313029282726252423222120191817161514131211109876543210NU I14NU I1340B,39:0 6362616059585756555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210 A S213333333333333332313029282726252423222120191817161514131211109876543210 B C22 3635343332313029282726252423222120191817161514131211109876543210NU NU NU CIN S22373635343332313029282726252423222120191817161514131211109876543210NU I1239B,38:0 636261605958575655545352515049484746454443424140393837 3635343332313029282726252423222120191817161514131211109876543210 A C243332313029282726252423222120191817161514131211109876543210NU NU B S24 333332313029282726252423222120191817161514131211109876543210 NU CIN S143333333333333231302928272625 2423222120191817161514131211109876543210 46B,45:0 636261605958575655545352515049484746454443424140393837363534333231302928272625242322212019181716151413121110 9876543210 A C2133333333333332313029282726252423222120191817161514131211109876543210NU B C31 38373635343332313029282726252423222120191817161514131211109876543210NU CIN S313938373635343332313029282726252423222120191817161514131211109876543210NU I11NU I10NU I946B,45:0 636261605958575655545352515049484746454443424140393837 3635343332313029282726252423222120191817161514131211109876543210A C2333333333333333333333333332313029282726252423222120191817161514131211109876543210NU B S23 3333333333333333333333333332313029282726252423222120191817161514131211109876543210CIN C32383736353433323130292827262524 23222120191817161514131211109876543210I6NU I5NU I4NU I3 47B,46:0 636261605958575655545352515049484746454443424140393837 3635343332313029282726252423222120191817161514131211109876543210A C424544434241403938373635343332313029282726252423222120191817161514131211109876543210NU B S32 383838373635343332313029282726252423222120191817161514131211109876543210NU NU NU NU NU NU CIN S4245454443424140393837363534333231 3029282726252423222120191817161514131211109876543210 57B,56:0 6362616059585756555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210 A C4144434241403938373635343332313029282726252423222120191817161514131211109876543210NU NU NU NU NU NU NU NU B S41 4544434241403938373635343332313029282726252423222120191817161514131211109876543210NU I8NU I7NU NU NU CIN C5146464646464646464646464544434241403938373635343332313029282726252423222120191817161514131211109876543210 64B,63:0 6362616059585756555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210A C61555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210NU NU B S61 56555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210NU CIN S51 4646464646464646464646464544434241403938373635343332313029282726252423222120191817161514131211109876543210NU I2NU I1NU I0636261605958575655545352515049484746454443424140393837 3635343332313029282726252423222120191817161514131211109876543210fin C7162616059585756555453525150494847464544434241403938373635343332313029282726252423222120191817161514131211109876543210fin S716362616059585756555453525150494847464544434241403938373635343332313029 2827 2625 2423 2221 2019 18 171615141312 11109876543210 CSA21CSA13CSA23CSA14CSA24CSA11CSA51CSA61CSA71CSA12CSA22CSA31CSA32CSA41CSA42

STM32汇编语言 左右跑马灯

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;; STM32 LED左右跑马灯实验 ;;8个LED接在PE口(PE[0..7]) ;;LED先向右跑,跑完再向左跑,不停左右跑动 ;;2011-5-3 by 追梦;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BIT6 EQU 0X00000040 GPIOE EQU 0X40011800 ;GPIOE 地址 GPIOE_CRL EQU 0X40011800 ;低配置寄存器 GPIOE_CRH EQU 0X40011804 ;高配置寄存器 GPIOE_ODR EQU 0X4001180C ;输出,偏移地址0Ch GPIOE_BSRR EQU 0X40011810 ;低置位,高清除偏移地址10h GPIOE_BRR EQU 0X40011814 ;清除,偏移地址14h IOPEEN EQU BIT6 ;GPIOE使能位 RCC_APB2ENR EQU 0X40021018 STACK_TOP EQU 0X20002000 AREA RESET,CODE,READONLY DCD STACK_TOP ;MSP主堆栈指针 DCD START ;复位,PC初始值 ENTRY;指示开始执行 START LDR R1,=RCC_APB2ENR LDR R0,[R1] ;读 LDR R2,=IOPEEN ORR R0,R2 ;改 STR R0,[R1] ;写,使能GPIOE时钟 ;PE[0..7] 8个引脚均设置成推挽式输出 LDR R0,=0x33333333 LDR R1,=GPIOE_CRL STR R0,[R1] LDR R1,=GPIOE_ODR LDR R0,=0X7F ;初始时最高位点亮 MOV R2,#0 LOOP STR R0,[R1] PUSH {R0} MOV R0,#300 BL.W DELAY_NMS ;延时300ms POP {R0} ADD R2,#1

单片机汇编语言指令集

汇编语言的所有指令数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2 格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O

INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位 SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL

汇编语言指令

汇编语言指令集 数据传送指令集 MOV 功能: 把源操作数送给目的操作数 语法: MOV 目的操作数,源操作数 格式: MOV r1,r2 MOV r,m MOV m,r MOV r,data XCHG 功能: 交换两个操作数的数据 语法: XCHG 格式: XCHG r1,r2 XCHG m,r XCHG r,m PUSH,POP 功能: 把操作数压入或取出堆栈 语法: PUSH 操作数POP 操作数 格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA 功能: 堆栈指令群 格式: PUSHF POPF PUSHA POPA LEA,LDS,LES 功能: 取地址至寄存器 语法: LEA r,m LDS r,m LES r,m XLAT(XLATB) 功能: 查表指令 语法: XLAT XLAT m 算数运算指令 ADD,ADC 功能: 加法指令 语法: ADD OP1,OP2 ADC OP1,OP2 格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data 影响标志: C,P,A,Z,S,O SUB,SBB 功能:减法指令 语法: SUB OP1,OP2 SBB OP1,OP2

格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,O INC,DEC 功能: 把OP的值加一或减一 语法: INC OP DEC OP 格式: INC r/m DEC r/m 影响标志: P,A,Z,S,O NEG 功能: 将OP的符号反相(取二进制补码) 语法: NEG OP 格式: NEG r/m 影响标志: C,P,A,Z,S,O MUL,IMUL 功能: 乘法指令 语法: MUL OP IMUL OP 格式: MUL r/m IMUL r/m 影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志) DIV,IDIV 功能:除法指令 语法: DIV OP IDIV OP 格式: DIV r/m IDIV r/m CBW,CWD 功能: 有符号数扩展指令 语法: CBW CWD AAA,AAS,AAM,AAD 功能: 非压BCD码运算调整指令 语法: AAA AAS AAM AAD 影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD) DAA,DAS 功能: 压缩BCD码调整指令 语法: DAA DAS 影响标志: C,P,A,Z,S 位运算指令集 AND,OR,XOR,NOT,TEST 功能: 执行BIT与BIT之间的逻辑运算 语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m 影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL 功能: 移位指令 语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL 影响标志: C,P,Z,S,O ROR,ROL,RCR,RCL

16、32位微机原理、汇编语言与接口技术教程课后复习题答案

《16/32位微机原理、汇编语言及接口技术教程》 部分习题参考解答 第1章微型计算机系统概述 〔习题1.2〕 什么是通用微处理器、单片机(微控制器)、DSP芯片、嵌入式系统? 〔解答〕 通用微处理器:适合较广的应用领域的微处理器,例如装在PC机、笔记本电脑、工作站、服务器上的微处理器。 单片机:是指通常用于控制领域的微处理器芯片,其部除CPU外还集成了计算机的其他一些主要部件,只需配上少量的外部电路和设备,就可以构成具体的应用系统。 DSP芯片:称数字信号处理器,也是一种微控制器,其更适合处理高速的数字信号,部集成有高速乘法器,能够进行快速乘法和加法运算。 嵌入式系统:利用微控制器、数字信号处理器或通用微处理器,结合具体应用构成的控制系统,其典型的特点是把计算机直接嵌入到应用系统之中。 〔习题1.5〕 说明微型计算机系统的硬件组成及各部分作用。 〔解答〕 CPU:CPU也称处理器,是微机的核心。它采用大规模集成电路芯片,芯片集成了控制器、运算器和若干高速存储单元(即寄存器)。处理器及其支持电路构成了微机系统的控制中心,对系统的各个部件进行统一的协调和控制。 存储器:存储器是存放程序和数据的部件。 外部设备:外部设备是指可与微机进行交互的输入(Input)设备和输出(Output)设备,也称I/O设备。I/O设备通过I/O接口与主机连接。

总线:互连各个部件的共用通道,主要含数据总线、地址总线和控制总线信号。 〔习题1.6〕 什么是总线?微机总线通常有哪3组信号?各组信号的作用是什么? 〔解答〕 总线:传递信息的共用通道,物理上是一组公用导线。 3组信号线:数据总线、地址总线和控制总线。 (1)地址总线:传输将要访问的主存单元或I/O端口的地址信息。 (2)数据总线:传输读写操作的数据信息。 (3)控制总线:协调系统中各部件的操作。 〔习题1.7〕 简答如下概念: (1)计算机字长 (2)取指-译码-执行周期 (3)ROM-BIOS (4)中断 (5)ISA总线 〔解答〕 (1)处理器每个单位时间可以处理的二进制数据位数称计算机字长。 (2)指令的处理过程,即指处理器从主存储器读取指令(简称取指),翻译指令代码的功能(简称译码),然后执行指令所规定的操作(简称执行)的过程。 (3)ROM-BIOS是“基本输入输出系统”,操作系统通过对BIOS的调用驱动各硬件设备,用户也可以在应用程序中调用BIOS中的许多功能。 (4)中断是CPU正常执行程序的流程被某种原因打断、并暂时停止,转向执行事先安排好的一段处理程序,待该处理程序结束后仍返回被中断的指令继续执行的过程。 (5)ISA总线是指IBM PC/AT机上使用的系统总线。 〔习题1.8〕 下列十六进制数表示无符号整数,请转换为十进制形式的真值: (1)FFH (2)0H (3)5EH (4)EFH 〔解答〕 (1) 255 (2) 0 (3) 94 (4) 239

乘法器(EDA)

基于FPGA的乘法器设计课程设计报告 题目名称:基于FPGA的乘法器设计学生姓名:姚荣 学号: 2011508195 专业年级:电子信息工程2011级 指导教师:钟福如 时间: 2014.1.5

基于FPGA的乘法器设计 一、设计任务与要求: 1)有输入端口“读入”接收读入指示信号;“读入”信号为 “1”时开始读数,信号为“0”时停止读数; 2)乘数为位宽16bit的二进制有符号数; 3)两个16bit乘数先后经1bit位宽端口串行输入系统; 4)两个乘数的16bit均输入完成后送交后续模块做乘法运算; 5)乘法运算部分要求利用流水线架构实现;乘法结果保留 24bit; 6)结果输出时,有指定管脚给出指示信号; 7)有“同步复位”端口(1bit),此端口输入“1”后,整 个系统强制回归到初始状态; 二、方案设计与论证: 2.1组合电路乘法器 组合电路乘法器采用了很多的寄存器和加法器进行运算,占用了很大的资源,稳定性也比较低,思路复杂难与设计。 2.2基于时序电路的位移相加型16位硬件乘法器 基于时序电路的位移相加型16位硬件乘法器从工程实际设计上来说,它往往会利用时序逻辑设计的方法来实现,属于时序逻辑范畴。其思路清析,好理解,稳定性较高,具有很好的工程实际性,因此选用本方案。 三、基于时序电路的位移相加型16位硬件乘法器基本原理:

该乘法器是由16位加法器构成的以时序方式设计的16位乘法器。其乘法原理是:乘法通过逐项移位相加原理来实现,从被乘数的最低位开始, 若为1,则乘数左移后与上一次的和相加; 若为0,左移后以全零相加,直至被乘数的最高位。 从图10-2的逻辑图及其乘法操作时序图图1(示例中的相乘数为C6H和FDH )上可以清楚地看出此乘法器的工作原理。 图2中,START信号的上跳沿及其高电平有两个功能,即32位寄存器清零和被乘数A[15..0]向移位寄存器SREG16B加载;它的低电平则作为乘法使能信号。 CLK为乘法时钟信号。当被乘数被加载于16位右移寄存器SREG16B后,随着每一时钟节拍,最低位在前,由低位至高位逐位移出。当为1时,1位乘法器ANDARITH打开,16位乘数B[15..0]在同一节拍进入16位加法器,与上一次锁存在16位锁存器REG16B 中的高16位进行相加,其和在下一时钟节拍的上升沿被锁进此锁存器。 而当被乘数的移出位为0时,与门全零输出。如此往复,直至16个时钟脉冲后,最后乘积完整出现在REG32B端口。在这里,1位乘法器ANDARITH的功能类似于1个特殊的与门,即当ABIN为‘1’时,DOUT直接输出DIN,而当ABIN为‘0’时,DOUT输出全“0000000000000000”。 图1 16位移位相加乘法器运算逻辑波形图

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