当前位置:文档之家› 32位微机原理实验(西工大)

32位微机原理实验(西工大)


1 2 3 4 5 6
实验一 实验二 实验三 实验四 实验五 实验六
BCD码的运算 循环结构程序 排序程序 分支程序 数据区移动 找“零”个数
实验一 BCD码的运算 BCD码的运算
一.实验目的
1.熟悉在MASM集成环境下建立、汇编、链接、调试和运行汇编语言程 序的全过程。 2.掌握汇编语言程序结构中数据段、堆栈段、代码段定义及内存分配方 法。 3.学会DEBUG调试程序主要命令的使用方法。 4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。
指定的寄存器 AH INT 21H 入口参数 调用功能的功能号

EX1:从键盘输入单字符 MOV AH,01H ;1号功能调用 INT 21H 将键盘输入字符的ASCII码送到 AL。 EX2:从键盘输入字符串
EX4:输出字符串

BUF
DB ‘Thank you $’
BUF
DB 10 DUP(?)
多位十进制数加法
.model small .data data1 db 11h,22h,33h,44h,00h data2 db 99h,88h,77h,66h,00h .code startup mov si,offset data1 ;设指针 mov di,offset data2 clc ;清进位 mov cx,5 ;设加法次数 lop: mov al,[si] ;取第一加数 adc al,[di] ;取第二加数 daa ;十进制调整 mov [di],al ;结果存入指定单元 inc si ;指针加1 inc di loop lop ;循环 .exit 流程图: SI DI 开始 Data1首址 Data2首址 清进位 设加法次数 AL AL 第一加数 AL+第二加数
微机原理实验课
内蒙古民族大学物理与电子信息学院 实验教学中心
MASM 使用简要说明
程序设计者完成在纸上的程序编写工作还无法确定程序是否正 确,因此下一步就是要对程序进行测试和调试,使它能正确运行。为 了方便和有效的进行调试常常借助一些软件开发工具。 使用这些软件开发工具,对一个汇编语言程序的开发全过程如 下图所示:
十进制调整; 部分和回送 指向下单元数 CX-1=0? Y 结束 N
两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 ;置加法次数计数器
循环体 循环控制条件 N Y 循环控制条件 循环体 Y DO-WHILE结构 DO-UNTIL结构 N
子程序结构: procedure name PROC RET procedure name ENDP Attribute
Attribute
NEAR 调用程序和过程在同一个代码段中 FAR 调用程序和过程不在同一个代码段中
DEBUG的使用方法 DEBUG的使用方法

进入与退出:
出现提示符”-”直接输入DEBUG进入,退出则输入Q

显示命令:
显示内存单元内容---D命令 显示寄存器内容---R命令 显示源程序指令(反汇编)---U命令

程序运行:
连续运行方式---G命令 跟踪运行方式---T命令
软件实验部分
本部分共进行6次实验,实验内容如下:
mov bl,data2 ; mov ax,0 clc 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 加法,加第一乘数次
;积送乘积存储单元
主程序流程: 主程序流程:
开始 CX 循环次数
延时子程序流程: 延时子程序流程:
延时子程序定义 BX CX 第二时常数 第一时常数 CX-1=0? N Y BX-1 N BX=0? Y 子程序返回 子程序结束关键词
字符串 显示功能调用 延时子程序调用 显示数字修改 CX-1=0? Y 结束 N
实验三 排序程序
有关问题的说明
循环程序的三个组成部分: ⑴ 循环初始状态设置。设置循环次数、为循环体正常工作建立初始状态等。 ⑵ 循环体。循环工作的主体,包含循环的工作部分和修改部分。循环的工作部 分是为完成程序功能而设计的程序段;循环的修改部分是为保证每一次重复时, 参加执行的信息能发生有规律的变化而建立的程序段。 ⑶ 循环控制部分。选择一个循环控制条件来控制循环的运行和结束。 循环程序的结构: 循环初始状态 循环初始状态
BCD码用4位二进制编码表示一个十进制数,又称二—十进制数,由于这 四位二进制数的权值为8421,故也称BCD码为8421码。在计算机里,用 一个字节的低四位表示一位十进制数—非组合BCD码;用一个字节表示 两位十进制数—组合BCD。 非组合BCD码 uuuu 1001 例:计算机里79d 非组合BCD码:uuuu0111 uuuu1001 组合BCD码 0111 1001 例:计算机里79d组合BCD码:01111001 在计算机里,所有的运算都是按二进制进行的,运算结果是二进制数 (即十六进制数)为了把十六进制运算结果转换成十进制,汇编语言中 引进了组合BCD码加法调整指令DAA和减法调整指令DAS。 DAA 加法十进制调整指令 AL AL中的十六进制数转为BCD形式 该指令之前要执行ADD或ADC。 调整方法:若AF=1,或AL中的低四位是十六进制的A~F,则AL内 容加06h,AF置1; 若CF为1,或AL中的高四位是十六进制的A~F,则AL内容加60h,CF置1
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,09h ; 设循环次数 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 $ dec bx jnz delay1 ret Delay endp end ;延时子程序 ;设第二时常数 ;自身循环CX次 ;第二时常数减1 ;不为零循环
LEA DX,BUF MOV AH,0AH ;0A号功能调用 INT 21H 将键盘输入的字符串写到 RAM 中去,击 回车键表示字符串结束。字符数与予留 空间的关系为:少补零多丢失。 EX3:输出单字符 MOV DL,’M’ MOV AH,02H; 2号功能调用 INT 21H 将 DL 中字符从屏幕上显示出来。
两位十进制数乘法流程图:
开始 BL BH 第一乘数 第一乘数
1
进位 BCD 码 转 换 成 16 进 制 数 AL AH AL AL+0+CF
十进制
AL
AL+BL
分离出第一乘数的“个位” 分离出第一乘数的“十位” 第一乘数的“十位”移到 “个位” 乘 10 到16进制 的第一乘数 CX 16进制的第一乘数 BL 第 AX 乘数 0
N 编辑程序 源程序 文件 N .ASM 宏汇编 程序 MASM 语法有错?
Y 目标程 连接程序 LINK 序文件 .OBJ
程序 正确?
调试程序 DEBUG
可执行 文件 .EXE
Y 结束
进入方法
开始/程序/附件/c:命令提示符 C:>e: E:>cd masm5 E:>masm5>edit 文件存储时一定要用.asm为扩展名 E:>masm5>masm E:>masm5>link 连接结束以后即可使用debug命令

… …
多字节无符号数加法
.MODEL SMALL .586 .DATA DATAS DW 1111H,2222H,3333H,4444H,5555H DW 6666H,7777H,8888H,9999H,0AAAAH RESULT DD 1 DUP(?) .CODE .STARTUP ;设指针 MOV SI,OFFSET DATAS ;累加次数 MOV CX,10 MOV EAX,0 ;清累加器 ;清进位 CLC ;取加数到BX LOP: MOV BX,[SI] ;将BX扩展成32位 MOVZX EBX,BX ;带进位加 ADC EAX,EBX ;改指针 INC SI INC SI LOOP LOP ;循环加 ;存结果 MOV RESULT,EAX .EXIT END 开始 SI CX DATAS的首址 累加次数 0
单字节无符号数排序
流程图:
BL CX 开始 数据个数-1 BL扩展
数据指针 SI 置 0 累加器 前数
一.实验目的 1.学习无符号数比较大小指令; 2.掌握多重循环编程方法; 3.掌握汇编语言编写排序程序的思路和方法。 二.实验内容 1.单字节无符号数排序。 2.去极值滤波。 三.实验要求 1.单字节无符号数排序:DATANUM单元开始存放双字节无符号数,表示要排序数据 的个数,DATAS单元开始存放要排序的数据,数据个数至少10个,程序运行之后, 这些数据按照由小到大的顺序仍然存放于DATAS单元开始的位置。 2 .去极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连 续6个A/D采样值(12位——双字节,低12位),要求去掉最大值和最小值,将 余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完 成这个滤波过程。
相关主题