微 机 实 验 报 告
微机实验报告
第一部分:8086汇编语言程序设计
一、实验目的
通过上机练习,初步掌握8086的指令系统,熟悉8086汇编语言程序的编写格式,学会编写简单的汇编语言应用程序,初步学会使用DEBUG调试工具。
二、实验题目
(一)编程实现从字符串中查找特定的字符,记录特定字符的个数,并将结果在屏幕上显示,同时退出并返回DOS。(要求字符串从键盘上输入)
1、流程图
- 1 -
微 机 实 验 报 告
2、实验程序及注释 DATA SEGMENT
BUFSIZE DB 20 ;数据段
ACTCHAR DB ? ;定义字符串
CHARTEXT DB 20 DUP(?) ;给输入字符分配内存 DB '$'
CNT DB 0 ;给计数器分配内存 STRING1 DB 'PLEASE INPUT THE STRING:','$'
STRING2 DB 0AH,0DH,'INPUT THE WORD YOU WANT TO CHECK:','$' STRING3 DB 0AH,0DH,'THE NUMBER OF THE WORD IS:','$' DATA ENDS ;数据段结束 COSEG SEGMENT ;代码段 ASSUME CS:COSEG,DS:DATA START: MOV AX,DATA MOV DS,AX
MOV DX,OFFSET STRING1 ;显示提示语:请输入字符串 MOV AH,09H ;输出字符串STRING1 INT 21H
MOV DX,OFFSET BUFSIZE ;从键盘输入字符串存入BUFSIZE MOV AH,0AH ;并送显 INT 21H
MOV DX,OFFSET STRING2 ;显示提示语:想查询的字符是 MOV AH,09H ;输出字符串STRING2 INT 21H
MOV AH,01H ;从键盘上输入字符到AL中并送显 INT 21H
MOV BX,OFFSET CHARTEXT ;将字符串首地址存入BX MOV CL,ACTCHAR ;置循环次数CX=字符串长度 XOR CH,CH
LP1: CMP AL, [BX] ;字符串从头开始与键入字符AL比较 JZ LP2 ;相等则转入LP2
INC BX ;指针指向字符串下一个字符 DEC CX ;循环次数减一 JNZ LP1 ;若还有未比较的字符,继续循环LP1 JMP FINI ;若全部比较完毕,跳转FINI LP2: INC CNT ;计数器增一
INC BX ;指针指向字符串下一个字符 DEC CX ;循环次数减一
JNZ LP1 ;若还有未比较的字符,跳至LP1 FINI: MOV DX,OFFSET STRING3 ;显示提示语:所查询的字符个数: MOV AH,09H INT 21H
MOV AL,CNT ;将计数器的值送AL
AAM ;将此值转换成非压缩BCD码
- 2 -
微 机 实 验 报 告
ADD AH,30H ;将BCD码转换为ASCⅡ码 MOV DL,AH ;高位送显 MOV AH,02H INT 21H
MOV AL,CNT ;再将计数器的值送AL AAM
ADD AL,30H ;将BCD码转换为ASCⅡ码 MOV DL,AL ;低位送显 MOV AH,02H INT 21H
MOV AH,4CH ;结束 INT 21H
COSEG ENDS ;代码段结束 END START ;程序结束
3、运行结果
PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙
INPUT THE WORD YOU WANT TO CHECK(输入待查找字符): A↙ THE NUMBER OF THE WORD IS(数量为):3↙
PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙
INPUT THE WORD YOU WANT TO CHECK(输入待查找字符):9↙ THE NUMBER OF THE WORD IS(数量为):0↙
PLEASE INPUT THE STRING(先输入字符串):ASDFAAD↙
INPUT THE WORD YOU WANT TO CHECK(输入待查找字符): S↙ THE NUMBER OF THE WORD IS(数量为):1↙
4、程序改进
1循环次数的改进 ○
原来的程序:MOV CX,19
改进原因:此程序表明无论输入的字符串多长,即使没有达到限定的最大字符
串的长度,也要循环19次。
改进后的程序:MOV CL,ACTCHAR
XOR CH,CH
改进结果:ACTCHAR即所输入的字符串的实际长度,因此,实际为置循环次
数CX=字符串长度,这样可以提高运行速度
2删除多余语句 ○
原来的程序:
LP1: CMP AL,[BX] ;将字符与字符串逐个比较 JZ LP2 ;相等则转入LP2
INC BX ;指针指向字符串下一个字符 DEC CX ;循环次数减一
CMP CX,0000H ;若还有未比较的字符
- 3 -
微 机 实 验 报 告
JNZ LP1 ;继续循环LP1
JMP FINI ;若全部比较完毕,跳转FINI LP2: INC CNT ;计数器增一
INC BX ;指针指向字符串下一个字符 DEC CX ;循环次数减一
CMP CX,0000H ;若还有未比较的字符 JNZ LP1 ;跳转LP1
改进原因:DEC为自减一,若减为0,它会自动影响其标志位ZF,所以不用把
CX再与00H比较,判断CX是否为零。
改进后的程序:(删除CMP CX,0000H) LP1: CMP AL, [BX] ;字符串从头开始与键入字符AL比较 JZ LP2 ;相等则转入LP2
INC BX ;指针指向字符串下一个字符 DEC CX ;循环次数减一 JNZ LP1 ;若还有未比较的字符,继续循环LP1 JMP FINI ;若全部比较完毕,跳转FINI LP2: INC CNT ;计数器增一
INC BX ;指针指向字符串下一个字符 DEC CX ;循环次数减一
JNZ LP1 ;若还有未比较的字符,跳至LP1
(二)编程实现把键盘输入的两位BCD码,在屏幕上用16进制数显示出来。 1 流程图 初始化
键入字符
判断是否在0到9之间
转化为十进制数
除以16
将整数部分和余数部分转化为ASIIC码,并送显
返回DOS
2、实验程序及注释 CODE SEGMENT ASSUME CS:CODE
START: CALL DECIBIN ;调用十进制转二进制子程序 CALL CRLF ;调用添加回、换行符子程序
CALL BINIHER ;调用二进制转十六进制并显示子程序 CALL CRLF ;调用添加回、换行符子程序
- 4 -
微 机 实 验 报 告
MOV AH,4CH INT 21H DECIBIN PROC
MOV BX,0 ;BX清零
MOV CL,2 ;限定输入两位BCD码
NEW: MOV AH,1 ;DOS调用,键入字符并回显 INT 21H
SUB AL,30H ;比较键入字符是否在0到9之间
JL NEW1 ;小于零,即不在范围内,就跳到NEW1 CMP AL,9
JG NEW1 CBW XCHG AX,BX MOV CX,10 MUL CX XCHG AX,BX ADD BX,AX POP CX DEC CL JNC NEW
RET NEW1: PUSH CX MOV AH,3 INT 10H MOV AH,2 DEC DL INT 10H POP CX JMP NEW
DECIBIN ENDP BINIHER PROC
MOV CH,4 RORATE: MOV CL,4 ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH
JL NEXT ADD AL,7H
NEXT: MOV DL,AL MOV AH,2 INT 21H
DEC CH ;左>右则转移
;将一个字节转化为字
;交换两个寄存器之间的内容 ;十进制数10入CX
表达式的值与AX内容相乘,并将结果存于AX ;返回到原来调用指令的下一条指令
;NEW1为固定光标程序,直到输入0-9 数字,光标才会移动 ;记录转换后的十六进制位数
;利用CL当计数器,记录寄存器数位移动次数 ;循环左移四位,相当于除以16 ;把BX低八位BL内数据转移至al ;高四位清零 ;AL小于等于3AH转移 ;把ASCII码装入DL ;DOS调用,显示字符 ;CH减一,减到零时,零标志置1
- 5 -
;
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新高中教育8086汇编语言程序设计 微机实验报告 全文阅读和word下载服务。
相关推荐: