汇编语言课程设计编写两个四位无符号十进制数乘法程序

合集下载

汇编语言-使用位操作指令实现双字数乘4

汇编语言-使用位操作指令实现双字数乘4
;Example assembly language program -- Multiple the dword numbers in DX and AX by 4
; Author: duchuanhu
; Date: revised 12/08
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
mov cl, 16
shl eax, cl
mov ax, bx
output prompt2
dtoa number, eax
output number
INVOKE ExitProcess, 0 ; exit with return code 0
PUBLIC _start ; make entry point public
年级
2010级
班号
学号
专业
计算机科学与技术
姓名
实验名称
使用位操作指令实现双字数乘4
实验
类型
设计型
综合型
创新型








1、题目:将DX,AX中的双子长的数乘4
2、要求:已知DX中存放着双字长数的高16位,AX中存放着双字长低16位,现要求将整个双字长的数乘4,亦左移2位。










源程序代码如下:
INCLUDE io.h ; header file for input/output
cr EQU 0dh ; carriage return character

PIC16F877A简单计算器设计报告 汇编语言 四位无符号整数加减乘除

PIC16F877A简单计算器设计报告 汇编语言 四位无符号整数加减乘除

课程设计报告课程名称:单片机原理与接口技术课程设计设计题目:简单计算器院系:机电工程学院班级:2010级电气工程及其自动化专业姓名:学号:指导教师:史丽萍,闫广明,张波,张扬,王冠然设计时间:2013年12月一、设计方案描述与论证我们所设计的是一个简单计算器,它具有四位数以内的整数加减乘除运算。

可以在输入错误的时候退格,也可以初始化。

在初始化的状态下可以进行关机以减少耗能。

显示使用的数码管扫描显示的方法来显示数字,所以我们每一次运算前我们都需要将个位、十位、百位和千位相结合。

我们使用的是4×4的键盘,检测的时候是进行键盘扫描来完成确定哪一个键被摁下,然后是否释放。

键盘被摁下后,先判断是什么键。

如果是数字键,则进行数的输入,首先先把百位的数值赋给千位,十位赋给百位,个位赋给十位,然后把摁下键的对应数赋给个位。

如果是算法键,则将对应的算法寄存地址赋上相应算法的值,并且在下一次输入数字时把十位、百位和千位清零以完成下一次的赋值,而这一次的值将转换为一个数储存在相应的地址中。

当按下的是退格键,则将十位赋值给个位,百位赋值给十位,千位赋值给百位然后千位清零。

当按下的是等号键的时候,将前一次储存的数取出与这一次的数进行相应的运算然后将得到的二进制数拆分为个位、十位、百位和千位然后扫描显示就可以。

复位键是使用的中断,当个位、十位、百位和千位都不为零的时候按下将会初始化计算器的所有数据,如果个位、十位、百位和千位均为零这进入休眠状态等待下一次中断的唤醒。

二、硬件设计部分我们使用的是PIC16F877A单片机,使用四位的八段数码管,4×4的键盘和一个独立的中断键。

八段数码管我们使用的是共基极的接法,所以当给出低电平的时候导通,给出高电平的时候关断。

我们以RD端口来控制段选,分别以RB0控制a、RB1控制b、RB2控制c、RB3控制d、RB4控制e、RB5控制f、RB6控制g和RB7控制dp。

以RD1、RD2、RD3和RD4端口分别控制位选的千位、百位、十位和个位。

《EDA课程设计2位十进制四则运算电路》

《EDA课程设计2位十进制四则运算电路》

《电子设计自动化》课程设计题目:2位十进制四则运算器电路院(系)信息科学与工程学院专业通信工程届别2011级班级1班学号1115102040姓名韦桂任课老师彭盛亮摘要本次课程设计主要内容是采用VHDL语言实现2位十进制数四则运算编程,用Quartus II 软件实现功能仿真,并完成硬件测试。

本次试验目的是:输入任意两个两十进制位数(0~99),选择计算模式(加减乘除),输出它们的计算结果,利用四个数码 LED 分别显示输入的两个两位数,利用四个发光二极管显示计算模式(每次只有一个二极管发光),利用另外四个数码管显示计算结果;实现方法是:将整个系统分为输入模块,计算模块和输出模块三个部分组成。

输入模块由3个脉冲键,2个复位键和2个使能端组成;计算模块分别为加法器,减法器,乘法器,除法器;输出模块通过8个数码管和4个发光二极管分别显示运算数值,运算结果和运算模式。

经过多次修改,波形仿真和硬件测试均成功。

设置两个计数器的复位键,以便于输入比较大的数之后,想进行比较小的数字的运算可以按复位键,以减少按键5或键6的次数,设置模块时,为使电路看起来更加简洁,应减少使用电路模块,如:都除以10取余时,把除数端口都连接在同一个常数端。

目录第一部分系统设计 (4)1.1设计要求: (4)1.2系统设计方案: (4)1.2.1设计总思路: (4)1.2.2实验的主要方法: (4)1.2.3电路设计: (4)1.2.4实验电路图: (4)(1)总电路 (5)(2)输入模块: (5)(3)计算模块 (5)(4)输出模块: (6)1.2.5:总体方法的论证与比较: (7)第二部分软件设计 (7)2.1软件设计平台 (7)2.2程序流程图 (7)2.3实验相关程序 (7)2.3.1clkA与clkB中需要用的100进制计数器cnt100: (7)2.3.2.四进制计数器cnt4程序: (8)2.3.3.nu15_add中需用的加法程序: (9)2.3.4.nu15_sub中需要用的减法程序: (9)2.3.5.nu15_mod程序: (10)2.4 总电路波形仿真 (11)2.5 管脚分配 (11)(1)Input: (11)(2)Output: (11)第三部分系统测试 (12)3.1 软件测试结构综合结果 (12)3.2仪器设备名称、型号 (12)3.3功能测试方法、步骤: (12)第四部分结论及收获 (13)4.1结论 (13)4.2致谢 (13)4.3 参考文献 (13)第一部分系统设计1.1设计要求:输入两个2位十进制数(0~99),输出它们的四则运算(加减乘除)结果;发光二极管显示运算模式;可调用LPM_MULT及LPM_DIVIDE模块。

汇编语言乘法指令

汇编语言乘法指令

汇编语言乘法指令汇编语言中,乘法指令是一种能够进行两个数相乘的命令。

乘法指令的操作数可以是寄存器或内存中的数据,这些数据的长度最常见为一个字节、一个字(两个字节)或一个双字(四个字节)。

汇编语言中的乘法指令通常包括两个操作数,即被乘数和乘数。

被乘数通常会存储在一个寄存器中,而乘数则可以是一个寄存器、立即数(即一个常量,可以直接写在指令中)或者内存中的数据。

汇编语言中的乘法指令可以进行无符号整数的乘法计算,也可以进行有符号整数的乘法计算。

当进行有符号整数的乘法计算时,需要注意符号位的处理。

在Intel x86架构的处理器中,乘法指令有MUL和IMUL两种。

其中,MUL指令可以进行无符号整数的乘法计算,而IMUL指令则可以进行有符号整数的乘法计算。

下面是MUL指令和IMUL指令的语法格式:MUL destinationIMUL destination, source其中,destination和source可以是寄存器、立即数或内存中的数据。

在使用MUL指令或IMUL指令时,需要注意操作数的长度和寄存器的存储范围。

例如,在32位的处理器中,MUL指令和IMUL指令可以进行32位无符号整数的乘法计算,但是操作数必须存储在EAX寄存器中,并且乘积(即结果)也只能存储在EAX和EDX这两个寄存器中。

在使用乘法指令时,需要注意溢出的问题。

如果乘积超出了所分配的寄存器的存储范围,就会发生溢出,从而产生错误的结果。

总之,乘法指令是汇编语言中非常常见的一种指令。

合理使用乘法指令可以大大提高程序的运行效率。

但是,在使用乘法指令时需要注意操作数的长度、寄存器的存储范围和溢出的问题,以保证程序的正确性和稳定性。

汇编语言设计乘法运算

汇编语言设计乘法运算

汇编语言设计乘法运算在计算机科学中,汇编语言是指一种低级的程序设计语言,用于编写机器语言指令以及控制计算机硬件的操作。

汇编语言相对于高级语言而言,更接近计算机的底层结构,具有更高的执行效率和灵活性。

在汇编语言中,乘法运算是一种常见的操作,本文将探讨汇编语言设计乘法运算的原理和实现方法。

一、乘法运算的原理乘法运算是指对两个数进行相乘的操作,其结果称为积。

在计算机中,乘法运算是通过对操作数进行逐位相乘和累加操作来实现的。

具体而言,乘法运算可以分为以下几个步骤:1. 初始化:将累加器清零,并将被乘数和乘数分别加载到寄存器中。

2. 逐位相乘:从低位开始,将被乘数的每一位与乘数相乘,并将结果累加到累加器中。

3. 位移操作:将乘数逐位左移一位。

4. 重复步骤2和步骤3,直到乘数的所有位都处理完毕。

5. 结果获取:将累加器中的结果读取出来,即为乘法运算的结果。

二、乘法运算的实现方法在汇编语言中,乘法运算可以通过汇编指令来实现。

以下是一种简单的实现方法,以x86架构为例:```assemblysection .data ; 数据段a dw 5 ; 被乘数b dw 3 ; 乘数result dw 0 ; 结果section .text ; 代码段global _start ; 程序入口点_start:mov ax, [a] ; 将被乘数加载到寄存器ax中mov bx, [b] ; 将乘数加载到寄存器bx中xor dx, dx ; 清零累加器dxmultiply_loop:test bx, 1 ; 检查乘数的最低位是否为1jz shift ; 如果为0,跳转到shift标记处add dx, ax ; 如果为1,将被乘数累加到dx中shift:shr bx, 1 ; 将乘数逐位右移一位shl ax, 1 ; 将被乘数逐位左移一位cmp bx, 0 ; 检查乘数是否处理完毕jnz multiply_loop ; 如果乘数不为0,继续执行multiply_loopmov [result], dx ; 将积保存到result变量中; 在此处可以添加输出结果的代码; 退出程序mov eax, 1xor ebx, ebxint 0x80```在上述示例代码中,我们定义了3个变量:a(被乘数)、b(乘数)和result(存放结果)。

微机原理实验报告(两个32位无符号数乘法程序以及码制转换程序设计)

微机原理实验报告(两个32位无符号数乘法程序以及码制转换程序设计)

微机原理实验报告姓名:班级:学号:时间:实验名称:基本汇编语言程序设计实验一:两个32位无符号数乘法程序实验二:码制转换程序设计<1>十六进制到ASCII<2>从二进制到ASCII一、程序流程图1、两个32位无符号数乘法程序:2、十六进制到ASCII二、程序的实现:1、实验一程序:NAME 32 BIT MULTIPLYDATA SEGMENTMULNUM DW 0000,0FFFFH,0000,0FFFFH,4 DUP(?) DATA ENDSSTACK SEGMENT PARA STACK 'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA START PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXLEA BX,MULNUMMULU32: MOV AX,[BX]MOV SI,[BX+4]MOV DI,[BX+6]MUL SIMOV [BX+8],AXMOV [BX+0AH],DXMOV AX,[BX+2]MUL SIADD AX,[BX+0AH]ADC DX,0MOV [BX+0AH],AXMOV [BX+0CH],DXMOV AX,[BX]MUL DIADD AX,[BX+0AH]ADC DX,[BX+0CH]MOV [BX+0AH],AXMOV [BX+0CH],DXPUSHFMOV AX,[BX+2]MUL DIPOPFADC AX,[BX+2]ADC DX,0MOV [BX+0CH],AXMOV [BX+0EH],DXRETSTART ENDPCODE ENDSEND START2、实验二的程序:1)NAME HEX_CHANGE_TO_ASCIIDATA SEGMENTL1 DW 2STRING DB 34H,98HL2 DW?BUFFER DB 2*2 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK 'STACK' DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXMOV CX,L1LEA BX,STRINGLEA SI,BUFFERMOV L2,CXMOV CX,AXAGAIN: MOV AL,[BX]MOV DL,ALAND AL,0FHCALL CHANGEMOV AL,DLPUSH CXMOV CL,4SHR AL,CLPOP CXCALL CHANGEINC BXRETSTART ENDPCHANGE PROCCMP AL,10JL ADD_0ADD AL,'A'-'0'-10ADD_0: ADD AL,'0'MOV [SI],ALINC SIRETCHANGE ENDPCODE ENDSEND START2)NAME BINARY_TO_ACSIIDATA SEGMENTNUM DW 4F78HSTRING DB 16 DUP(?)DATA ENDSSTACK SEGMENT PARA STACK'STACK'DB 100 DUP(?)STACK ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATASTART PROC FARBEGIN: PUSH DSMOV AX,0PUSH AXMOV AX,DATAMOV DS,AXMOV ES,AXLEA DI,STRINGMOV CX,LENGTH STRINGPUSH DIPUSH CXMOV AL,30H;REP STOWPOP CXPOP DIMOV AL,31HMOV BX,NUMAGAIN: RCL BX,1JNC NEXTMOV [DI],ALNEXT: INC DILOOP AGAINRETSTART ENDPCODE ENDSEND START三、实验感想:在实验的过程中,照着书上慢慢的去了解那些代码的含义,并且将代码出现的error改错,后来回到寝室发现在学校的电脑没有了error 的程序而在自己的电脑运行时出现error,后来又将程序修改发现了最后部分的begin改为start就能运行。

微机原理设计实验之两个数相乘

微机原理设计实验之两个数相乘

课程设计题目:两个数相乘一、实验目的1、领会汇编语言的编程思想;2、掌握汇编语言的指令,加深乘法指令和循环指令的用法;3、学会DOS功能的调用。

二、实验内容实现两个十进制数的乘法,被乘数和乘数均以ASCII码形式存放在内存中,乘积在屏幕上显示出来。

三、实验原理本实验设计A、B两个数相乘。

巧妙地运用了数学中的乘法原理,将B的低位和A的最低位相乘得到的数的低位存到AL中,这个数的进位存到AH中,再用B的低位和A的次低位相乘,得到一个数,这个数的低位和上一次的进位相加。

循环此过程直到到B与A的最高位相乘结束,并与上一次结果的进位相加,得到最后的结果。

四、程序设计流程图(此处画上是实验纸上的流程图)五、实验程序DATA SEGMENT ;定义数据段DATA1 DB 32H,39H,30H,35H,34H ;用ASCII码表示被乘数45092DATA2 DB 34H ;用ASCII码表示乘数4MES1 DB '*','$'MES2 DB '=','$'BUF DB 'Result$'RESULT DB 6 DUP(00H) ;定义存放结果的数据缓冲区,6个字节长,初值为0DATA ENDS ;数据段结束STACK SEGMENT ;定义堆栈段STA DB 20 DUP() ;为变量STA分配20个字节的空间TOP EQU LENGTH STA;返回利用DUP定义的数组元素的个数到TOP,TOP=20STACK ENDS ;堆栈段结束CODE SEGMENT ;定义代码段ASSUME CS: CODE,DS:DATA,SS:STACK,ES:DATASTART: MOV AX,DATAMOV DS,AX ;DS→AXMOV AX,STACKMOV SS,AX ;SS→STACKMOV SP,TOP ;栈顶指针指向TOPMOV DX,OFFESET BUFMOV AH,9 ;DOS功能号09H送AHINT 21H ;显示字符串‘please input ’LEA SI,DATA1 ;被乘数首地址送SIMOV BX,05HL1: MOV AH,02H ;DOS功能号02H送AHMOV DL,[SI+BX-1] ;被乘数送DLINT 21H ; DOS功能号调用(显示器输出)DEC BXJNZ L1MOV AH,09H ; DOS功能号09H送AHLEA DX,MES1 ;MES1的偏移地址送DXINT 21H ; DOS功能号调用(显示字符串) LEA SI,DATA2 ;乘数地址送SIMOV AH,02HMOV DL,[SI] ;乘数送DLINT 21H ;显示乘数MOV AH,09HLEA DX,MES2 ; MES2的偏移地址送DXINT 21HMOV SI,OFFSET DATA2MOV BL,[SI] ;DATA2中的乘数送BLAND BL,00001111B ;屏蔽乘数高4位,ASCII码转换为十六进制MOV SI,OFFSET DATA1 ;被乘数偏移地址送SIMOV DI,OFFSET RESULT ;运算结果偏移地址送DIMOV CX,05 ;设置循环次数LOOP1: MOV AL,[SI] ;被乘数送ALAND AL,00001111B ;屏蔽被乘数高4位,ASCII码转换为十六进制 INC SIMUL BL ;AL * BL送AXAAM ;乘法十进制调整ADD AL,[DI] ;结果低位与前次计算的进位相加AAA ;BCD码加法十进制调整指令MOV [DI],AL ;计算结果低位送DIINC DIMOV [DI],AH ;计算结果高位进位送DI+1LOOP LOOP1 ;循环MOV CX,06MOV SI, DI ;计算结果送SIDISPL:MOV AH,02H ;调用DOS功能号02H送AHMOV DL,[SI]ADD DL,30H ;结果转换为ASCII码INT 21H ;显示一位数据DEC SI ;地址减一,继续后面的数据显示LOOP DISPL ;显示运算结果MOV AX,4C00H ;返回DOSINT 21H ;结束CODE ENDSEND START六、DOS功能调用在DOS软中断指令中最常用的是系统功能调用(INT 21H),主要完成文件管理,输入/输出设备控制,系统参数操作等等。

第四章-汇编语言程序的设计

第四章-汇编语言程序的设计

第四章汇编语言程序设计本章的汇编语言程序设计的主要容有:汇编语言程序设计概述、汇编语言程序的结构形式、汇编语言的伪指令。

(一个单片机应用系统和其它计算机系统一样,在完成一项具体工作的时候,它要按照一定的次序,去执行操作,这些操作实际上就是由设计人员,以单片机能够接受的指令编制的程序,那么无论计算机也好,单片机也好,实际上编制程序的过程,就是用计算机来反映设计者的编程思想,那么这一章中,我们将向大家介绍怎样使用单片机指令系统来编制一些应用程序。

在介绍之前,我们还是来学习汇编语言的一些基础知识)4.1 汇编语言程序设计概述1、计算机的汇编语言以助记符表示的指令,每一条指令就是汇编语言的一条语句。

(汇编语言程序设计实际上就是使用汇编指令来编写计算机程序。

汇编语言的语句有严格的格式要求)2、汇编语言的语句格式MCS-51汇编语言的语句格式表示如下:[<标号>]: <操作码> [<操作数>]; [<注释>]标号:指令的符号地址,有了标号,程序中的其它语句才能访问该语句。

①标号是由1~8个ASCII字符组成,但头一个字符必须是字母,其余字符可以是字母、数字或其它特定字符。

②不能使用汇编语言已经定义了的符号作为标号,如指令助记符、伪指令记忆符以及寄存器的符号名称等。

(同一个标号在程序中只能定义一次,不能重复定义;一条语句可以有标号,也可以没有标号,所以是否有标号,取决于程序中是否需要访问该语句。

)操作码:规定语句执行的操作容,操作码是以指令助记符表示的,是汇编指令格式中唯一不能空缺的部分。

操作数:给指令的操作提供数据或地址。

注释:是对语句或程序段的解释说明。

(在单片机中,这四个部分怎么加以区分呢?使用分界符)分界符(分隔符):用于把语句格式中的各部分隔开,以便于编译程序区分不同的指令段。

冒号(:)用于标号之后空格()用于操作码和操作数之间逗号(,)用于操作数之间,分割两个以上的操作数分号(;)用于注释之前。

汇编语言程序设计(5)

汇编语言程序设计(5)
15
例:
第 4 章 汇编语言程序设计简介
ORG 1000H
BUF1: DB 38H, 7FH, 80H
BUF2: DB 45H, 66H
ORG伪指令指定了标号BUF1的地址为1000H, 而DB伪 指令是将其后的二进制数表38H, 7FH, 80H依次存放在1000H, 1001H, 1002H 3 个连续单元之中, BUF2也是一个标号, 其地 址与前一条伪指令连续, 即1003H, 1004H地址单元中依次存 放 45H, 66H。
如果在程序中要多次使用到某一地址,由EQU指令将其赋值 给一个字符名称,一旦需要对其进行变动,只要改变EQU命 令后面的数字即可,而不需要对程序中涉及到该地址的所有 指令逐句进行修改。
13
第 4 章 汇编语言程序设计简介
注意, 由EQU等值的字符名称必须先赋值后使用,且 在同一个源程序中,同一个标号只能赋值一次。 例:
H)=10H。
18
第 4 章 汇编语言程序设计简介
六、BIT——位地址符号指令
指令功能为:将位地址赋值给指定的符号名称,通常用于位符 号地址的定义。
指令如下:
字符名称 BIT 位地址
例如,X1 BIT P1.0
汇编结果为将位地址P1.0赋给变量X1,即在程序中便可 使用X1代替位地址P1.0。
19
(c)多分支
30
第 4 章 汇编语言程序设计简介
2. 一般分支程序结构实例
【例5】 x, y均为8位二进制数, 设 x存入R0, y存入R1, 求解:
1 y 1
0
x0 x0 x0
31
第 4 章 汇编语言程序设计简介
程序如下:
START:
CJNE R0,#00H,SUL1

汇编课程设计(有符号多位十进制数的四则运算计算器)

汇编课程设计(有符号多位十进制数的四则运算计算器)

汇编语言课程设计实验报告一、课程设计目的《汇编语言程序设计》是计算机专业一门重要的核心课程,也是一门实践性很强的课程,而课程设计则是其中一个重要的应用实践环节。

本次课程设计的目的是提高分析问题、解决问题的能力以及实际动手能力,进一步加深对汇编语言程序设计基本理论的理解,熟练掌握汇编语言程序上机调试的方法技巧、结构化程序设计技术及高级汇编语言技术,能编写较复杂的应用程序,为学习后继课程打下扎实的基础二、实验环境编译机器:IBM兼容PC操作系统:Windows XP -SP2 中文版编译工具:MASM 5.0三、课程设计内容1、编写一个有符号多位十进制数的四则运算计算器程序,所输入的算式如下例所示:-278+32=-132――12=11*-32=-1234/-18=要求程序能接收键入的算式,在接收到‘=’号时,计算并以有符号十进制数的形式显示结果,然后允许用户继续键入算式。

如果键入算式后再键入‘.’,则显示结果并结束整个程序。

(‘/’为整除)程序设计框图:程序源代码:2、已知一个由英语单词组成的字符串已按字典序排好,每个单词以空格符为结束,该串的首二字节为16位无符号二进制数,用以说明串的长度。

试编程能从键盘上输入单词(以空格字符为结束),若字符串中没有该单词,则将该单词插入该串适当的位置,使其仍保持字典序,并修改串长度,显示单词在串中位置及串长度;若字符串中有该单词,则显示字符串中所有包含该单词的单词,及其在字符串中的位置。

程序设计框图:程序代码:DATA SEGMENT; DICTIONARY 字典字符串,首两个字节为 16 位无符号二进制数,说明字符串长度。

DICTIONARY DB 00,16H,"add an book dad egg "DB 100H DUP(20H) ; 空的缓冲区。

MSG_INTRO DB "Input the Word to Search : ","$"MSG_NOTFOUND DB "Not Found, Now Insert it . ",0AH,0DH,"$"MSG_NEWDICT DB 0AH,0DH,"New Dictionary : ","$"MSG_FOUND DB 0AH,0DH,"Found Word in Dictionary : ","$"MSG_POSITION DB 0AH,0DH,"Position : ","$"MSG_DICTLENGTH D B 0AH,0DH,"New Dictionary Length : ","$"MSG_NEWLINE DB 0AH,0DH,"$"BUFFER DB 10H DUP(20H) ; BUFFER 用于保存需要查询的单词。

汇编语言课程设计-十进制加减法

汇编语言课程设计-十进制加减法

目录课程设计任务书 (2)1 问题描述 (3)2 前期分析 (3)3 课程设计 (3)3.1 总体设计 (3)3.2 模块设计 (4)3.2.1 求和模块 (4)3.2.2 输入十进制数模块 (5)3.2.3 存储器清零模块 (6)3.2.4 减法模块 (7)4 程序源代码 (7)5 调试与分析 (13)6 测试结果 (13)7 经验与体会 (15)评分表 (16)课程设计任务书学生姓名:毛习均专业班级:计算机1004班指导教师:许毅工作单位:计算机科学与技术学院题目: 十进制加减计算器初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。

实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。

要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。

具体的设计任务及要求:1)编写程序实现十进制数的加减法;2)将计算结果在屏幕上显示;3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。

在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。

阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。

周3、周4:完成程序调试,和验收。

周5:撰写课程设计报告。

指导教师签名:年月日系主任(或责任教师)签名:年月十进制加减法计算器1问题描述用汇编语言编写一个十进制加减法计算器,此程序要求将结果显示在屏幕上,并且友好清晰的用户界面,能识别输入错误并且控制修改。

在此程序中采用子结构程序使结构清晰。

十进制数的乘法运算

十进制数的乘法运算

十进制数的乘法运算十进制数的乘法运算是数学课程中的基础内容之一。

通过乘法运算,我们可以计算两个或多个十进制数的乘积。

本文将介绍十进制数的乘法规则和计算方法,并探讨一些常见的应用。

一、乘法规则十进制数的乘法规则很简单,即将两个数的所有位上的数字分别相乘,并将结果相加。

下面是一个例子:42× 7__________294在这个例子中,我们将7的每一位与42的每一位相乘,并将结果相加,最后得到294。

这是因为7的个位是7,42的个位是2,所以7乘以2等于14。

同样的道理,7乘以4等于28。

将这两个结果相加,我们得到294。

二、如何进行计算在十进制数的乘法运算中,我们需要按照以下步骤进行计算:1. 将两个数竖直地对齐,使得个位位于右边。

2. 从被乘数的个位开始,逐位与乘数的每一位相乘,并将结果写在对应的位置上。

3. 每一位相乘完成后,将结果相加。

4. 最后得到的结果就是乘法的积。

下面是一个具体的例子:835× 26__________16705010__________21710在这个例子中,我们将被乘数835和乘数26进行竖直对齐,然后按照规则逐位相乘,并将结果写在对应位置上。

首先,6乘以5等于30,我们将0写在十位上,3写在个位上。

接下来,6乘以3等于18,因为它是被乘数的十位上的数字,所以我们将18写在百位上。

然后,2乘以5等于10,我们将10写在千位上。

最后,2乘以3等于6,我们将6写在万位上。

将所有结果相加,我们得到21710,即为乘法的积。

三、应用举例十进制数的乘法运算在日常生活中有很多应用。

下面列举几个常见的例子:1. 商品价格计算:当我们购买多件商品或多袋食品时,可以使用乘法运算来计算总价格。

例如,如果一件衣服的价格是80元,我们购买了3件,那么总价格就是80乘以3,即240元。

2. 面积计算:在房地产购买或装修中,我们经常需要计算房间的面积。

例如,某个房间的长度是6米,宽度是4米,那么它的面积就是6乘以4,即24平方米。

微原实验——两个四位十进制数相加并显示结果

微原实验——两个四位十进制数相加并显示结果

微原实验——两个四位十进制数相加并显示结果一、实验目的1.通过上机实验,熟悉汇编语言开发环境,了解代码编译,连接,执行的相关过程。

2.熟悉汇编语言的书写与使用,在调试程序的过程中熟悉不同代码的执行效率与效果。

二、实验原理从键盘输入2个4位二进制数,相加并显示结果。

三、实验设备及软件硬件:PC软件:TPC2003+汇编集成开发环境四、实验内容(代码及注释)DATA SEGMENTX1 DB 4 DUP(0) ;第一个加数X2 DB 4 DUP(0) ;第二个加数X3 DB 5 DUP(0) ;两数之和y1db 'please input the first number:','$'y2db 'please input the second number','$'y3db 'the result is:','$'DATA ENDS ;数据段STACK SEGMENT STACKDW 100 DUP(?)STACK ENDS ;堆栈段CODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACKKEYIN PROC ;键盘输入函数AGAIN: MOV AH,8INT 21HCMP AL,30HJB AGAINCMP AL,39HJA AGAIN ;若不为数字,重新输入PUSH AXMOV DL,ALMOV AH,2INT 21H ;若为数字,入栈保存并显示POP AXRETKEYIN ENDPMAIN PROCMOV AX,DATAMOV DS,AXMOV DX,OFFSET Y1MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y1字符串,并在结尾输出回车MOV SI,OFFSET X1MOV CX,4NEXT1: CALL KEYINAND AL,0FH ;调整ASC码数字为纯数字以便相加MOV [SI],ALINC SILOOP NEXT1MOV SI,OFFSET X2MOV CX,4 ;将第一个加数保存在变量X1中MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;输出回车MOV DX,OFFSET Y2MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y2字符串,并在结尾输出回车NEXT2: CALL KEYINAND AL,0FH ;调整ASC码数字为纯数字以便相加MOV [SI],ALINC SILOOP NEXT2 ;将第二个加数保存在变量X2中MOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;输出回车MOV DX,OFFSET Y3MOV AH,9INT 21HMOV DL,0DHMOV AH,2INT 21HMOV DL,0AHMOV AH,2INT 21H ;打印y3字符串,并在结尾输出回车MOV SI,(OFFSET X1)+3MOV DI,(OFFSET X2)+3MOV BX,(OFFSET X3)+4MOV CX,4OR CX,CX ;CF位清零PLUS: MOV AL,[SI]ADC AL,[DI]AAA ;十进制调整命令MOV [BX],ALDEC DIDEC SIDEC BXLOOP PLUSMOV AL,0ADC AL,0MOV [BX],ALMOV BX,OFFSET X1MOV CX,4NEXT4: MOV DL,[BX]ADD dl,30h ;将纯数字调整为ASC码以便打印MOV AH,2INT 21HINC BXLOOP NEXT4 ;打印加数X1MOV DL,2BHMOV AH,2INT 21H ;打印’+’号MOV BX,OFFSET X2MOV CX,4NEXT5: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT5 ;打印X2MOV DL,3DHMOV AH,2INT 21H ;打印’=’号MOV BX,OFFSET X3SUB BYTE PTR [BX],0JZ OUT1 ;判断结果最高位是否为零,若为零则跳至OUT1处MOV CX,5NEXT3: MOV DL,[BX]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT3 ;最高位不为零,打印五位数CMP CX,0JZ END1 ;若已经输出完毕,则跳至END1直接结束程序OUT1: MOV CX,4 ;结果最高位为零,打印四位数NEXT6: MOV DL,[BX+1]ADD DL,30HMOV AH,2INT 21HINC BXLOOP NEXT6END1: MOV AH,4CHINT 21HMAIN ENDPCODE ENDS ;结束程序END MAIN五、程序流程图从键盘输入字符或数字六、实验结果七、实验感想在本实验中,由于TPC编译平台问题,编译运行后的操作窗口过大,看不到显示的实验结果,还一直以为是代码有问题。

汇编语言课程设计任务书--简易计算器,实现整数(2个字节的无符号数)的四则运算

汇编语言课程设计任务书--简易计算器,实现整数(2个字节的无符号数)的四则运算
题目
简易计算器,实现整数(2个字节的无符号数)的四则运算
指导教师
谷赫
答疑教师
谷赫
设计时间
2011年12月31日-----2012年1月6日
设计要求
一、设计目的
1.对已学过的汇编语言程序设计知识进行综合运用;
2.能按要求设计出可执行的汇编源程序并进行调试。
二、设计任务
1、通过键盘输入操作数和运算符后,显示出算式和运算结果。
知识改变生活精品word文档值得下载值得拥有知识改变生活精品word文档值得下载值得拥有汇编语言程序设计课程设计任务书简易计算器实现整数2个字节的无符号数的四则运算指导教师设计时间2011年12月31日2012设计要求一设计目的1
《汇编语言程序设计》课程设计任务书
专业
计算机科学与技术
班级
电算B10209
01月04日:根据流程图,编写汇编语言源程序。
01月05日:调试汇编语言源程序,完成基本功能,得出最后结果。
01月06日:准备资料,进行答辩。
注:上交设计报告。重点阐述程序的有关算法说明、程序的流程图以及子程序的功能和参数的说明及程序代码。
系(教研室)主任签字:年月日
2、分析问题,给出程序流程图。
3、适当的使用子程序。
4、调试汇编语言源程序。
三、知识点掌握掌握并深入理解汇编语言程序 Nhomakorabea计方法;
掌握汇编语言提供的指令及其使用方法;
掌握中断的基本概念,并熟悉DOS功能调用的使用方法;
学会汇编语言源程序调试的全过程。
四、时间安排
12月31日:收集资料,进行问题分析,得到程序流程图。

实验报告 实验三无符号二进制数的乘法运算

实验报告  实验三无符号二进制数的乘法运算

EDA实验报告之实验三无符号双字节数的乘法运算1、实验目的:熟悉软件的操作,掌握算术操作类指令;2、实验要求:1)、进一步熟悉熟悉软件的操作;2)、熟悉算术操作类指令;3)、写出实验报告。

3、实验题目:无符号双字节数的乘法运算1)、编写程序,把内部RAM地址为5BH、5AH 和59H、58H中的两个双字节无符号二进制数相乘(其中5BH与5AH中的内容构成一个乘数,高位在5BH中;59H与58H中的内容构成另一个乘数,高位在59H中),把乘积放在内部RAM的5FH、5EH、5DH和5CH单元中(高位在5FH单元中)。

2)、把乘积转换为压缩的BCD码,结果放在内部RAM的4FH、4EH、4DH、4CH和4BH 单元中(高位在4FH单元中)。

4、实验内容:1)使用的仪器、仪表,开发平台型号本实验用到了wave6000软件。

电脑一台。

2)性能指标、技术要求、思路方案、软件流程图性能指标、技术要求见实验题目部分;思路方案:(下页)思路方案:双字节无符号二进制数相乘算法原理:设a、b、c、d都是8位二进制数,z是8位二进制数0,则abⅹcd=(az+zb)(cz+zd)+) 字节4 字节3 字节2 字节1 可见用4次乘法指令和多次加法指令可求出乘积.多字节二进制数转换为BCD 数子程序BINBCD2 算法原理:156700772012345672))2)2)2((((((22)(d d d d d d d d d d d d d d d +⨯+⨯+⨯+⨯=⨯++⨯= 举例:十进制数 二进制数1)二进制数左移1位, C=1 十进制ADDC \ DA2)二进制数左移1位, C=0 十进制ADDC \ DA3)二进制数左移1位, C=1 十进制ADDC \ DA4)二进制数左移1位, C=1十进制ADDC \ DA对应于原来二进制的高4位注意: * 例中乘2^7 ,但移位8次, 其中十进制单元第一次自身相加时扣除了一次乘2操作;* ADDC 配合DA 指令可以实现 ……i i d d +⨯+2)1 操作 ;流程图:双字节无符号二进制数相乘流程图1:设A,B,C,D都是8位二进制数,计算AB*CD多字节二进制数转换为BCD数子程序BINBCD2 流程图2:多字节二进制数转换为压缩BCD数:3)源程序ORG 0000HMOV R0,#5CH ;乘积存放地址低位MUL1:MOV A,5AH ;求b*dMOV B,58HMUL ABMOV @R0,A ;存放bdL,字节1MOV R3,B ;暂存bdHMOV A,5BHMOV B,58H ;求a*dMUL ABADD A,R3MOV R3,A ;(R3)=adL+bdH,字节2MOV A,BADDC A,#0MOV R2,A ;(R2)=adH+求字节2时可能的进位,字节3MOV A,5AH ;求b*cMOV B,59HMUL ABADD A,R3INC R0 ;地址加一MOV @R0,A ;字节2= adL+bdH+bcLMOV A,BADDC A,R2MOV R2,A ; (R2)=adH+bcH+求字节2时可能的进位,字节3 MOV R1,#0JNC LAST ;求刚才的字节3时有无向上的进位INC R1 ;地址加一LAST:MOV A,5BH ;求a*cMOV B,59HMUL ABADD A,R2INC R0 ;地址加一MOV @R0,A ;存放acL+ adH+bcH,字节3MOV A,BADDC A,R1 ;ach+进位INC R0MOV @R0,A ;存放ach+进位,字节4MOV R5,#04H ;二进制字节数计数器MOV R1,#10H ;内部RAM单元MOV R0,#5CH ;刚才的乘积低位地址LOOP: ;此循环实现数据的搬移MOV A,@R0MOV @R1,AINC R0INC R1DJNZ R5,LOOPBINBCD2:MOV R1,#4BH ;转换后存到地址(低位)MOV R2,#04H ;二进制数字节数INC R2 ;转换后的BCD字节数比二进制数字节数多一个CLR ABB0:MOV @R1,AINC R1DJNZ R2,BB0MOV A,#04H ;求“X”出现的总次数MOV B,#8MUL ABMOV R3,ABB3:M OV R0,#10HMOV R2,#04HCLR CBB1:MOV A,@R0 ;二进制数左移1位,最高位在C中RLC AMOV @R0,AINC R0DJNZ R2,BB1MOV R2,#04HINC R2 ;十进制字节数比二进制字节数多1MOV R1,#4BHBB2:MOV A,@R1 ;十进制数X 2 ,十进制调整ADDC A,@R1 ;二进制左移一位后的CDA AMOV @R1,AINC R1DJNZ R2,BB2DJNZ R3,BB3SJMP $4)实验步骤,完成情况4.1 在WAVE 6000中新建文件,并将代码写入文件中,保存为EXPERIMENT3.ASM;4.2 在WAVE 6000中新建项目,并在模块文件中包含上述EXPERIMENT3.ASM文件,最后保存为EXPERIMENT3.PRG。

汇编课程设计 四位无符号十进制数乘法程序概要

汇编课程设计 四位无符号十进制数乘法程序概要

华北科技学院课程设计说明书课程名称:汇编语言班级 : 计算机 B08-1 姓名 : __王松 _ 学号:__ 200807014101 __ 设计题目 :__编写两个四位无符号十进制数乘法程序设计时间 : 2010/6/21 至 2010/7/2 指导教师 :李冬艳评语 :_____________________________________________________________________________________________________________________________________________________________________________________________________ 评阅成绩评阅教师 :一、课程设计目的进行程序设计方法和技能的基本训练, 巩固在课堂上学到的有关程序设计的基本知识和基本方法, 通过实际动手能力的培养, 进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、课程设计要求1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3. 要求程序必须正确。

4. 程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5. 要求程序结构合理,语句使用得当。

6. 适当追求编程技巧和程序运行效率。

三、课程设计题目 :编写两个四位无符号十进制数乘法程序四、课题分析由于题目要求从外设输入输出数据, 而在内存中用二进制数形式实现乘法, 所以涉及到代码转换问题。

步骤如下:从键盘输入两个十进制乘数(ASCII 码→分别转换成二进制形式→二进制数乘→把二进制乘积转换成十进制数的 ASCII 码形式→输出到屏幕。

五、流程图:六、程序源代码:Code SegmentAssume CS:Code,DS:CodeCR equ 000DHLF equ 000AHKBBack equ 0008H; -----------------------------------------; 功能:显示指定地址(Str_Addr的字符串; 入口:; Str_Addr=字符串地址(要求在数据段Output MACRO Str_Addrlea dx,Str_Addrmov ah,9int 21hEndM; -----------------------------------------; 功能:输出回车换行Output_CTLF proc Nearpush axpush dxmov ah,02hmov dl,0dhint 21hmov dl,0ahint 21hpop dxpop axretOutput_CTLF endp; -----------------------------------------; 功能:取光标位置; 入口:无; 出口:DH=行号, DL=列号GetCursor Proc Near PUSH AXPUSH BXPUSH CXXOR BX,BXMOV AH,3INT 10HMOV Cursor_Row,DH MOV Cursor_Col,DL POP CXPOP BXPOP AXRETCursor_Row DB ? Cursor_Col DB ? GetCursor EndP; -----------------------------------------; 功能:置光标位置; 入口:Cursor_Row=行坐标 ; Cursor_Col: 列坐标SetCursor Proc NearPUSH CXPUSH BXPUSH AXMOV DH,Cursor_RowMOV DL,Cursor_ColXOR BX,BXMOV AH,2INT 10HPOP AXPOP BXPOP CXRETSetCursor EndP; -----------------------------------------; 功能:键盘输入一个 N 位的十进制数字,将其转换成二进制数并保存在指定的内存单元。

第4章-汇编语言程序设计教案

第4章-汇编语言程序设计教案

第四章教学实施计划3课堂教学实施计划第 8 课教学过程设计:复习 0 分钟;授新课 100 分钟讨论 0 分钟;其它 0 分钟授课类型(请打√):理论课√讨论课□实验课□习题课□其它□教学方式(请打√):讲授√讨论□示教□指导□其它□教学手段(请打√):多媒体√模型□实物□挂图□音像□其它□4.1 汇编语言程序设计概述程序实际上是一系列计算机指令的有序集合。

我们把利用计算机的指令系统来合理地编写出解决某个问题的程序的过程,称为程序设计。

程序设计是单片机应用系统设计的重要组成部分,单片机的全部动作都是在程序的控制下进行的。

随着芯片技术的发展,很多标准的或功能型的硬件电路都集成到了芯片中,所以,软件设计在单片机应用系统开发中占的比重越来越大。

一、汇编语言和高级语言汇编语言:用助记符表示的指令称为汇编语言,用汇编语言编写的程序称为汇编语言源程序汇编语言也是面向机器的,它仍是一种低级语言。

汇编语言离不开具体计算机的硬件,与硬件紧密相关。

高级语言:高级语言不受具体“硬件”的限制,具有通用性强,直观、易懂、易学,可读性好等优点。

多数的51单片机用户使用C语言来进行程序设计。

C语言已经成为人们公认的高级语言中高效、简洁而又贴近51单片机硬件的编程语言。

二、汇编语言的特点•助记符指令和机器指令一一对应,所以用汇编语言编写的程序效率高,占用存储空间小,运行速度快,因此汇编语言能编写出最优化的程序。

•使用汇编语言编程比使用高级语言困难,因为汇编语言是面向计算机的,汇编语言的程序设计人员必须对计算机硬件有相当深入的了解。

•汇编语言能直接访问存储器及接口电路,也能处理中断,因此汇编语言程序能够直接管理和控制硬件设备。

•汇编语言缺乏通用性,程序不易移植,各种计算机都有自己的汇编语言,不同计算机的汇编语言之间不能通用。

三、汇编语言的语句格式•指令语句:每一条指令语句在汇编时都产生一个指令代码(也称机器代码),执行该指令代码对应着机器的一种操作。

四川大学数电课程设计(四位二进制无符号数乘法器 ).

四川大学数电课程设计(四位二进制无符号数乘法器 ).

数字电子技术基础课程设计报告学院电气信息学院专业姓名学号设计题目四位二进制无符号数乘法器目录1设计任务描述 (1)1.1设计描述 (1)1.2设计概述 (1)2通用器件实现 (1)2.1方案一与门和全加器组合逻辑电路 (1)2.1.1设计思路 (1)2.1.2仿真测试 (2)2.1.3优缺点分析 (3)2.2方案二多种通用集成芯片组合逻辑电路 (3)2.2.1设计思路 (3)2.2.2仿真测试 (5)2.2.3优缺点分析 (7)3使用硬件描述语言——Verilog实现 (7)3.1设计目的 (7)3.2设计要求 (7)3.3硬件语言描述 (7)3.4BASY2板结果附图 (9)4结论与心得体会 (11)4.1结论 (11)4.2心得体会 (11)1设计任务描述1.1设计描述设计一个乘法器,实现两个四位二进制数的乘法。

两个二进制数分别是被乘数3210A A A A 和乘数3210B B B B 。

被乘数和乘数这两个二进制数分别由高低电平给出。

乘法运算的结果即乘积由电平指示灯显示的二进制数。

做到保持乘积、输出乘积,即认为目的实现,结束运算。

1.2设计概述4位二进制乘法器在实际中具有广泛应用。

它是一些计算器的基本组成部分,其原理适用于很多计算器和大型计算机,它涉及到时序逻辑电路如何设计、分析和工作等方面。

通过此电路更深刻的了解时序逻辑部件的工作原理,从而掌握如何根据需要设计满足要求的各种电路图,解决生活中的实际问题,将所学知识应用于实践中。

2通用器件实现2.1方案一与门和全加器组合逻辑电路2.1.1设计思路手动实现两个四位二进制乘法的计算,应为以下过程:123456781234123411110001110111010000110110111101C C C C C C C C A A A A B B B B 设乘数为1234A A A A (下标数字大则为高位),被乘数为1234B B B B ,使乘数从低位到高位依次与被乘数相乘,得到四个四位二进制加数,再依次对四个加数错位相加,得到八位的二进制的乘法运算结果。

多位十进制乘法 汇编

多位十进制乘法 汇编

**************************************************************************** 两个任意位数的十进制数相乘**************************************************************************** .model small ;定义存储单元.stack 10h ;定义堆栈段.data ;定义数据段p1 db 'Please input the first number:$'p2 db 'Please input the second number:$'p3 db 'here is the result:$'x db 20 dup(?) ;定义乘数y db 20 dup(?) ;定义被乘数z db ?result db 40 dup(?) ;定义结果count dw ?i db ?j db ?----------------------------------------------------------------------------input macro opr ;输入乘数、被乘数的宏定义local a1local a2local overmov ax,@datamov ds,axlea si,opra1: ;判断输入是否为0-9的整数,把输入的十进制数转换成二进制数mov ah,1int 21hcmp al,0dhje overcmp al,'0' ;判断al中的ascci码,如果小于'0',则输入不在正确的范围内,退出jl overcmp al,'9' ;同上,判断al中的Ascci码,如果大于'9',退出jg oversub al,30h ;ASCII码转换成二进制数mov di,siadd di,18da2: ;先输入的数向后移mov bx,ds:[di]mov ds:[di+1],bxdec dicmp di,sijge a2mov ds:[si],al ;保存进opr中的最低位jmp a1 ;跳转到a1over: call crlf ;调用回车换行子程序endm--------------------------------------------------------------------------- multiple macro opr1,opr2,opr3lea si,opr3mov count,si ;取opr3的地址lea si,opr1 ;取opr1的地址lea di,opr2 ;去opr2的地址mov i,0mov j,0a5: ;有进位的数位上的计算push sipush dimov bh,0mov bl,iadd si,bxmov bl,jadd di,bxmov al,ds:[si] ;取乘数的一个数位上的数mov bl,ds:[di]mov ah,0mul blaammov z,ah ;把进位保存到z中mov si,countmov bh,0mov bl,iadd si,bxmov bl,jadd si,bxmov bl,ds:[si] ;取result对应数位上的原有值mov ah,0add al,blaaaadd z,ah ;进位相加mov ds:[si],al ;保存结果a4:mov ax,0inc simov bl,ds:[si]mov al,zadd al,blaaamov ds:[si],al ;结果保存到result中cmp ah,0je n2 ;如果无进位,则跳到n2mov z,ahjmp a4n2:pop dipop siinc jcmp j,20jge n3jmp short a5 ;j循环n3:mov j,0inc icmp i,20jge over2jmp short a5 ;i循环over2:endm---------------------------------------------------------------------------- .code ;定义代码段main proc farmov x,0mov y,0mov result,0mov ax,@datamov ds,axlea dx,p1mov ah,9int 21hcall crlfinput x ;输入乘数call crlf ;按回车lea dx,p2mov ah,9int 21hcall crlfinput y ;输入被乘数call crlf ;按回车multiple x,y,result ;两数相乘call crlf ;按回车lea dx,p3mov ah,9int 21hcall output ;输出结果call crlfretmain endp------------------------------------------------------------------------------output proc nearlea di,result ;取result的首地址赋给dimov si,di ;取result的首地址赋给siadd si,40da3:dec si ;si地址减1cmp di,sije n1 ;如果si和首地址相等则退出a3,转到n1cmp ds:[si],byte ptr 0je a3n1:mov dl,ds:[si]add dl,30hmov ah,2int 21hdec si ;si地址减1cmp si,dijl exit ;比较si和result的首地址,如果si小于result的首地址,则跳出jmp n1exit: ;退出mov ah,4chint 21houtput endp------------------------------------------------------------------------------crlf proc near ;回车换行程序mov dl,0ahmov ah,2int 21hmov dl,0dhmov ah,2int 21hretcrlf endp。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华北科技学院
课程设计说明书
课程名称:汇编语言
班级: 计算机B08-2 姓名:_ 朱云峰 _ 学号:__ 200807014230 __ 设计题目: 编写两个四位无符号十进制数乘法程序设计时间:2010年6月23日至2010年 6月30日指导教师:___ ___ 杜杏菁______ ____ _评语:____________________________ _____ _____________________________________ ___ _________________________________________ ________________________________________ _ _________________________________________ 评阅成绩:____评阅教师:____
一、课程设计目的
进行程序设计方法和技能的基本训练,巩固在课堂上学到的有关程序设计的基本知识和基本方法,通过实际动手能力的培养,进一步熟悉汇编语言的结构和使用方法,达到能独立阅读、编制和调试一定规模的汇编语言程序的水平。

二、课程设计要求
1.要求编写并调试通过一个小型软件,实现对软件或硬件的操作。

2.遵循模块化、结构化的程序设计方法。

3.要求程序必须正确。

4.程序简明易懂,多运用输入输出提示,出错信息及必要的注释。

5.要求程序结构合理,语句使用得当。

6.适当追求编程技巧和程序运行效率。

三、课程设计题目:
编写两个四位无符号十进制数乘法程序。

四、课题分析
计算用的数据要求从键盘输入,而且应该不止一次地输入,所以应该通过定义,调用子程序来实现;在输入的子程序重要加入ASCII码的转换,将输入的数据转换为机器能计算的数据;在输入子程序中要加入输入数据的判断,只能把数据限制在数字键,令其他输入显示为错误;接下来是计算过程,得到的结果也同样是计算机能够识别的ASCII码;最后是输出显示部分,该部分也应该被定义为子程序,加入数值的转换,使输出的数据为十进制数,调用9号功能,将计算结果显示在屏幕上。

五、流程图:
六、程序源代码:
.MODEL SMALL
.386
DATA SEGMENT
FLAG_SIGN DB 0
FLAG_NUM1 DB 0
FLAG_NUM2 DB 0
TEMP DD 0
ARRAY DD 16 DUP(0)
ERR DB 0DH,0AH,'Input error!',0DH,0AH,'$'
STRING DB 0AH,0DH,0AH,0DH,'Please Input(eg. A*B= ) $' STRIN DB 0AH,0DH,0AH,0DH,'("q" quit):', 0DH,0AH,'$' DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
AGAIN:
LEA DX,STRING
MOV AH,9
INT 21H
LEA DX,STRIN
MOV AH,9
INT 21H
MOV EBX,OFFSET ARRAY
MOV FLAG_SIGN,0
MOV FLAG_NUM1,0
MOV FLAG_NUM2,0
L_Input0:
XOR EDX,EDX
XOR ECX,ECX
XOR EAX,EAX
MOV AH,1
INT 21H
CMP AL,'+'
JZ L_Input1
CMP AL,'-'
JNZ L_Number
NOT FLAG_SIGN
L_Input1:
MOV AH,1
INT 21H
L_Number:
CMP AL,'0'
JB L_Operator
CMP AL,'9'
JA L_Operator
SUB AL,30H
ADD EDX,EDX
MOV ECX,EDX
ADD ECX,ECX
ADD ECX,ECX
ADD EDX,ECX
MOV AH,0
ADD EDX,EAX
MOV FLAG_NUM1,1 JMP L_Input1 L_Operator:
CMP AL,'*'
JNZ L_Equal
CMP FLAG_NUM1,0 JZ ER
MOV [BX],EDX
ADD BX,4
MOV FLAG_NUM1,0
MOV FLAG_NUM2,1
JMP L_Input0
L_Equal:
MOV [BX],EDX
CMP AL,'='
JNZ L_Quit1
MOV BL,FLAG_NUM1
MOV CL,FLAG_NUM2
CMP BL,CL
JNZ ER
CMP FLAG_SIGN,0
JZ L_Cal
MOV DL,'-'
MOV AH,2
INT 21H
L_Cal:
MOV CX,0
MOV SI,CX
MOV EAX,ARRAY[SI+4]
MOV EBX,ARRAY[SI]
MUL EBX
MOV EBX,1000000000
DIV EBX
MOV TEMP,EAX
CALL BINTOASCII
MOV TEMP,EDX
CMP TEMP,0
JZ Show_0
CALL BINTOASCII
JMP AGAIN
Show_0:
MOV CX,9
Display:
MOV DL,'0'
MOV AH,2
INT 21H
DEC CX
CMP CX,0
JNZ Display
JMP AGAIN
L_Quit1:
CMP AL,'Q'
JNZ L_Quit2
JMP L_Quit
L_Quit2:
CMP AL,'q'
JNZ ER
JMP L_Quit
ER:
MOV DX,OFFSET ERR
MOV AH,9
INT 21H
JMP AGAIN
L_Quit:
MOV AH,4CH
INT 21H
BINTOASCII PROC
PUSH EAX PUSH EBX
PUSH ECX
PUSH EDX
MOV EAX,TEMP
MOV EBX,10
PUSH BX
B3:
CMP EAX,0
JZ B4
SUB EDX,EDX
DIV EBX
ADD DL,30H
PUSH DX
JMP B3
B4:
POP DX CMP DL,10
JE B5
MOV AH,2 INT 21H
JMP B4
B5:
POP EDX
POP ECX
POP EBX
POP EAX
RET
BINTOASCII ENDP
CODE ENDS
END START
七、结果显示
八、感想、收获及体会
通过此次编程实践,我又得到了一种全新的体验。

本次的实践与以往的上课实践不同,上课的时候老师让我们把所教授的知识重新实践,加强巩固,已达到融会贯通的目的;而此次的编程实践却是自己选题目自己查找资料,通过自学来掌握所需知识,这需要一定的毅力与智慧。

在第一天选课的时候,记得老师跟我们说过,根据自己的实际情况,自己的学习水平,与参考考试成绩来选题,而我的编程水平没有想象中的那么好,所以我选了一个比较适合我自己的题目:双字乘法程序。

题目看似简单,但其实不然,对于我这个编程新手来说,这道题目并不容易,其中有很多东西老师在课堂上没有教过,只能自己通过自学来掌握。

通过自学与同学交流,我逐渐掌握编程所需的知识要点,并逐步实施实践,在同学们的大力帮助下,终于完成了作品。

完成时的那种愉悦,不言而喻。

而最大的收获莫过于得到了一份珍贵的编程经验,一份辛苦的结晶。

这些在不断鼓励我继续向前,希望以后能有更大的收获。

其实在我看来,编程就是一场战争,你需要排兵布阵,你需要观察敌情,你需要苦思冥想做出判断,你需要沙场秋点兵的那种魄力。

当你面对伪装的敌人时,你不能认清它的真实面孔,就盲目地出兵讨伐,必然吃败仗。

所以我做好了全面的准备,经过仔细的推敲与思考,最终做出了程序。

但还有一些不完善的地方,由于时间比较短,所以没能修改得很完善。

希望老师见谅。

相关文档
最新文档