当前位置:文档之家› 汇编语言实验四

汇编语言实验四

福建农林大学金山学院实验报告系:信息与机电工程系专业:计算机科学与技术年级: 08姓名:游品尧学号: 082231044 实验课程:汇编语言实验室号:___ _605 实验设备号: F5 实验时间:11.22指导教师签字:成绩:实验四 DOS功能调用1.实验目的和要求1.学会DOS中关于显示功能调用指令的用法。

2.领会修改显存方法显示字符。

2.实验环境实验的硬件环境是:IBM—PC机及其兼容机实验的软件环境是:操作系统:DOS 2.0以上;调试程序:;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。

3.实验内容及实验数据记录1、输入一个字符,显示出来2、输入一个字符串,显示出来3、buf开始的3个的16位二进制数用十六进制数的形式显示出来,(1)理解程序(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。

(3)如果要分行显示,程序要如何修改?DATA SEGMENTBUF DW 4F59H, 56A8H, 0FF90HDATA ENDSCODE SEGMENTASSUME CS: CODE, DS: DA TASTART: MOV AX, DA TAMOV DS, AXMOV SI, 0P: MOV BX, BUF[SI]MOV CH, 4L: MOV CL, 4ROL BX, CLMOV DL, BLAND DL, 0FHCMP DL, 10JB NEXTADD DL, 7NEXT: ADD DL, 30HMOV AH, 2INT 21HDEC CHJNZ LINC SIINC SICMP SI, 4JNA PMOV AH, 4CHINT 21HCODE ENDSEND START4、运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段STACK SEGMENTDB 128 DUP(0)STACK ENDSCODE SEGMENTASSUME CS:CODE,SS:STACKSTART: MOV AX,STACKMOV SS,AXMOV SP,128MOV AX,0B800HMOV ES,AXMOV AH,0 ;BIOS 10H的0号功能,设置80X25的彩色字符模式MOV AL,03HINT 10HMOV AH,'X'MOV ES:[160*1+40*2],AHMOV AL,0MOV AH,4CHINT 21HCODE ENDSEND START5、显示*************************6、编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。

4.算法描述及实验步骤1.输入一个字符,显示出来。

DA TA SEGMENTSTRING DB '--------',13,10,'$'HUAN DB 13,10,'$'DA TA ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASTART: MOV AX,DA TAMOV DS,AX----------------------------------------------------------------------------------------------------------------- MOV AH, 1INT 21H 输入字符;MOV BL,AL 将输入的字符放在BL 中;LEA DX,HUANMOV AH,9INT 21H 换行;LEA DX,STRINGMOV AH,9INT 21H 加上一个‘----------------‘间隔;MOV AH,2MOV DL,BLINT 21H 显示之前输入的字符;----------------------------------------------------------------------------------------------------------------- MOV AH,4CHINT 21HCODES ENDSEND START2.输入一个字符串,显示出来。

STACKS SEGMENT STACKDB 200 DUP(?)STACKS ENDSDA TAS SEGMENTSTR DB"please input a string:$"BUF DB 30DB ?DB 30 DUP (?)CRLF DB 0AH,0DH,"$"DA TAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATAS,SS:STACKSSTART: MOV AX,DATASMOV DS,AX----------------------------------------------------------------------------------------------------------------- LEA DX,STRMOV AH,9INT 21H 输出please input a string: 提示;MOV AH,10LEA DX,BUFINT 21H 输入字符串,由BUF限定最多输入30个,并且记录输入个数;LEA DX,CRLFMOV AH,9INT 21H 换行;MOV CL,BUF+1LEA SI,BUF+2 将CL 和SI指向BUF第二个和第三个数组;NEXT: MOV DL,[SI]MOV AH,2INT 21HINC SIDEC CLJNZ NEXT 将输入的字符串显示出来;----------------------------------------------------------------------------------------------------------------- MOV AH,4CHINT 21HCODES ENDSEND START3. BUF开始的3个的16位二进制数用十六进制数的形式显示出来,并且分行显示。

想换行显示只要在每个16位二进制显示完后,加个换行指令就行了,就是在NEXT 循环中加入换行指令。

具体代码如下:DA TA SEGMENTBUF DW 4F59H,56A8H,0FF9HCRLF DB 0AH,0DH,"$"DA TA ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASTART: MOV AX,DA TAMOV DS,AXMOV SI,0P: MOV BX,BUF[SI]MOV CH,4L: MOV CL,4ROL BX,CL 左移4位;MOV DL,BLAND DL,0FH 第一位赋值0;CMP DL,10JB NEXTADD DL,7NEXT: ADD DL,30HMOV AH,2INT 21HDEC CHJNZ L----------------------------------------------------------------------------------------------------------------- LEA DX,CRLF 这一步就是换行指令;MOV AH,9INT 21H----------------------------------------------------------------------------------------------------------------- INC SIINC SICMP SI,4JNA PMOV AH,4CHINT 21HCODES ENDSEND START5.显示 *************************DA TA SEGMENTCRLF DB 0AH,0DH,"$"DA TA ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASTART: MOV AX,DA TAMOV DS,AX----------------------------------------------------------------------------------------------------------------- MOV BL,9L: MOV CH,BL 定义初始循环次数为9;LEA DX,CRLFMOV AH,9INT 21H 换行;L1: MOV AH,2MOV DL,'*'INT 21H 显示’*’;DEC CHJNZ L1 当CH等于0时跳转L1;CMP BL,2JB L2 当循环次数减少到2一下时跳转L2结束;SUB BL,2JMP L 循环次数减少2次跳转L ,再循环;L2: LEA DX,CRLFMOV AH,9INT 21H 换行;----------------------------------------------------------------------------------------------------------------- MOV AH,4CHINT 21HCODES ENDSEND START6.编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。

DA TA SEGMENTNUM DB 1,0,0,1,1,1,0,0,1,0,-1,-1,0,-1,-1,-1,0,-1,0,-1CRLF DB 0AH,0DH,"$"DA TA ENDSCODES SEGMENTASSUME CS:CODES,DS:DA TASTART: MOV AX,DATAMOV DS,AX---------------------------------------------------------------------------------------------------------------- LEA SI,NUM 把SI 指向NUM;MOV CH,20 循环次数为20;MOV BL,0MOV DL,0 初始化正数,负数,零的个数;L: MOV AH,[SI]CMP AH,0JG L1 当大于0时跳转L1;JL L2 当小于0时跳转L2;JZ L3 当等于0时跳转L3;L1: INC BLINC SI 正数的个数加一,指针指向下一位;DEC CHJNZ L 跳转L;CMP CH,0JZ L4 当CH等于0时跳转L4显示结果;L2: INC ALINC SI 负数的个数加一,指针指向下一位DEC CHJNZ LCMP CH,0JZ L4 当CH等于0时跳转L4显示结果;L3: INC DLINC SI 零的个数加一,指针指向下一位DEC CHJNZ LCMP CH,0JZ L4 当CH等于0时跳转L4显示结果;L4: MOV BH,0CALL DISPMOV BL,ALMOV BH,0CALL DISPMOV BH,0CALL DISPMOV AL,0MOV AH,4CHINT 21H 显示正数,负数,零的个数;----------------------------------------------------------------------------------------------------------------- DISP PROCPUSH AXPUSH BXPUSH DXMOV CH,4ROLL: MOV CL,4ROL BX,CLMOV DL,BLAND DL,0FHCMP DL,9JBE NEXT1ADD DL,07HNEXT1: ADD DL,30HMOV AH,02HINT 21HDEC CHJNZ ROLLPOP DXPOP BXPOP AXRETDISP ENDP 显示结果的方式;-----------------------------------------------------------------------------------------------------------------CODES ENDSEND START5.调试过程1.输入并显示字符。

相关主题