1、3)用T命令逐条运行这些指令,检查并记录有关寄存器及ZF情况。3、带进位加减法:1)用A命令在内存200H处键入下列内容,并用U命令检查:MOV AH,12MOV AL,84MOV CH,56MOV CL,78ADD AL,CLADC AH,CHMOV DH,A7MOV DL,58SUB DL,7FSBB DH,342)用T命令逐条运行这些指令,检查并记录有寄存器及CF内容。3)上面这段程序若改用16位操作指令达到同样结果,怎么改?试修改并运行之。* 4、BCD码加减法(选作)1)内容:MOV AL,65ADD AL,16DAA2)要求:用A 命令键入,U命令检查,T命令逐条运行并记录有关寄存
2、器及AF内容。相加后AL值本来是7B,经DAA指令调整后变为81,即65和16两个BCD码的和。实验二 内存操作数及寻址方法1、DEBUG命令:A,T,D,F,G;2、数据在内存中的存放方式和内存操作数的几种寻址方式;3、汇编指令:INC,DEC,LOOP,INT 3的应用;4、汇编语言伪指令:BYTE PTR和WORD PTR的应用。 (可以只用byte和word)实验内容和步骤 一、内存操作数及各种寻址方式使用程序内容:MOV AX,2000 MOV 200,AXMOV BX,210MOV BYTE PTRBX,50MOV CL,40INC BXMOV BX,CLDEC CLMOV SI,
3、5MOV BX+SI,CLMOV BX+SI+1,CLMOV WORD PTRBX+SI+2,1234操作步骤 1)用A命令键入上述程序,并用T命令逐条运行。2)每运行一条有关内存操作数的指令,要用D命令检查并记录有关内存单元的内容并注意是什么寻址方式。D命令显示结果时,双字节数在内存的存放是高地址对应高数据位; 指令中出现的BYTE PTR及WORD PTR是因为操作数的宽度必须一致。二、求累加和程序程序内容:MOV BX,200MOV CX,9XOR AX,AX ADD AL,BX ;按字节相加ADC AH,0 ;若有进位则到AH中 LOOP 108INT3操作步骤:1)进入DEBUG环境
4、。2)用命令F 200 L10 40 在内存200H-20FH地址处填入一系列值40H。3)用命令A 100 将上述程序键入到100H开始的内存中。LOOP指令用到108H号地址,即为ADD指令的当前地址,构成一个循环。4)用命令G =100 执行该程序段,程序运行后停在INT 3 指令上,此时观察AX寄存器 的值为240H,即为9个40H的和。INT 3指令是一条断点中断指令,程序遇到该指令则停止。5)用T =100命令单步执行,观察IP、CX及AX寄存器的值,分析程序执行过程。实验三 数据串传送和查表程序1、利用简化段定义方法实现程序结构定义;2、利用DOS的21H号中断调用完成输入输出;
5、3、查表法和查表指令XLAT;4、数据串传送指令MOVS及重复前辍REP;5、掌握EQU和DUP伪指令的用法。实验内容及步骤一、利用查表方法显示内存单元的内容1、编辑下列程序:.model small.stack.data str1 db ABCDEFGHIJ ;待显示的内存区内容 str2 db Please input the number you will display:,10,13,$.code.startup mov ah,9 mov dx,offset str2 int 21h ;显示STR2字符串的内容,即提示信息 mov ah,1输入待显示的字符序号(0-9) mov bx,
6、offset str1 sub al,30h xlat ;查STR1表,对应序号的字符ASCII码进入AL mov dl,al mov ah,2显示对应字符.exit 0End2、程序汇编通过后,在运行过程中输入0-9的任意数字,显示STR1字符串中对应位置 的字符。3、在DEBUG环境中,用P命令调试执行该程序,察看AL寄存器的变化情况及结果的输出, 分析其执行过程。二、数据串传送程序abcdefghijklmn源串定义 lengs equ $-str1 str2 db lengs dup (?),目标串 mov ax,ds mov es,ax ;使DS和ES为同一个段 cld lea si
7、,str1 lea di,str2 mov cx,lengs rep movsb ;串复制显示目标串2、程序汇编通过后,运行程序察看输出结果。3、在DEBUG环境中,用P命令调试执行该程序,察看SI、DI寄存器及相应内存单元的变化情况,分析其执行过程。4、如果把源串的小写字母复制到目标串的同时再修改为对应的大写字母,该怎么修改程序?实验附录 ASCII码表编码字符00NUL20SPACE406001SOH21!41A61a02STX22“42B62b03ETX23#43C63c04EOT24$44D64d05ENQ25%45E65e06ACK26&46F66f07BEL2747G67g08BS
8、28(48H68h09HT29)49I69i0ALF2A*4AJ6Aj0BVT2B+4BK6Bk0CFF2C,4CL6Cl0DCR2D4DM6Dm0ESO2E.4EN6En0FSI2F/4FO6Fo10DEL3050P70p11DC131151Q71q12DC232252R72r13DC333353S73s14DC434454T74t15NAK35555U75u16SYN36656V76v17ETB37757W77w18CAN38858X78x19EM39959Y79y1ASUB3A:5AZ7Az1BESC3B;5B7B1CFS3C5E7E1FUS3F?5F_7F实验四 完整段定义程序实现1、
9、掌握完整段格式定义的程序设计方法;2、掌握伪指令:SEGMENT、ENDS、ASSUME、END、OFFSET、DUP;3、掌握汇编语言程序中指名程序入口的方法;4、了解用INT 21H 的4C号功能调用返回系统的方法;5、掌握用MASM、LINK工具进行汇编和链接的过程。实验内容要求程序中实现对键盘输入的字符作如下处理: 如果输入的是小写字母则转换成对应的大写字母并显示在屏幕上; 如果输入的是大写字母则转换成对应的小写字母并显示在屏幕上; 如果输入的是键盘上的Esc键则退出程序执行; 按其它任意可显示键,则不作处理,直接显示输出。实验步骤DATA SEGMENT ;数据段定义MESSAGE
10、DB Please input your key!,0DH,0AH,DATA ENDSSTACK SEGMENT PARA STACK STACK堆栈段定义DB 50 DUP(?STACK ENDSCODE SEGMENT ;代码段ASSUME CS:CODE,DS:DATA,SS:STACK ;分配段寄存器START: MOV AX,DATAMOV DS,AXMOV DX,OFFSET MESSAGEMOV AH,9INT 21H ;显示提示信息AGAIN: MOV AH,1读入一个键盘按键CMP AL,1BH ;按的是ESC键(ASCII码为1BH)则退出程序JE EXITCMP AL,6
11、1H JB NEXTCMP AL,7AHJA NEXTSUB AL,20H ;ASCII码在61H和7AH之间(小写字母)则转换为大写字母JMP DISPNEXT: CMP AL,41HJB DISPCMP AL,5AHJA DISPADD AL,20H ;ASCII码在41H和5AH之间(大写字母)则转换为小写字母DISP: MOV DL,ALMOV AH,2显示当前字符JMP AGAIN ;循环EXIT: MOV AH,4CH ;结束程序INT 21H CODE ENDSEND START ;指定START标号为程序入口地址2、把上述程序保存为ASM源文件,利用MASM根据对源文件进行汇编
12、,产生.OBJ文件,若汇编时提示有错,编辑工具修改源程序后重新汇编,直至通过。3、用LINK将.OBJ文件连接成可执行的.EXE文件。4、在DOS状态下运行LINK产生的.EXE文件,按过键盘之后在屏幕上显示实验要求的字符,按ESC键可返回DOS。汇编过程中若出现错误,可参阅本章最后的实验附录。5.把上述程序改为简化段定义格式,再汇编,查看执行结果。实验五 分支结构程序设计1、掌握利用无条件转移指令JMP和有条件转移指令实现多分支程序的设计方法。2、掌握用DOS的中断调用,实现再程序执行过程中从键盘动态输入字符串的方法。3、掌握程序中标号的定义和使用。实现从键盘输入一个月份数值(1-12),根
13、据输入的月份数值显示相应的月份英文单词缩写,如输入5则显示May。 mon db Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec msg1 db Please input a month(1-12) :,13,10, msg2 db Input error! Now try again. buffer label byte ;定义输入月份的输入缓冲区 maxlen db 3 ;最多2个数字,包括一个回车 actlen db ?保存实际输入的字符个数 string db 3 dup(?) ;保存输入的月份数字内容(ASCII码)shuru:开始输入
14、月份编号 lea dx,msg1 mov ah,09h lea dx,buffer mov ah,0ah输入月份数值 cmp actlen,0 ;若没有输入月份则转出错处理 je shuruerr;以下判断输入月份是否合法 lea di,string cmp actlen,2 je da10 ;若输入的是2位数月份值则转到da10标号处执行 mov al,string ;若只输入1位数字月份值,则读出该值 and al,0fh ;把ASCII码转换为对应数字 jmp jisuanda10: mov al,string把月份数值十位的ASCII码转换为对应数字(如12月的1字) mov bl,1
15、0 mul bl and string1,0fh ;把月份数值个位的ASCII码转换为对应数字 add al,string1 ;十位加上个位 (如12月)jisuan:以下计算偏移地址 cmp al,1 ;比1小是非法月份 jb shuruerr ;若月份值小于1则转出错处理 cmp al,12 ja shuruerr ;比12大也是非法月份 sub al,1 ;月份值减1 shl al,1 shl al,1 ;月份再乘4对应了MON字符串中从首地址开始的字符相对位置 xor ah,ah ;1月份从0位置开始即JAN,.5月份从位置16开始即MAY lea si,mon ;找到被显示月份字符的
16、位置 add si,ax mov cx,3output: mov dl,si ;输出对应月份英文缩写 mov ah,2 int 21h inc si loop output .exit 0shuruerr: lea dx,msg2 ;输入出错时提示出错,并转到程序起始处重新执行 mov ah,09h jmp shuruend3、程序运行中不输入月份值(直接回车),或输入非法月份值,观察程序执行的情况。实验六 分支与循环混合结构程序设计1、掌握利用.IF语句实现分支程序的设计方法;2、掌握利用.REPEAT语句实现循环程序的设计方法;3、掌握DIV指令的使用特点;4、掌握地址表的定义和使用方法。
17、实现成绩单的分等级统计功能,在数据段中有成绩单的定义,并包含有若干个分数,程序根据成绩单数据的个数循环分别统计个分数段成绩的个数,最后输出个等级段的分数个数。要求:成绩单数据少于100字节,输出的每个档次统计值按两位数显示。HAN DB 42,62,68,70,79,82,85,90,95,99,66,88,78,90,98,200 ;成绩单count equ $-han ;记录数据个数MEM DB 6 dup(0) ;分别用于存放各分数段成绩的个数scoree db 10,13,Score E count is:定义各分数段的提示信息scored db 10,13,Dscorec db 10
18、,13,Cscoreb db 10,13,Bscorea db 10,13,Ascoreo db 10,13,Othertable dw scoreo,scoree,scored,scorec,scoreb,scorea ;定义地址表 MOV CX,count mov si,0begin:统计各个分数段的成绩个数 .if hansi=60 & hansi=69 add mem2,1=70 &=79 add mem3,1=80 &=89 add mem4,1=90 &=99 add mem5,1 .else add mem0,1 .endif loop begin mov cx,6 .repea
19、t ;开始循环 mov si,cx dec si add si,si ;计算地址表中对应地址项与提示信息的对应关系 mov dx,tablesi xor ah,ah mov si,cx MOV al,memsi-1 ;读出统计好的一个数值(此处只能处理99以下的) mov bl,10 div bl ;ax/10 mov memsi-1,ah ;AH为余数是个位,暂时存放回该内存单元 mov dl,AL ;al为商是十位 add dl,30h ;转换为ASCII码 MOV AH,2 INT 21H ;以十进制形式显示十位 mov dl,memsi-1 add dl,30h再显示个位 .until
20、cxz ;CX自动减1,减到0结束循环END3、修改成绩单的内容再重新汇编和运行程序,观察程序的结果变化情况。4、利用DEBUG工具的U命令反汇编可执行程序,观察.IF语句及.REPEAT语句所对应的汇编指令情况。5、利用MASM的命令行,汇编源文件并生成.LST列表文件,查看列表文件内容。实际上高级程序结构控制语句在汇编时,都转换成相应的比较指令和条件转移指令了。高级程序结构控制语句使得程序设计、理解都变得非常方便。实验七 多重循环及过程的应用1、掌握多重循环程序和排序程序设计方法;2、掌握带符号数的比较及转移语句应用;3、伪指令 EQU 及操作符 的使用;4、掌握过程的定义和调用方法;5、掌握把内存数据(16位有符号2进制)按照10进制显示输出的方法。 完成冒泡法排序程序,利用过程对排好序的数据按10进制显示输出1、输入下列程序,汇编并连接通过。array dw 12,-66,108,9,5,-123,2000,-900;待排序数据count equ $-arraypushcount db 0 ;用于临时存放被显示数据的10进制总位数.s
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1