汇编实验报告 实验一 汇编程序的汇编及运行.doc_第1页
汇编实验报告 实验一 汇编程序的汇编及运行.doc_第2页
汇编实验报告 实验一 汇编程序的汇编及运行.doc_第3页
汇编实验报告 实验一 汇编程序的汇编及运行.doc_第4页
汇编实验报告 实验一 汇编程序的汇编及运行.doc_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 汇编程序的汇编及运行1实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程(2)生成LST文件,查看LST文件(3)生成OBJ文件,修改语法错误(4)生成EXE文件(5)执行2实验环境IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录(1)将数据段输入,取名1.txt,保存在MASM文件夹下。生成LST文件,(不必连接、运行)用EDIT查看1.LST文件。试回答:DA1,DA2的偏移量分别是多少?COUNT的值为多少?DATA SEGMENT ORG 20H NUM1=8 NUM2=NUM1+10HDA1 DB IBM PC DA2 DB 0AH, 0DHCOUNT EQU $-DA1DATAENDS END(2)输入有错误的文件,修改错误语句。(MASM没有出现错误即可。不必连接、运行。)DATA SEGMENTVAR1DB 0, 25, ODH, 300VAR2 DB 12H, A4H, 6BHVAR3 DB ABCDEFVAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENT ASSUMECS: CODE, DE: DATABEINGMOV AX, DATA MOV DS, AX LEA SI, VAR5 MOV BX, OFFSET VAR2 MOV SI, 0ABH MOV AX, VAR1+2 MOV BX, SI MOV VAR5+4, VAR4 MOV AH, 4CH INT 21HCODEENDS ENDSTART(3)输入正确的程序,汇编、连接、运行STACKSSEGMENT STACK DW 128 DUP(?)STACKSENDSDATASSEGMENT STRING DB WELCOME!, 13, 10, $DATASENDSCODESSEGMENT ASSUMECS: CODES, DS: DATASSTART: MOVAX, DATAS MOVDS, AX LEA DX, STRING MOVAH, 9 INT 21H MOV AH, 4CH INT 21HCODESENDS ENDSTART1 算法描述及实验步骤1.(1)生成1.st文件(2)用EDIT查看文件2.修改后正确算法:DATA SEGMENTVAR1 DB 0, 25, 0DH, 30VAR2 DB 12H, 0A4H, 6BHVAR3 DB ABCDEFVAR4 DW 1234H, 5678HVAR5 DW 10H DUP(?)DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS: DATABEING: MOV AX, DATAMOV DS, AXLEA SI, VAR5MOV BX, OFFSET VAR2MOV byte ptrSI, 0ABHMOV AL, VAR1+2MOV AX, SIMOV BX, AXMOV AX, VAR4MOV VAR5+4, AXMOV AH, 4CHINT 21HCODE ENDSEND BEING5调试过程 1.程序没有错误,结果:2.程序运行出现错误:问题及改正:(1). 2.asm(2): error A2009: Symbol not defined: ODH 表示没有定义ODH;出错语句VAR1 DB 0, 25, ODH, 300, 这里的 ODH应该为 16进制数 的0DH。修改后仍提示错误,因为300越界,可改为30 。(2). 2.asm(3): error A2009: Symbol not defined: A4H 没有定义A4H这个变量出错语句“VAR2 DB 12H, A4H, 6BH”16进制中字母开头的16进制数开头必须加上“0”,所以必须在A4H之前加0.,将其改为0A4H。(3).2.asm(9): error A2009: Symbol not defined: DS是存储代码段的,所以将DE改为DS。(4). 2.ASM(10): error A2105: Expected: instruction or directive ;问题:这是符号的漏写了,语句“BEINGMOV AX, DAT”中BEING后面漏了“:”,所以应加上“:”。(5). 2.asm(14): error A2035: Operand must have size 没有指明大小出错语句“MOV SI, 0ABH”立即数存入内存中,必须指明大小;所以必须在SI前加入 byte ptr 改为“MOV byte ptrSI, 0ABH”(6). 2.asm(15): error A2068: Cannot address with segment register出错语句“MOV AX, VAR1+2” VAR1的地址+2后只占8位空间,而AX寄存器为16位,所以位数不匹配,应该把AX改为AL或者AH这些8位的寄存器。(7).2.asm(16): error A2052: Improper operand type出错语句“MOV BX, SI ”MOV指令不允许两个内存单元之间的直接操作,需要引入一个通用寄存器AX 作为中介,修改后“MOV AX, SIMOV BX, AX”(8)2.asm(17): error A2052: Improper operand type 这个问题与上面那个相同,修改方式也同上。修改为:“MOV AX, VAR4MOV VAR5+4, AX”(9). asm(21): error A2009: Symbol not defined: START 没有定义STARTEND START 这里的END应该跟上面的BEING:对应,所以可以把 “END START”改为“END BEING”;或者将上面的“BEING”改为“START”6. 实验结果1. 程序正常运行,用EDIT查看1.lst文件得到题目要求数据:2.修改后无错误,达到题目要求:3.对文件进行汇编,连接产生3.exe文件在DOS下运行,结果如下7. 总结通过这次的实验让我初步的熟悉汇编程序的汇编、连接、执行等过程,对于汇编指令了解了不少。在这次实验最主要是学会了如何找错,修改,查看结果等。在改错过程中,基础知识是必不可少的,没有认真注意一些指令的常规用法、数据的转移等就会出现错误。我们在书写程序指令的时候就要牢记指令的用法,不能每次都依靠电脑提示去找错,增加工作量。实验二 顺序程序设计1实验目的和要求1. 学习使用DEBUG的命令;2. 使用DEBUG命令在数据段中查看程序运行的结果;3. 利用DEBUG运行简单的程序段。2实验环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录1)输入程序观察寄存器变化 使用DEBUG,将下面的程序段写入内存,逐条执行,观察每条指令执行后,CPU中相关寄存器的内容变化。注意用T命令执行时,CS: IP寄存器的内容MOVAX, 4E20ADDAX, 1416MOVBX, 2000ADDAX, BXMOVBX, AXADDAX, BXMOVAX, 001AMOVBX, 0026ADDAL, BLADDAH, BL ADDBH, AL MOVAH, 0 ADDAL, BL ADDAL, 9C2)下列程序单步运行,注意AL,BX,CX寄存器的变化,并观察数据段字母的变化。DSEGSEGMENTMSG1DBabcDSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART:MOVAX, DSEG MOVDS, AX LEABX, MSG1 MOVCX, 3 S: MOVAL, BX ANDAL, 11011111B ;将AL中的ASCII码的第5位置0,;变成大写字母。 MOV BX, AL INCBX LOOPS MOVAL, 0 MOVAH, 4CH INT 21HCSEGENDS ENDSTART3)程序的跟踪执行操作在DOS下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下:(1)在DOS下输入:DEBUG 文件名.EXE(2)在DEBUG提示符下输入U命令(3)可以用T命令单步执行指令,执行到 MOV AH, 4CH时结束,也可以用G命令执行整个程序,输入:G=B地址(如:G=0000)(4)用D命令查看程序执行后数据段的变化输入:D K地址:0 (如:D1260:0)在显示的数据中,对照源程序或LST文件查看结果所在的偏移地址的内容。4)编写调试下面的程序,用DEBUG查看数据段中的结果(1),X,Y,W为字节类型变量,结果存于Z单元,写出数据段和代码段。(2)X,Y为字节类型数,求,写出完整的数据段和代码段,不用乘除指令。4算法描述及实验步骤题目2大写变小写算法:DSEGSEGMENTMSG1DBABCDSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART: MOVAX, DSEG MOVDS, AX LEABX, MSG1 MOVCX, 3 S: MOVAL, BX OR AL, 00100000B (或者用add的指令加上00100000即加上32) MOV BX, AL INCBX LOOPS MOVAL, 0 MOVAH, 4CH INT 21HCSEGENDS ENDSTART题目 3:步骤:(1)在DOS下输入:DEBUG 4.EXE(2)在DEBUG提示符下输入U命令(3)输入:G=0000 (4)用D 1406:0命令查看程序执行后数据段的变化算法:DSEG SEGMENTMSG1 DW 7856H,2038HMSG2 DW ?DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX MOV AX,MSG1 AND AX,MSG1+2 MOV MSG2,AX MOV AL,0 MOV AH,4CH INT 21HCSEG ENDS END START题目4(1)算法:DSEG SEGMENTX DB 2hY DB 2hW DB 3hZ DW ?TEN DB 10DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX MOV BL,X ADD BL,Y MOV AL,W SUB AL,X IMUL TEN ADD AX,5 IDIV BL MOV Z,AX MOV Z+1,AX MOV AH,4CH INT 21HCSEG ENDS END START4.2算法:因为不能用乘除指令,所以改用移位指令来代替DSEG SEGMENTX DB 5HY DB 4HZ DB ?DSEG ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DSEGSTART:MOV AX,DSEG MOV DS,AX MOV AL,X ADD AL,Y MOV CL,3 SAL AL,CL MOV BL,X SUB BL,Y SAL BL,1 SUB AL,BL MOV AH,AL AND AH,00001111B MOV CL,4 SAR AL,CL MOV Z,AL MOV Z+1,AH MOV AH,4CH INT 21HCSEG ENDS END START5调试过程4.2 在移位中,所移位数大于一时必须用CL寄存器,不能直接写为“sal ax 3”改为“MOV CL,3 SAL AL,CL”因为不能用乘除指令,不能直接得出余数,要另加语句“MOV AH,AL AND AH,00001111b”6. 实验结果实验一:以下为T命令执行下的一段内容变化:CS为代码段寄存器,不变;IP为指针寄存器;读取一条指令后,IP中的值自动增加,以使CPU可以读取下一条指令。比如读入“bb0020“指令长度为3字节,那么IP就自动加3,读入03c3,指令长度为2字节,IP自动加2;实验二:逐步运行结果如下:以下为小写变大写,大写变小写的实验结果:实验三:按要求实验结果如下:实验四:4.1以下为实验数据为x=2,y=2,w=3的时候的结果,结果商为3,余3;与正常结果无异4.2以下为实验数据为x=5,y=4的时候的结果,其中商为4,余6;与正常结果无异7. 总结这次的实验主要是熟悉了程序执行过程的跟踪执行操作。学习使用DEBUG命令,用DEBUG指令来查看指令的数据段的运行结果。并通过T命令来查看各种寄存器的内容的变化。而且通过这次实验,熟悉加减法指令,乘除指令和移位指令的使用,指令间的互相代替和转换。实验三 分支循环程序设计1实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。 2实验环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录1. 有10个数,统计正数的个数,存放在变量M中中。经过汇编后,形成EXE文件。在DEBUG中,先用G0命令执行程序,用D命令查看M单元的内容,会发现结果不正确。用单步执行命令T0,单步执行程序,查找程序中的逻辑错误,注意每一次循环中AL寄存器中值的变化是否正确。(AL寄存器中存放正数的个数)DSEGSEGMENT MSGDB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6MDB ?DSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART:MOVAX, DSEG MOVDS, AX MOVCX, 10 MOVAL, 0 LEASI, MSGL1:MOVBL, SI CMP BL, 0 JBENEXT INCALNEXT:INCSI LOOPL1 MOVM, AL MOVAL, 0 MOVAH, 4CH INT21HCSEGENDS ENDSTART2. 数据段中是一组无符号数,将最小数存放在M单元中。按上题方法查找一处逻辑错误。DSEGSEGMENT MSGDB 13, 15, 7, 25, 24M DB ?DSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART:MOVAX, DSEG MOVDS, AX MOVCX, 4 MOVAL, MSG MOVSI, OFFSET MSG+1L1:CMP AL, SI JBNEXT MOVAL, SINEXT:LOOP L1 MOVM, AL MOV AL, 0 MOVAH, 4CH INT 21HCSEGENDS END START3. 编程:在首地址为BUF开始的内存单元中存有10个字节数,求其中0的个数,并将结果存于RESULT中。4. 编程:,Ai,Bi为字节型无符号数,分别存于NUM1和NUM2开始的连续存储单元中,结果存于REST单元中。4算法描述及实验步骤算法:DSEGSEGMENT MSGDB 4, -2, -6, 0, 5, 67, 8, -3, 5, 6MDB ?DSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART:MOVAX, DSEG MOVDS, AX MOVCX, 10 MOVAL, 0 LEASI, MSGL1: MOVBL, SI CMP BL, 0 JlENEXT INCALNEXT: INCSI LOOPL1 MOVM, AL MOVAL, 0 MOVAH, 4CH INT21HCSEG ENDS ENDSTART算法:DSEGSEGMENT MSGDB 13, 15, 7, 25, 24M DB ?DSEGENDSCSEGSEGMENT ASSUMECS: CSEG, DS: DSEGSTART:MOVAX, DSEG MOVDS, AX MOVCX, 4 MOVAL, MSG MOVSI, OFFSET MSG+1L1: CMP AL, SI JBNEXT MOVAL, SINEXT: INC SI LOOP L1 MOVM, AL MOV AL, 0 MOVAH, 4CH INT 21HCSEGENDS END START算法:DATA SEGMENTBUF DB 0,1,2,3,-4,5,0,0,6,7M DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,0 LEA SI,BUF MOV CX,10LOP: CMP BYTE PTRSI,0 JNE NEXT INC ALNEXT: INC SI LOOP LOP MOV M,AL MOV AL,0 MOV AH,4CH INT 21HCODE ENDS END START算法:DATA SEGMENTNUM1 DB 1,2,3,4,5,6,7,8NUM2 DB 1,2,3,4,5,6,7,8REST DW ?DATA ENDSCSEG SEGMENT ASSUME CS:CSEG,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV CX,8 MOV BX,0 MOV SI,OFFSET NUM1 MOV DI,OFFSET NUM2JISUAN:MOV AL,SI MUL BYTE PTRDI ADD BX,AX INC DI INC SI LOOP JISUAN MOV REST,BX MOV AL,0 MOV AL,4CH INT 21HCSEG ENDS END START5调试过程1.运行得出结果有错,应该只有6个正数逐步运行:在逐步输入中发现,在数据为-2时,执行ALJBENEXT这句指令本来应该跳转到NEXT,当是指令仍然执行AL加1操作,由此发现错误,由于JBE是无符号位的比较,所以会自动将负数转为正数比较,导致结果错误。所以将JBE改为JLE,重新调试,没有发现错误,结果正确。2.出现错误,最小数应为7,而答案却为13逐步运行:在调试的过程中发现错误,我们可以很清晰的从上图发现,在逐步调试中SI的值都没有发生变化,这样就导致了比较出现了错误,循环并没有按要求执行,只是13和15的不断比较,所以最后只能出现得出13经检查发现,在NEXT:中少了SI加一的操作,所以在NEXT:后面加上INC SI;后,程序正确运行得出结果.。SI正常变化如图:4.实验调试都正确,不知道为什么不能执行G命令,不过可以用T命令取得结果 6. 实验结果1.修改后运行,结果正确,测试数据为:4, -2, -6, 0, 5, 67, 8, -3, 5, 6。所以最后结果为6个正数2.修改后运行,结果正确,测试数据为:13, 15, 7, 25, 24,所以比较后最小数为7:3.程序运行结果正确,测试数据为0,1,2,3,-4,5,0,0,6,7,所以结果为34.程序运行结果正确,测试数据为NUM1 DB 1,2,3,4,5,6,7,8NUM2 DB 1,2,3,4,5,6,7,8逐步运行到最后结果为BX=OOCC即2047. 总结通过这次的实验,掌握了循环语句的基本用法。加上指令的改错,要在单步执行中寻找错误,对指令运行变化有了更深的了解。而且这次实验中让我更加细心,因为一个命令中字母的变化可能不会提示错误,但却会导致结果的不同。我们要以严谨的心来对待实验。实验四 DOS功能调用1实验目的和要求1. 学会DOS中关于显示功能调用指令的用法。2. 领会修改显存方法显示字符。2实验环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录1、 输入一个字符,显示出来2、 输入一个字符串,显示出来3、 buf开始的3个的16位二进制数用十六进制数的形式显示出来(1)理解程序(2)输入程序,汇编,运行(在DOS状态下输入:文件名.EXE),观察结果。(3)如果要分行显示,程序要如何修改?DATASEGMENTBUFDW4F59H, 56A8H, 0FF90HDATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATA MOVDS, AX MOVSI, 0P:MOVBX, BUFSI MOVCH, 4L:MOVCL, 4 ROLBX, CL MOVDL, BL ANDDL, 0FH CMPDL, 10 JBNEXT ADDDL, 7NEXT:ADDDL, 30H MOVAH, 2 INT21H DECCH JNZL INCSI INCSI CMPSI, 4 JNAP MOVAH, 4CH INT21HCODE ENDSENDSTART4、 运行下列程序,在屏幕的第1行,会显示一个字符X,理解程序段STACK SEGMENT DB 128 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,SS:STACKSTART: MOV AX,STACK MOV SS,AX MOV SP,128 MOV AX,0B800H MOV ES,AX MOV AH,0 ;BIOS 10H的0号功能,设置80X25的彩色字符模式 MOV AL,03H INT 10H MOV AH,X MOV ES:160*1+40*2,AH MOV AL,0 MOV AH,4CH INT 21HCODE ENDS END START5、 显示*6、 编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。4算法描述及实验步骤1 :在这道题中,使用了DOS调用功能的1号功能。编写程序,创建1.asm为文件,对其编译运行,查看结果。程序如下CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,01 INT 21H MOV AH,4CH INT 21HCODE ENDS END START2 :按照题目所述,使用的是DOS功能里面的10号功能和2号功能。写程序,创建2.asm为文件,对其编译运行,查看结果。指令如下:DATA SEGMENTBUF DB 20,?,20 DUP(?)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,0AH INT 21H MOV DL,0DH MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H MOV CL,BUF+1 MOV SI,0L: MOV DL,SI+2 MOV AH,2 INT 21H INC SI LOOP L MOV AH,4CH INT 21HCODE ENDS END START 3 :按要求逐步执行找出问题,然后对其输出的格式进行修改DATASEGMENTBUF DW4F59H, 56A8H, 0FF90HMEG DB 0DH,0AH,$DATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATAMOVDS, AX MOVSI, 0P:MOVBX, BUFSIMOVCH, 4L:MOVCL, 4ROLBX, CLMOVDL, BLANDDL, 0FHCMPDL, 10JBNEXTADDDL, 7NEXT:ADDDL, 30HMOVAH, 2INT21HDECCHJNZL LEA DX,MEG MOVAH, 9INT21H INCSI INCSI CMPSI, 4 JNAPMOVAH, 4CHINT21HCODE ENDSENDSTART5 :使用了DOS的02功能,10功能,并使用了循环跳转DATA SEGMENT DATA ENDSCODE SEGMENT ASSUME CS:CODESTART:MOV AX,DATA MOV DS,AX MOV BX,9LP: MOV CX,BXLOP: MOV DL,* MOV AH,2 INT 21H LOOP LOP MOV AH,02H MOV DL,0AH INT 21H MOV DL,0DH INT 21H DEC BX DEC BX CMP BX,1 JGE LP MOV AL,0 MOV AH,4CH INT 21HCODE ENDS END START 6 :编写程序,统计字缓冲区中的20个数据的正数、负数、0的个数,并将统计结果以16进制形式显示出来。STACKS SEGMENT STACK DW 128 DUP(?)STACKS ENDSDSEG SEGMENT BUF DB 0,-1,2,4,3,-4,5,6,-7,0,0,2,5,6,-1,5,4,2,-1,-1RESULT DB 0 DSEG ENDSCSEG SEGMENT PARA PUBLIC CODE ASSUME CS:CSEG,DS:DSEGSTART: MOV AX,DSEG MOV DS,AX MOV AX,0 MOV BX,0 MOV DX,0 LEA SI,BUF MOV CX,20LOP: CMP BYTE PTRSI, 0 JNE L1 INC DL ;0的个数 JMP L3L1: JG L2 INC AL ;负数的个数 JMP L3 L2: INC BL ; 正数的个数L3: INC SI LOOP LOP MOV BH,0 CALL DISP ;调用显示子程序,显示正数的个数 MOV BL,AL MOV BH,0 CALL DISP ;调用显示子程序,显示负数的个数 MOV BL,DL MOV BH,0 CALL DISP ;调用显示子程序,显示规划零的个数 MOV AL,0 MOV AH,4CH INT 21HDISP PROC ;显示BX中的数 PUSH AX PUSH BX PUSH DX MOV CH,4ROLL: MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH CMP DL,9 JBE NEXT1 ADD DL,07HNEXT1: ADD DL,30H MOV AH,02H INT 21H DEC CH JNZ ROLL POP DX POP BX POP AX RETDISP ENDPCSEG ENDS END START5调试过程题目理解错误,没有用到DOS的调用功能,变成直接输出字符串,没有输入的功能6. 实验结果1输入字符,数据“E”2输出字符串3.未修改前输出的结果:修改后输出的结果4.分析:这是10H中断功能之一的0号功能,当AH=0的时候为0号功能更,而下一句为设置方式。如:“MOV AH,0 ; MOV AL,03H;” 意为: BIOS 10H的0号功能,3号显示设置,设置80X25的彩色字符模式。在这个空间,向这个地址写入数据,写入内容将立即出现在显示器上。5.按要求输出*6.测试数据为“0,-1,2,4,3,-4,5,6,-7,0,0,2,5,6,-1,5,4,2,-1,-1”,所以共11个正数,6个负数,3个零,答案正确。7. 总结 这次的实验主要是让我们熟悉了DOS的一些基本功能的调用,让我应用这些功能来实验对字符的一些操作和修改。在这次的实验中,我还熟悉了寄存器中不同数值的存储转换过程。通过对实验算法的了解分析,熟悉各种功能的使用。实验五 子程序设计1实验目的和要求1、学习子程序的编写,主子程序的调用2、不同模块间程序的调用和调试2实验环境实验的硬件环境是:IBMPC机及其兼容机实验的软件环境是: 操作系统:DOS 2.0以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(或ASM .EXE);连接装配程序:LINK .EXE;交叉引用程序:CREF.EXE(可有可无)。3实验内容及实验数据记录1、数据段中的3个字符,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察IP的变化DATASEGMENTMAGDB ABCDATAENDSCODESEGMENTASSUMECS: CODE, DS: DATASTART:MOVAX, DATA MOVDS, AX MOVSI, 0 MOVCX, 3LL:MOV DL, MAGSICALL MADD INCSI LOOPLLMOVAH, 4CHINT21HMADDPROCMOV AH, 02H INT 21HRETMADDENDPCODEENDS END START2、阅读S31.ASM和S32.ASM两个模块中的程序,并分别汇编,然后连接成一个可执行文件S31.EXE。具体步骤如下:MASM S31.ASM(分别汇编)MASM S32.ASMLINK S31 S32 (将两个文件连接成为一个文件名为S31)S31.EXE (运行)3、编程:利用主程序

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论