《北京化工大学微机原理汇编实验报告》由会员分享,可在线阅读,更多相关《北京化工大学微机原理汇编实验报告(15页珍藏版)》请在金锄头文库上搜索。
1、实验一汇编语言源程序的建立、汇编、连接和运行实验一汇编语言源程序的建立、汇编、连接和运行1. 编写程序,从键盘输入一个字符并回显到视频显示器上。2. 编写程序调用 BIOS 功能,在屏幕上显示 5 个“Beijing University of ChemicalBeijing University of ChemicalTechnologyTechnology”。流程图:代码:1.DATAS SEGMENT;此处输入数据段代码DATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS
2、:STACKSSTART:MOV AX,DATASMOV DS,AX;此处输入代码段代码MOV AH,1INT 21HMOV AH,4CHINT 21HMOV AH,4CHINT 21HCODES ENDSEND START2.DATAS SEGMENT;此处输入数据段代码STRING DB Beijing University of Chemical TechnologyDATAS ENDSSTACKS SEGMENT;此处输入堆栈段代码STACKS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART:MOV AX,DATASMO
3、V DS,AX;此处输入代码段代码MOV DX,SEG STRINGMOV DS,DXLEA DX,STRINGMOV AH,09INT 21HMOV AH,4CHINT 21HCODES ENDSEND START实验二实验二课后习题 2-22,2-23课后习题 2-22,2-23一、实验内容内存与字符串。二、实验习题课后习题 2-22,2-23三、实验报告要求1.画出程序流程框图。2.源程序清单(要求在重要语句后加注释)。2-22:两个字符串的长度均为 100,首地址分别为 STRING1 和 STRING2,比较两个字符串是否完全相同,如果相同,将 BL 寄存器置为 00H;如果不完全相
4、同,将 BL 寄存器置为 FFH,并将第一个字符串中的第一个不相同字符的地址放在 SI 寄存器。流程图:代码:DATA SEGMENT STRING1 DB ABCDEFJHIJ STRING2 DB ABFMEWATER DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX LEA SI,STRING1 LEA DI,STRING2 MOV CX,10 CLD REPE CMPSB JCXZ ALLMATCH DEC SI DEC DI JMP DONE ALLMATCH:MOV BX,00H D
5、ONE: MOV BX,0FFH OUT: MOV AH,4CH INT 21H CODE ENDS END START2-23:一个数据块的首地址为 DATA,结束符为$,编写程序段统计数据块中分别等于正值、负值和零的数据个数,分别存入 PLUS、MINUS 和 ZERO 单元。流程图:代码:ASSUME CS:CODE,DS:DATADATA SEGMENTBUFDB -3,-2,-1,0,1,2,3NDW $ - BUF;统计数据个数PLUSDB 0MINUS DB 0ZERODB 0DATA ENDSCODE SEGMENTSTART:MOV AX,DATA;装载MOV DS,AXMO
6、V CX, NLEA BX,BUFL:CMP BYTE PTR BX,0;有符号比较跳转JGBIGJEEINC MINUSJMP ENDJUDGE:INC ZEROJMP ENDJUDGBIG:INC PLUSENDJUDG:INC BX;移动指针LOOP LMOV AX,4C00H;返回INT 21HCODE ENDSEND START实验三实验三字符串搜索字符串搜索一、实验内容字符串的查找和匹配。 二、实验习题查找匹配字符串 SEARCH。SEARCH。程序接收用户键入的一个关键字以及一个句子。如果句子中不包含关键字则显示No match!;如果句子中包含关键字则显示Match且把该字在句
7、子中的位置用十六进制数显示出来。 三、实验报告要求1.画出程序流程框图。2.源程序清单(要求在重要语句后加注释)。流程图:要求程序的执行过程如下:Enter keyword:loveEnter Sentence:I love ChinaMatch at location:11H of the sentence.Enter Sentence: English is difficultNo match.源代码: DATAREA SEGMENT STRING1 DB “Enter keyword:$“ STRING2 DB “Enter sentence:$“ STRING3 DB “Match a
8、t location:$“ STRING4 DB “No match!“,13,10,“$“ STRING5 DB “11H of the sentence.$“ keyword DB 50D,?,51D DUP(?) sentence DB 50D,?,51D DUP(?) DATAREA ENDSCODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATAREA,ES:DATAREA START: PUSH DS SUB AX,AX PUSH AXMOV AX,DATAREA MOV DS,AX MOV ES,AXLEA DX,STRING1 MOV
9、AH,09H INT 21H LEA DX,keyword MOV AH,0AH INT 21H MOV AH ,02H MOV DL,0AH INT 21H LEA DX,STRING2 MOV AH,09H INT 21H LEA DX,sentence MOV AH,0AH INT 21H MOV AH,02HMOV DL,0AH INT 21HLEA SI,keyword+2 ;关键词 LEA DI,sentence+2 MOV AX,0 MOV AL,sentence+1 ;句子字符个数 MOV AH,keyword+1 ;关键词字符个数 CMP AL,AH JL NO SUB AL
10、,AH MOV AH,0 MOV CX,AX INC CXCOMPARE: PUSH CX MOV CX,3 ;建议采用 mov ax,字符个数,使字符的个数不固定 CLD REPZ CMPSB JZ MATCH MOV AX,3 ;建议采用 mov ax,字符个数 SUB AX,CX SUB SI,AX ;关键词回到词首 MOV AX,2 ;建议采用 mov ax,字符个数-1 SUB AX,CX SUB DI,AXPOP CX LOOP COMPARE NO: LEA DX,STRING4 MOV AH,09H INT 21H JMP EXIT MATCH: POP CX MOV BX,D
11、ILEA DX,STRING3 MOV AH,09H INT 21H SUB BX,OFFSET sentence+2 SUB BX,2 ;首地址所在字符串中的地址 CALL CHANGE LEA DX,STRING5MOV AH,09H INT 21H EXIT: RET MAIN ENDPCHANGE PROC NEAR PUSH AX PUSH BX PUSH CX PUSH DX MOV CH,4 MOV CL,4 ROTATE: ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINTIT ADD AL,7H PRIN
12、TIT: MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ ROTATE POP DX POP CX POP BX POP AX RET CHANGE ENDP CODE ENDS END START实验四 DOS 和 BIOS 调用方法实验四 DOS 和 BIOS 调用方法 一、实验内容BIOS 调用方法,INT 10H 视频显示功能。 二、实验习题1. 编写程序, 从键盘输入一个字符串保存在内存一缓冲区中, 然后将该字符串在屏幕上显示。2. 编写一个汇编语言程序,要求从键盘输入一个小写字母,以其大写字母形式显示,否则显示 ERROR。三、实验报告要求1.画出程序流
13、程框图。2.源程序清单(要求在重要语句后加注释) 1: STACK SEGMENT STT DB 100 DUP(?) STACK ENDS DATASEGMENT BUFF DB 100 DB ? DB 100 DUP(?) CRLF DB 0AH, 0DH, $ ;0AH, 0DH 在 ASCII 中是回车换行 DATAENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOV DS,AX MOVAH,10 MOV DX,OFFSET BUFF INT 21H MOV BL,BUFF+1 ;将输入的字符串的
14、个数赋值给 BL LEA SI, BUFF+2;取 BUFF+2 的偏移地址给 SI MOV BYTE PTR SI+BX+1, $;SI 是存放输入的字符串的位置,那么加上 BX 就跳过 了字符串,在后面的一个单元赋值一个$. MOVAH,9 MOV DX,OFFSET CRLF;加了 2 句, 为了输出回车换行 INT 21H MOV DX,OFFSET BUFF+2;输出字符串, 遇到$结束 INT 21H EXIT: MOVAX,4C00H INT 21H CODE ENDS END START2: 流程图:代码: DATAS SEGMENT;此处输入数据段代码 STRING DB E
15、RROR$ DATAS ENDSSTACKS SEGMENT ;此处输入堆栈段代码 STACKS ENDSCODES SEGMENT ASSUME CS:CODES,DS:DATAS,SS:STACKS START: MOVAX,DATAS MOV DS,AX ;此处输入代码段代码 MOVAH,08 INT 21H CMPAL,61H JL ERROR CMPAL,7AH JG ERROR SUB AL,20H MOV DL,AL MOVAH,2 INT 21H MOVAH,4CH INT 21H ERROR: MOV DX,SEG STRING MOV DS,DX LEA DX,STRING MOVAH,09 INT 21H CODES ENDS END START