汇编实验讲课微机原理实验课演示文稿课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《汇编实验讲课微机原理实验课演示文稿课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编 实验 讲课 微机 原理 演示 文稿 课件
- 资源描述:
-
1、a1西北工业大学计算机学院实验教学中心a2 Microsoft宏汇编程序MASM611有建立汇编语言所需的全部工具,我们简要介绍其集成开发软件PWB。PWB是集汇编程序的编辑、编译、连接、调试、运行于一体的综合软件。运行 PWB 在计算机 C:盘上具体使用方法结合实例介绍 MASM611文件夹BINR文件夹运行程序PWBa3本部分共进行4次实验,实验内容如下:1实验一 BCD码的运算 2实验三 循环结构程序 3实验四 排序程序 4实验五 分支程序 a4一实验目的一实验目的 1.熟悉在MASM611集成环境下建立、汇编、链接、调试和运行汇编语言程序的全过程。2.掌握汇编语言程序结构中数据段、堆栈
2、段、代码段定义及内存分配方法。3.学会DEBUG调试程序主要命令的使用方法。4.掌握用组合BCD码表示数据的方法,并熟悉其加、减、乘、除运算。二实验内容 1.多位十进制数加法。2.两位十进制数乘法。三实验要求 1.多位十进制数加法:在内存中以DATA1和DATA2为首址,各分配5个字节单元,分别存入两个8位组合BCD码数据(低位在前),将两数相加,结果送回到DATA2处。2.两位十进制数乘法:将被乘数和乘数以组合BCD码形式分别存放于DATA1和DATA2定义的节单元中,经乘法运算,乘积存入DATA3定义的两个内存单元中。3.用DEBUG调试程序、查看运算结果,进行手工验证;并且用DEBUG修
3、改数据,重新执行。a5BCD码用4位二进制编码表示一个十进制数,又称二十进制数。由于这4位二进制数的权值为8421,故也称BCD码为8421码。在计算机里,用一个字节的低4位表示一位十进制数非组合BCD码;用一个字节表示两位十进制数组合BCD码。非组合BCD码uuuu 1001例:计算机里 79d 非组合BCD码:uuuu0111 uuuu1001组合BCD码0111 1001例:计算机里 79d 组合BCD码:0111100116进制数0123456789ABCDEF二进制码00000001001000110100010101100111100010011010101111001101111
4、01111BCD码000000010010001101000101011001111000100110进制数0123456789在计算机里,所有的运算都是按二进制进行的,运算结果是二进制数(即十六进制数)。为了把十六进制运算结果转换成十进制,汇编语言中引进了组合BCD码加法调整指令DAA和减法调整指令DAS。DAA 加法的十进制调整指令 该指令之前要执行ADD或ADC。调整方法:若AF为1,或AL中的低4位是十六进制的A F,则AL内容加06H,AF置1;若CF为1,或AL中的高4位是十六进制的A F,则AL内容加60H,CF置1。AF 辅助进位标志 CF进位标志AL AL中的十六进制数调整为
5、BCD格式a6.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 diloop lop ;循环 .exit end 流程图:开始SI Data1首址DI Da
6、ta2首址清进位设加法次数十进制调整;部分和回送指向下单元数AL 第一加数AL AL+第二加数CX-1=0?结束YNa7.model small.586.datadata1 db 34hdata2 db 56hdata3 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;第二乘数做BCD 加法,加第一乘数次 mov
7、ax,0 clclop:add al,bl daa xchg ah,al adc al,0 daa xchg ah,al loop lop mov data3,ax;积送乘积存储单元 nop nop nop .exit enda8开始BL 第一乘数BH 第一乘数分离出第一乘数的“个位”分离出第一乘数的“十位”第一乘数的“十位”移到“个位”后,再乘 10合成得到16进制的第一乘数CX 16进制的第一乘数BCD码转换成16进制数11AX 0清进位BL 第二乘数第二乘数做加法次数十进制调整AL与AH内容交换AL AL+0+CFAL AL+BLAL与AH内容交换十进制调整CX-1=0?NY存储结果结束
8、a9一、实验目的一、实验目的 掌握循环结构程序的设计、调试。二、实验内容二、实验内容l1 多字节无符号数加法。l2 设计一软件延时器,并在屏幕上显示软件延时倒计时过程。三、实验要求三、实验要求l1多字节无符号加法:在DATAS中存放10个双字节无符号数,l 用循环结构设计程序,通过程序运算,把这10个双字节无符号 l 数相加,其和存入紧邻加数之后的四个单元中。l2软件延时器:做一延时约1秒的软件延时器,在屏幕上按9、l 8、0顺序显示软件延时倒计时过程。a10循环程序的三个组成部分:循环初始状态设置。设置循环次数、为循环体正常工作建立初始状态等。循环体。循环工作的主体,包含循环的工作部分和修改
9、部分。循环的工作部分是为完成程序功能而设计的程序段;循环的修改部分是为保证每一次重复时,参加执行的信息能发生有规律的变化而建立的程序段。循环控制部分。选择一个循环控制条件来控制循环的运行和结束。循环程序的结构:循环初始状态循环控制条件循环体YN循环初始状态循环体循环控制条件YNDO-WHILE结构DO-UNTIL结构a11子程序结构:procedure name PROC Attribute RET procedure name ENDP Attribute NEAR 调用程序和过程在同一个代码段中FAR 调用程序和过程不在同一个代码段中系统功能调用:系统功能调用是DOS为方便汇编语言编写而提
10、供的一组约80个功能调用的常用子程序,它分为设备管理、文件管理和目录管理等几类。DOS规定用软中断指令 INT 21H 进入各功能调用子程序的总入口,再为每个功能调用规定一个功能号,以便进入相应各用子程序的入口。系统功能调用的使用方法:指定的寄存器入口参数AH调用功能的功能号INT 21Ha12EX1:从键盘输入单字符 MOV AH,01H ;1号功能调用 INT 21H将键盘输入字符的ASCII码送到 AL。EX2:从键盘输入字符串 BUF DB 10 DUP(?)LEA DX,BUF MOV AH,0AH ;0A号功能调用 INT 21H将键盘输入的字符串写到 RAM 中去,击回车键表示字
11、符串结束。字符数与予留空间的关系为:少补零多丢失。EX3:输出单字符 MOV DL,M MOV AH,02H;2号功能调用 INT 21H将 DL 中字符从屏幕上显示出来。EX4:输出字符串 BUF DB Thank you MOV DX,OFFSET BUF MOV AH,09H;9号功能调用 INT 21H将 指定 RAM 缓冲区中的字符串从屏幕上显示出来。为字符串结束符。EX5:直接控制台输入/输出单字符 MOV DL,0FFH;DL=0FFH时,MOV AH,06H;6号功能调用 INT 21H;将键盘输入字符 送到 AL 中。MOV DL,M;DL 0FFH时,MOV AH,06H;
12、6号功能调用 INT 21H;将 DL 中字符送到 屏幕上显示。a13.MODEL SMALL.MODEL SMALL.586.586.DATA.DATADATAS DW 1111H,2222H,3333H,4444H,5555H DATAS DW 1111H,2222H,3333H,4444H,5555H DW 6666H,7777H,8888H,9999H,0AAAAH DW 6666H,7777H,8888H,9999H,0AAAAHRESULT DD 1 DUP(?)RESULT DD 1 DUP(?).CODE.CODE.STARTUP.STARTUP MOV SI,OFFSET D
13、ATAs MOV SI,OFFSET DATAs;设指针 MOV CX,10MOV CX,10;累加次数 MOV EAX,0MOV EAX,0;清累加器 CLCCLC;清进位LOP:MOV BX,SILOP:MOV BX,SI;取加数到BX MOVZX EBX,BXMOVZX EBX,BX ;将BX扩展成32位 ADC EAX,EBXADC EAX,EBX;带进位加 INC SIINC SI;改指针 INC SIINC SI LOOP LOPLOOP LOP;循环加 MOV RESULT,EAXMOV RESULT,EAX;存结果 .EXIT.EXIT ENDEND开始SI DATAS的首址C
14、X 累加次数EAX 0清进位BX SI所指加数将BX扩展为32位EAX EAX+EBX+CFSI 指向下一加数CX-1=0?NY存结果 结束a14.model small.data data db 20h,20h,20h,20h,20h,39h,0dh,$.code.startupmov cx,09h;设循环次数lop:mov ah,09h;显示功能调用lea dx,dataint 21hcall near ptr delay;调用延时子程序dec data+5;修改显示数字loop lop.exitDelay proc near uses cx ;延时子程序 mov bx,06ffh ;设第
15、二时常数Delay1:mov cx,0h loop$;自身循环CX次 dec bx ;第二时常数减1 jnz delay1 ;不为零循环 retDelay endpend开始CX 循环次数字符串显示功能调用延时子程序调用显示数字修改CX-1=0?NY结束主程序流程:主程序流程:延时子程序流程:延时子程序流程:延时子程序定义BX 第二时常数CX 第一时常数CX-1=0?NYBX-1BX=0?NY子程序返回子程序结束关键词a15一实验目的一实验目的 1学习无符号数比较大小指令;2掌握多重循环编程方法;3掌握汇编语言编写排序程序的思路和方法。二实验内容二实验内容 1单字节无符号数排序。2去极值滤波。
16、三实验要求三实验要求 1单字节无符号数排序:DATANUM单元开始存放双字节无符号数,表示要排序数据 的个数,DATAS单元开始存放要排序的数据,数据个数至少10个,程序运行之后,这些数据按照由小到大的顺序仍然存放于DATAS单元开始的位置。2 去极值滤波:某控制系统为了抗干扰,采用去极值滤波法处理采集数据,取连 续6个A/D采样值(12位双字节,低12位),要求去掉最大值和最小值,将 余下4个数求平均值,用该平均值代表当前时刻系统状态的真值。试编一程序完 成这个滤波过程。a16流程图:开始BL 数据个数-1CX BL扩展数据指针 SI 置 0累加器 前数 前数与后数比较前数后数前、后数交换数
17、据指针 SI 指向下一数数据指针 SI 指向下一数YNBL-1CX-1=0?CX-1=0?NNYYZF=1?N结束Ya17 .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,datassi cmp al,datassi+1 ja jh inc si loop lop jmp next jh:xchg al,datassi+1 mov dat
18、assi,al inc si loop lopnext:dec bl jz finish jmp lop0finish:nop .exit enda18开始调排序子程序对数据进行排序对排完序的数据掐头去尾求和求均值保存结果结束a19 .model small .586 .datadatanum db 6datasdw 0123h,0abch,0234h dw 0345h,0456h,0567h .code.startupcall px ;排序mov si,offset datas+2 ;掐头去尾送指针mov cx,4 ;送累加次数clc ;清进位mov ax,0 ;取首数qh:adc ax,s
19、i ;累加inc siinc siloop qhshr ax,2 ;除4mov datas,ax ;存结果到DATAS首位.exitpxproc near mov bl,datanum;取字长 dec bllop0:movzx cx,bl;送比较次数 mov si,0lop:mov ax,datassi;送前数cmp ax,datassi+2;与后数比较 ja jh;前大于后,转交换inc siinc si;指针加 1 loop lop;循环比较 jmp next;一轮排序完jh:xchg ax,datassi+2;交换 mov datassi,ax inc siinc si loop lop
20、next:dec bl;修改比较次数 jz finish jmp lop0finish:nop;结束 retpx endp enda20一、实验目的一、实验目的 掌握分支程序编程方法,复杂分支程序的查表法等。二、实验内容二、实验内容 1、学生课程成绩分段统计。2、键盘及屏幕显示功能调用。三、实验要求三、实验要求 1、学生课程成绩分段统计:用单字节表示每个学生的学号,学生的课程成绩用两位十进制数表示(最低0分,最高99分),规定0F0H表示作弊,0F1H表示缺考,0FFH为一组学生成绩的结束符。学生成绩在内存的存放形式为“学号,成绩”,每个学生占两个字节,从内存SCORE为首址开始存放。要求学生
21、人数不少于10个,试编程序,按0 9、10 19、20 29、80 89、90 99及作弊、缺考等12种情况把学生的课程成绩进行分段统计,将统计结果存入以COUNT为首址的12个单元中。2、试编一程序扫描键盘,当B键按下时,在屏幕上显示09循环计数;S键按下时停止计数;再按B键继续计数过程。E键按下时退出程序。3、用DEBUG调试程序预置数据和查看程序运行结果,以验证程序正确性。a21开始设置学号、成绩指针取学号取成绩是结束标志?取十分位,并将十分值扩展为16位送DI,对DI所指统计区段统计值加1是作弊?是缺考?修改指针CX-1=0?CX 统计上限作弊统计区段统计值加1缺考统计区段统计值加1结
22、束YYYYNNNNa22 .model small .586 .data score db 1,10h,2,20h,3,30h,4,40h,5,50h,6,77h,7,70h db 8,80h,9,90h,10h,08,11h,0f0h,12h,0f1h,0ffhcount db 12 dup(?).code .startup mov cx,20;送统计上限 mov si,0;SCORE 统计指针statistic:mov al,scoresi ;取学号 cmp al,0ffh ;判是否为结束 je sta_end;转统计结束 mov bl,scoresi+1;取成绩 cmp bl,0f0h;
23、是否作弊 je fake;是,转作弊处理 cmp bl,0f1h;是否缺考 je miss;是,转缺考处理 shr bl,4;取十分位 movzx di,bl ;将十分值扩展为16位送DI inc countdi ;相应区段统计值加1down:inc si ;改指针 inc si loop statistic;循环sta_end:nop;结束 .exitfake:mov di,10;作弊处理 inc countdi jmp downmiss:mov di,11;缺考处理 inc countdi jmp down enda23开始显示提示信息置处理指针为“停止”调延时、键盘扫描程序有键动?转处理
24、指针处B 键?S 键?E 键?转处理指针处结束置处理指针为“计数”置处理指针为“停止”NYYYYNNN处理指针为“计数”处理指针为“停止”计数显示a24子程序定义BX 第二时常数CX 第一时常数CX-1=0?NYBX-1BX=0?NY子程序返回监测键动有键动?做键动标志bx=1NYa25.model small.dataMess1 db press b button-count,0dh,0ahmess2 db press s button-stop,0dh,0ahMess3 db press e button-exit,0dh,0ah,$count db 20h,20h,20h,20h,20h
25、,30h,0dh,$.code.startupmov ah,09h;显示提示信息mov dx,offset mess1int 21hmov si,stop;设处理指针scan:call near ptr delay ;调延时、键扫程序 or bx,bx;判有无键动 jnz scan1;有键动,转键处理 jmp si;无键动,转当前处理程序scan1:cmp al,b ;键处理程序 je b_proc cmp al,s je s_proc cmp al,e je e_proc call delay jmp sib_proc:mov si,count_;B键处理 jmp scans_proc:mo
展开阅读全文