- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二.实验内容
1.多位十进制数加法。 2.两位十进制数乘法。
三.实验要求
1.多位十进制数加法:在内存中以DATA1和DATA2为首址,各分配5个字节单 元,分别存入两个8位组合BCD码数据(低位在前),将两数相加,结果送回 到DATA2处。 2.两位十进制数乘法:将被乘数和乘数以组合BCD码形式分别存放于DATA1和 DATA2定义的节单元中,经乘法运算,乘积存入DATA3定义的两个内存单元 中。 3.用DEBUG调试程序、查看运算结果,进行手工验证;并且用DEBUG修改数据, 重新执行。
EAX 清进位 BX
SI所指加数
将BX扩展为32位 EAX EAX+EBX+CF
SI 指向下一加数 CX-1=0? Y 存结果 结束
N
软件延时器
.model small .data data db 20h,20h,20h,20h,20h,39h,0dh,'$' .code .startup mov cx,0ah ; 设循环次数 lop: mov ah,09h ;显示功能调用 lea dx,data int 21h call near ptr delay ;调用延时子程序 dec data+5 ;修改显示数字 loop lop .exit Delay proc near uses cx ;延时子程序 mov bx,06ffh ;设第二时常数 Delay1 :mov cx,0h loop $ ;自身循环CX次 dec bx ;第二时常数减1 jnz delay1 ;不为零循环 ret Delay endp end
二进制码
BCD码 10进制数
BCD码用4位二进制编码表示一个十进制数,又称二—十进制数。由于这4位二进制数 的权值为8421,故也称BCD码为8421码。在计算机里,用一个字节的低4位表示一位 十进制数——非组合BCD码;用一个字节表示两位十进制数——组合BCD码。 非组合BCD码 组合BCD码 uuuu 1001 0111 1001 例:计算机里 79d 非组合BCD码:uuuu0111 uuuu1001 例:计算机里 79d 组合BCD码:01111001
单字节无符号数排序
流程图:
BL CX 开始 数据个数-1 BL扩展
数据指针 SI 置 0 累加器 前数
前数与后数比较 前数﹥后 数 Y 前、后数交换
NHale Waihona Puke 数据指针 SI 指向下一数
N
CX1=0?
Y
BL-1
N
ZF=1?
Y
结束
.model small .586 .data datanum db 10 datas db 21h,13h,4h,5h,7h db 6h,8h,20h,9h,11h .code .startup mov bl,datanum dec bl lop0: movzx cx,bl mov si,0 lop: mov al,datas[si] cmp al,datas[si+1] ja jh inc si loop lop jmp next
微机原理实验课
西北工业大学计算机学院实验教学中心
MASM 611使用简要说明 611使用简要说明
Microsoft宏汇编程序MASM611有建立汇编语言所需的全部工具, 我们简要介绍其集成开发软件PWB。PWB是集汇编程序的编辑、编 译、连接、调试、运行于一体的综合软件。 运行 PWB MASM611 在计算机 C:盘上 文件夹 具体使用方法结合实例介绍
LEA DX,BUF MOV AH,0AH ;0A号功能调用 INT 21H 将键盘输入的字符串写到 RAM 中去,击 回车键表示字符串结束。字符数与予留 空间的关系为:少补零多丢失。 EX3:输出单字符 MOV DL,’M’ MOV AH,02H; 2号功能调用 INT 21H 将 DL 中字符从屏幕上显示出来。
主程序流程: 主程序流程:
开始 CX 循环次数
延时子程序流程: 延时子程序流程:
延时子程序定义 BX CX 第二时常数 第一时常数 CX-1=0? N Y BX-1 N BX=0? Y 子程序返回 子程序结束关键词
字符串 显示功能调用 延时子程序调用 显示数字修改 CX-1=0? Y 结束 N
实验四
循环体 循环控制条件 N Y 循环控制条件 循环体 Y DO-WHILE结构 DO-UNTIL结构 N
子程序结构: procedure name PROC RET procedure name ENDP Attribute
Attribute
NEAR 调用程序和过程在同一个代码段中 FAR 调用程序和过程不在同一个代码段中
在计算机里,所有的运算都是按二进制进行的,运算结果是二进制数(即十六进制 数) 。为了把十六进制运算结果转换成十进制,汇编语言中引进了组合BCD码加 法调整指令DAA和减法调整指令DAS。 DAA 加法的十进制调整指令 AL AL中的十六进制数调整为BCD格式 该指令之前要执行ADD或ADC。
调整方法:若AF为1,或AL中的低4位是十六进制的A ~ F,则AL内容加06H,AF置1; 若CF为1,或AL中的高4位是十六进制的A ~ F,则AL内容加60H,CF置1。 AF ——辅助进位标志 CF——进位标志
MOV DX,OFFSET BUF MOV AH,09H;9号功能调用 INT 21H 将 指定 RAM 缓冲区中的字符串从屏幕 上显示出来。 ‘$’为字符串结束符。 EX5:直接控制台输入/输出单字符 MOV DL,0FFH;DL=0FFH时, DL 0FFH DL=0FFH MOV AH,06H; 6号功能调用 INT 21H; 将键盘输入字符 送到 AL 中。 MOV DL,’M’; DL ≠ 0FFH时, MOV AH,06H; 6号功能调用 INT 21H; 将 DL 中字符送到 屏幕上显示。
十进制
AL AH CX-1=0 Y N
第 乘 数 法 数
1
实验三 循环结构程序
一、实验目的
掌握循环结构程序的设计、调试。
二、实验内容
1. 多字节无符号数加法。 2. 设计一软件延时器,并在屏幕上显示软件延时倒计时过程。
三、实验要求
1.多字节无符号加法:在DATAS中存放10个双字节无符号数, 用循环结构设计程序,通过程序运算,把这10个双字节无符号 数相加,其和存入紧邻加数之后的四个单元中。 2.软件延时器:做一延时约1秒的软件延时器,在屏幕上按9、 8、…0顺序显示软件延时倒计时过程。
;积送乘积存储单元
两位十进制数乘法流程图:
开始 BL BH 第一乘数 第一乘数
1
进位 BCD 码 转 换 成 16 进 制 数 AL AH AL AL+0+CF
十进制
AL
AL+BL
分离出第一乘数的“个位” 分离出第一乘数的“十位” 第一乘数的“十位”移到 “个位” 乘 10 到16进制 的第一乘数 CX 16进制的第一乘数 BL 第 AX 乘数 0
十进制调整; 部分和回送 指向下单元数 CX-1=0? Y 结束 N
两位十进制数乘法
.model small .586 .data data1 db 34h data2 db 56h data3 dw 1 dup (?) .code .startup mov bl,data1 ;第一乘数转换成16进制数 mov bh,bl and bh,0fh and bl,0f0h mov cL,4 shr bl,cL mov al,10 mul bl add al,bh movzx cx, al ;置加法次数计数器 mov bl,data2 ; clc mov ax,0 lop: add al,bl daa xchg ah,al adc al,0 daa xchg ah,al loop lop mov data3,ax nop nop nop .exit end 第二乘数做BCD 加法,加第一乘数次
BINR 文件夹
运行程序 PWB
软件实验部分
本部分共进行4次实验,实验内容如下:
1 2 3 4
实验一 实验三 实验四 实验五
BCD码的运算 循环结构程序 排序程序 分支程序
实验一 BCD码的运算 BCD码的运算
一.实验目的
1.熟悉在MASM611集成环境下建立、汇编、链接、调试和运行汇编语言程序的 全过程。 2.掌握汇编语言程序结构中数据段、堆栈段、代码段定义及内存分配方法。 3.学会DEBUG调试程序主要命令的使用方法。 4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。
有关问题的说明
循环程序的三个组成部分: ⑴ 循环初始状态设置。设置循环次数、为循环体正常工作建立初始状态等。 ⑵ 循环体。循环工作的主体,包含循环的工作部分和修改部分。循环的工作部 分是为完成程序功能而设计的程序段;循环的修改部分是为保证每一次重复时, 参加执行的信息能发生有规律的变化而建立的程序段。 ⑶ 循环控制部分。选择一个循环控制条件来控制循环的运行和结束。 循环程序的结构: 循环初始状态 循环初始状态
关于BCD码、十六进制数的说明 关于BCD码、十六进制数的说明
16进制数 0 0000 0000 0 1 0001 0001 1 2 0010 0010 2 3 0011 0011 3 4 0100 0100 4 5 0101 0101 5 6 0110 0110 6 7 0111 0111 7 8 1000 1000 8 9 1001 1001 9 A 1010 B 1011 C 1100 D 1101 E 1110 F 1111
一.实验目的 1.学习无符号数比较大小指令;
排序程序
2.掌握多重循环编程方法; 3.掌握汇编语言编写排序程序的思路和方法。 二.实验内容 1.单字节无符号数排序。 2.去极值滤波。 三.实验要求 1.单字节无符号数排序:DATANUM单元开始存放单字节无符号数,表示要排序数据 的个数,DATAS单元开始存放要排序的数据,数据个数至少10个,程序运行之后, 这些数据按照由小到大的顺序仍然存放于DATAS单元开始的位置。 2 .去极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连 续6个A/D采样值(12位——双字节,低12位),要求去掉最大值和最小值,将 余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完 成这个滤波过程。