汇编实验报告(总)_第1页
汇编实验报告(总)_第2页
汇编实验报告(总)_第3页
汇编实验报告(总)_第4页
汇编实验报告(总)_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

1、福建农林大学金山学院福建农林大学金山学院(程序设计类课程)实验报告实验报告课程名称:汇编语言姓 名:陈振韦系:信息与机电工程专 业:电子信息工程年 级:2012 级学 号: 126710100指导教师:刘永芬职 称:讲师20132014 学年第二学期实验项目列表实验项目列表序号实验项目名称成绩指导教师1实验一 汇编程序的汇编及运行刘永芬2实验二 顺序程序设计刘永芬3实验三 分支循环程序设计刘永芬4实验四 子程序设计刘永芬5实验五 DOS 功能调用刘永芬总平均福建农林大学金山学院实验报告福建农林大学金山学院实验报告系: 信息与机电工程系 专业: 电子信息工程 年级: 12 姓名: 陈振韦 学号:

2、 126710100 实验课程: 汇编语言 实验室号:_试验 A 楼_608_ 实验设备号: 实验时间: 2014,4,9 指导教师签字: 刘永芬 成绩: 实验一实验一 汇编程序的汇编及运行汇编程序的汇编及运行1实验目的和要求实验目的和要求 (1)熟悉汇编程序的汇编、连接、执行过程(2)生成 LST 文件,查看 LST 文件(3)生成 OBJ 文件,修改语法错误(4)生成 EXE 文件(5)执行2实验环境实验环境IBMPC 机及其兼容机实验的软件环境是: 操作系统:DOS 2.0 以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏汇编程序:MASM.EXE(

3、或 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)输入有错误的文件,修改错误语句。 (M

4、ASM 没有出现错误即可。不必连接、运行。 )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

5、, 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 ENDSTART4算法描述及实验步骤算法描述及实验步骤

6、 (1)在记事本编写源程序 1.txt,masm 1.txe 回车,回车,出现提示输入 1,生成 1.lst,打开 1.lst,查看内容。 (2)在记事本编写源程序 2.txt,masm 1.txe 回车,回车,出现提示输入 2,查看错误,再在 2.txt 修改内容,然后经汇编生成.obj 文件,链接生成.exe 文件。 (3)在记事本编写源程序 3.txt,masm 3.txe 回车,回车,然后经汇编生成 3.obj 文件,链接生成 3.exe 文件,debug 3.exe,输入 g 显示出结果。5调试过程调试过程 (1)调试过程如下图: (2)实验 2 出现 10 个错误,1 个警告。如下

7、图:修改过程:(1)ODH 改为 0DH;(2)300 改为 30;(3)ABCDEF将引号改为英文型引号;(4)在 BEGINE 后加冒号;(5)将 MOV SI, 0ABH 改为 MOV BYTE PTRSI, 0ABH;(6)将 MOV BX,SI改为 MOV CX,BX MOV CX,SI MOV BX,CX;(7)将 MOV VAR5+4,VAR4 改为 MOV DX,VAR5+4 MOV DX,VAR4 MOV VAR5+4,DX (3)修改如下:WELCOME! 和$的引号改为英文型的,START 后的冒号改为英文型的。6. 实验结果实验结果 (1) DA1,DA2 的偏移量分别

8、是多少?COUNT 的值为多少? (2)修改后的结果如下图: (3)实验结果如下图:7. 总结总结本次会编,真是一次艰难的事情啊,不过我想万事开头难。通过这次汇编我学会了一些基本的汇编、连接、执行过程;试验段目的不是为了验证书本理论,更重要的是对实践能力 的培养。福建农林大学金山学院实验报告福建农林大学金山学院实验报告系: 信息与机电工程系 专业: 电子信息工程 年级: 2012 姓名: 陈振韦 学号: 1256710100 实验课程: 汇编语言 实验室号:_实验楼 a606 实验设备号: j6 实验时间: 4.16 指导教师签字: 成绩: 实验二实验二 顺序程序设计顺序程序设计1实验目的和要

9、求实验目的和要求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,将下面的程序段写入内存,逐条执

10、行,观察每条指令执行后,CPU 中相关寄存器的内容变化。注意用 T 命令执行时,CS: IP 寄存器的内容MOV AX, 4E20ADD AX, 1416MOV BX, 2000ADD AX, BXMOV BX, AXADD AX, BXMOV AX, 001AMOV BX, 0026ADD AL, BLADD AH, BL ADD BH, AL MOV AH, 0 ADD AL, BL ADD AL, 9C2)下列程序单步运行,注意 AL,BX,CX 寄存器的变化,并观察数据段字母的变化。如果原来是大写,要如何修改指令,使得它们变成小写?DSEGSEGMENTMSG1DB abcDSEGEN

11、DSCSEGSEGMENT ASSUME CS: CSEG, DS: DSEGSTART: MOV AX, DSEG MOV DS, AX LEABX, MSG1 MOV CX, 3 S:MOV AL, BX AND AL, 11011111B ;将 AL 中的 ASCII 码的第 5 位置 0,;变成大写字母。 MOV BX, AL INCBX LOOPS MOV AL, 0 MOV AH, 4CH INT 21HCSEGENDS END START3)程序的跟踪执行操作在 DOS 下直接输入文件主名就可以执行文件了,有的程序会显示结果,可能执行后什么结果都没有,是因为程序中没有显示命令。那

12、么如何查看程序的运行结果呢?程序执行过程的跟踪操作步骤如下:(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))/()510*)(YXXWZ,X,Y,W 为字节类型变量,结果存于Z

13、单元,写出数据段和代码段。(2)X,Y 为字节类型数,求16/ )2*)(8*)(YXYXZ,写出完整的数据段和代码段,不用乘除指令。4算法描述及实验步骤算法描述及实验步骤1、修改成正确的代码;objlinkexe;2、修改成正确的代码;objlinkexe;4、一丶初始化有符号数乘法 imul(单操作数),被乘数在 ax 中,将(w-x)送入 ax,Imul 10,因为 8bit*8bit,结果超过 8bit,存于 dx:ax-bx:cx。有符号数相加 add,并且两操作数位数要一致。用 add 加法指令,算出 x+y。有符号数除法 idiv (单操作数),当除数是 8bit,被除数要 16

14、bit,所以被除数默认存于 dx:ax,除后商在 ax,余数在 dx.最后结果存在 z 变量中。二丶初始化把 X 存在 AL 中,使用 add,使 X,Y 相加,存在 AL 中。乘 8 相当于左移 3 位,移动位数存于 CX 中。乘完后存于 AX 中。把 X 存在 BL 中,使用 SUB,使 X,Y 相减,存在 BL 中。乘 2 相当于左移 1 位。乘完后存于 BX 中。然后 SUB,AX,BX除 16 相当于右移 4 位,移动位数存于 CX 中。乘完后存于 AX 中。最后结果存在 z 变量中。汇编好程序,保存 txt 中,运行 masm 生成 lst 文件,有错误就进行修改,修改后再链接文件

15、生成 obj 文件,debug 生成 exe 文件,然后 g 命令运行一次,最后 d 命令查看结果。5调试过程调试过程1、错误的代码正确的分步2、d 命令查看当 BX=0000 时的 AL,CX 的变化情况:当 BX=0001 时 AL,CX 的变化情况:3、当 BX=0002 时 AL,CX 的变化情况4、不用做5、程序无误调试出错U 命令D 命令6. 实验结果实验结果见调试过程中的末张图7. 总结总结学会使用 debug,各种命令。1、学习使用 debug 的命令;2、使用 debug 命令在数据段中查看程序运行的结果;3、利用 debug 运行简单的程序段。福建农林大学金山学院实验报告福

16、建农林大学金山学院实验报告系: 信息与机电工程 专业: 电子信息工程 年级: 12 级 姓名: 陈振韦 学号: 126710100 实验课程: 汇编语言 实验室号:_608 实验设备号: j3 实验时间: 4/23 指导教师签字: 成绩: 实验三实验三 分支循环程序设计分支循环程序设计1实验目的和要求实验目的和要求1、学习调试程序,查找逻辑错误;2、学习分支语句的编程和调试;3、学习循环语句的编程和调试。2实验环境实验环境实验的硬件环境是:IBMPC 机及其兼容机实验的软件环境是: 操作系统:DOS 2.0 以上;调试程序:DEBUG.COM;文本编程程序:EDIT.EXE、WPS.EXE;宏

17、汇编程序: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

18、, 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 ?D

19、SEGENDSCSEGSEGMENT 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.编程:81iiiBAY,Ai,Bi 为字节型无符号数,分别存

20、于 NUM1 和NUM2 开始的连续存储单元中,结果存于 REST 单元中。4算法描述及实验步骤算法描述及实验步骤(1) 、运行程序,发现结果为 9,错误,单步执行,找错误。发现在执行“JBE NEXT”命令时,到-2 为有符号数,所以应把“JBE”改为“JLE” 。(2) 、运行程序,结果为 0D,单步执行,找错误。可看出一只都只有 2 个数在进行比较,就是 0D 和 0F,直到退出循环。由于指针没有往下跳转,所以出现错误。应在 NEXT 语句开始部分加上 INC SI 语句。 (3) 、程序如下: DATA SEGMENT BUF DB 0,7,1,2,0,4,0,5,0,6RESULT

21、DB ? DATA ENDS CODE SEGMENT ASSUME CS: CODE, DS: DATA START: MOV AX, DATA MOV DS, AX MOV CX, 10 MOV AL, 0 LEA SI, BUF L1: MOV BL, SI CMp BL, 0 JNZ NEXT INC AL NEXT: INC SI LOOP L1 MOV result, AL MOV AL, 0 MOV AH, 4CH INT 21H CODE ENDS END START 5调试过程调试过程 (1) 、调试过程中无错误,用 G 指令发现 M 单元里的内容与实际不符,用 T指令后发现

22、程序中的逻辑错误 JBE,要改成有符指令 JLE。(2)调试过程中无错误:发现在循环处少了“INC SI”后无法形成循环,补上循环指令 LOOP L1。(3)、调试过程无错误,如下图:6. 实验结果实验结果(1)、修改前:修改后:(2)、修改前:修改后:(3)7. 总结总结学习并加深了对调试程序的了解,学会了查找逻辑错误。学会了使用分支语句的编程。但是由于各个知识点的混乱记忆导致各种错误,真是不该。福建农林大学金山学院实验报告福建农林大学金山学院实验报告系: 信息与机电工程系 专业: 电子信息工程 年级: 12 级 姓名: 陈振韦 学号: 126710100 实验课程: 汇编语言 实验室号:6

23、08 实验设备号: J5 实验时间: 4,30 指导教师签字: 成绩: 实验四实验四 子程序设计子程序设计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 个字符

24、,调用子程序将其逐个显示出来。子程序的功能是显示一个字符。单步执行,观察 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 两个模块中的程序,并分别汇编,

25、然后连接成一个可执行文件 S31.EXE。具体步骤如下:MASM S31.ASM(分别汇编)MASM S32.ASMLINK S31 S32 (将两个文件连接成为一个文件名为 S31)S31.EXE (运行)3、编程:利用主程序调用子程序,比较 BUF1 和 BUF2 缓冲区中不相等的字符,并将不相等的字符显示出来。 (也可以将找到的不相等字符逐个显示,用INT 21H 的 02 功能调用)4、编程:子程序搜索指定字符缓冲区中是否有 n,如果有用 y 替代。调用子程序将 BUF1,BUF2,BUF3 中的 n 全部用 y 替代4算法描述及实验步骤算法描述及实验步骤(1)定义 MAG 一段字节字

26、符“ABC” ,然后调用子程序,子程序应用 2 号功能实现字符显示,因为有三个字符所以得循环 3 次。具体操作:将循环次数 3送入 CX,把 MAG 中的第一个字符送入然后执行 CALL MADD 进入子程序,执行完子程序就进行 SI 地址偏移,接着就进入 LOOP 循环指令,LOOP 循环 3 次结束程序。应用 T 命令进行单步执行查看 IP 的变化。(2)MASM S31.ASM(分别汇编) 。MASM S32.ASM 。LINK S31 S32 (将两个文件连接成为一个文件名为 S31) 。Debug S31.EXE 。不同模块间的段间调用。从键盘输入2 位非压缩 BCD 数,存入 AX

27、 寄存器中。为了将其转换为二进制数,编写一个子程序TRAN。显示子程序 DISP 完成将 16 进制数转换为对应的 ASCII 码并显示该字符,显示子程序在另一模块 S32 中。输入数据为 00 时结束。(3)实验代码:DATA SEGMENTBUF1 DB Evern 123456321!,$LEN1=$-BUF1BUF2 DB Happn 13234623!,$LEN2=$-BUF2DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX LEA SI,BUF1MOV CX,LEN1LEA DI,BUF2 M

28、OV CX,LEN2CALL CMMPMOV AH,4CH INT 21H CMMP PROCPUSH AX PUSH BXPUSH CXS: MOV BL,SIMOV DL,DICMP BL,DLJE NEXTMOV AH,2 INT 21HNEXT: INC SIINC DILOOP SPOP CXPOP BXPOP AXRETCMMP ENDPCODE ENDSEND START(4)首先定义了三个字符串 BUF1,BUF2,BUF3,然后各自取出它们要循环的次数和地址。某部分的程序一样,所以可用子程序调用。应用了 CALL 命令对 CMMP 进行调用,CMMP 中内容为与n进行比较如果

29、不等于就跳到 INC SI进行地址下移,否则n替换为y 。以下是程序代码:DATA SEGMENTBUF1 DB Evern dog has his dan!,$LEN1=$-BUF1BUF2 DB Happn everndan!,$LEN2=$-BUF2BUF3 DB nes,you are greed,$LEN3=$-BUF3DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,BUF1MOV CX,LEN1CALL CMMPLEA SI,BUF2MOV CX,LEN2CALL CMMPLEA

30、 SI,BUF3MOV CX,LEN3CALL CMMPMOV AH,4CHINT 21H CMMP PROCPUSH AXPUSH BXPUSH CXMOV BL,nMOV BH,yL: CMP SI,BLJNE NEXT MOV SI,BHNEXT:INC SI LOOP L POP CXPOP BXPOP AXRETCMMP ENDPCODE ENDSEND START5调试过程调试过程(1)下图是部分应用 T 命令后的结果。可以发现 IP 的变化大小总跟上一句指令开辟的字节大小有关。(2)过程无错误,如下图所示:(3)程序无错误。(4)程序无错误。还没运行的结果6. 实验结果实验结果(

31、1)下图出现 IP 有很大变化。当执行完 CALL MADD 后 IP 跳到了 0019,当再 T 后执行 CALL MADD IP 的变化大小总跟上一句指令开辟的字节大小有关。(2)实验结果如下图:(3)字符串比较后输出的不同的字符如下图:(4) )实验结果如下图:7. 总结总结 子程序调用书写,体会到了子程序的便捷可操作性可移植性强。子程序可以层层嵌套,体现了它所特有的优越性。附源程序:NAME S31.ASM不同模块间的段间调用。从键盘输入 2 位非压缩 BCD 数,存入 AX 寄存器中。为了将其转换为二进制数,编写一个子程序 TRAN。显示子程序 DISP 完成将 16 进制数转换为对

32、应的 ASCII 码并显示该字符,显示子程序在另一模块 S32 中。输入数据为 00 时结束。EXTRN DISP: FARCODESEGMENTPARA CODEASSUMECS: CODESTART: MOVAH, 01H INT21H MOVBL, AL INT21H MOVAH, AL MOVAL, BLCMPAX, 3030H JEEXIT CALLNEAR PTR TRAN CALLFAR PTR disp JMPSTARTEXIT:MOV AH, 4CH INT21HTRANPROCNEAR ;将输入的 ASCII 码转换成 2 进制数ANDAX, 0F0FH ;将 ASCII

33、码转换成非压缩 BCD 码,;高位在 AL 中 MOVBL, AH MOVCL, 10D MULCL ADDAL, BLRETTRANENDPCODEENDSEND STARTNAMES32.ASMPUBLIC DISPCODE1 SEGMENTPARA CODEASSUMECS: CODE1DISP PROC FAR MOVBL, AL MOVBH, 00 MOVCH, 4ROLL:MOVCL, 4 ROLBX, CL MOVDL, BL ANDDL, 0FH CMPDL, 9 JBENEXT1 ADDDL, 07HNEXT1: ADDDL, 30H MOVAH, 02H INT21H DE

34、CCH JNZROLLRETDISPENDPCODE1 ENDSEND 福建农林大学金山学院实验报告福建农林大学金山学院实验报告系: 信息与机电工程系 专业: 电子信息工程 年级: 2012 姓名: 陈振韦 学号: 126710100 实验课程: 汇编语言 实验室号:608 实验设备号: E4 实验时间: 2014.5.7 指导教师签字: 成绩: 实验五实验五 DOSDOS 功能调用功能调用1实验目的和要求实验目的和要求1.学会 DOS 中关于显示功能调用指令的用法。2.领会修改显存方法显示字符。2实验环境实验环境实验的硬件环境是:IBMPC 机及其兼容机实验的软件环境是: 操作系统:DOS

35、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)如果要分行显示,程序要如何修改?DATASEGMENTBUFDW 4F59H, 56A8H,

36、 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 行,

37、会显示一个字符 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、

38、 编写程序,统计字缓冲区中的 20 个数据的正数、负数、0 的个数,并将统计结果以 16 进制形式显示出来。4算法描述及实验步骤算法描述及实验步骤(1)调用 1 号、2 号功能,进行基本单字符的输入输出。CODE SEGMENTASSUME CS:CODESTART:MOV AH ,1INT 21HMOV AH,2MOV DL,ALINT 21HMOV AH,4CH INT 21HCODE ENDSEND START(2)运用 10 号功能,进行字符串的输入,应用 2 号功能结合 LOOP,对字符串进行输出。DATA SEGMENTBUD DB 40 DB ? DB 40 DUP(?)MSG

39、DB 0DH,0AH,$DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUDMOV AH ,10INT 21HLEA DX,MSGMOV AH,9INT 21HMOV CL,BUD+1LEA SI,BUD+2S:MOV DL,SIMOV AH,2 INT 21HINC SILOOP SMOV AH,4CHINT 21HCODE ENDSEND START在应用 9、10 号功能进行字符串的输入输出。应注意换行或空格的输出,并且在进行字符串的输入时在末尾要加一个$才可以正常

40、输出。DATA SEGMENTBUD DB 40 DB ? DB 40 DUP(?)MSG DB 0DH,0AH,$DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV DX,OFFSET BUDMOV AH ,10INT 21HLEA DX,MSGMOV AH,9INT 21HLEA SI,BUD+2mov ah,9mov dx,siint 21hMOV AH,4CHINT 21HCODE ENDSEND START(3)第 1、2 小问:我们知道要将数以 16 进制的形式显示就必须找到其对应的字

41、母 ABCDEF 的 ASCII 码,ASCII 码 48 是数字 0 的开始也就是 16 进制中的 30,而 3AH 开始至 40H 为 7 个常用符号的 ASCII 码值,从 41H 开始才是大写字母的ASCII 码值,因此将所要转化的四位二进制数与 10 做比较,若小于 10 可直接加 30H 得到其对应的 ASCII 码,若大于等于 10 则应多加上 7 跳过 7 个符号ASCII 码得到其对应的 16 进制 ASCII 码以达到转换的目的即显示时打印其相应的 ASCII 码对应的字符。第 3 问:要达到题目要求的分行显示,在定义数据时定义 MSG DB 0DH,0AH,$ ,并在程序

42、中写入这几句 LEA DX,MSG MOV AH,9 INT 21H 实现换行。DATA SEGMENTBUF DW 4F59H,56A8H,0FF90HMSG DB 0DH,0AH,$DATA ENDSCODE SEGMENTASSUME CS:CODE ,DS:DATASTART :MOV AX,DATAMOV DS,AXMOV SI,0P: MOV BX,BUFSIMOV CH,4MOV CL,4L: MOV CL,4ROL BX,CLMOV DL,BLAND DL,0FHCMP DL,10JB NEXTADD DL,7NEXT:ADD DL,30HMOV AH,2INT 21HDEC

43、CHJNZ LINC SIINC SILEA DX,MSGMOV AH,9INT 21HCMP SI,4JNA PMOV AH,4CHINT 21HCODE ENDSEND START(4)可以看到程序首先通过MOV AX,0B800HMOV ES,AX在内存开辟了附加段,段首地址为 B800H 并通过 MOV ES:160*1+40*2,AH 以便于向 B80F0H(位于 B8000HBFFFFH 彩色字符模式显示缓冲区)执行 MOV AH,X写入字符X ,以达到直接改变显存内容显示。(5)应用多重循环。将循环次数先送入 BX,再将其送入 CX,调用 2 号功能,进行*输出,循环 2 号功能,然后调用 9 号功能进行换行,BX 自减两次,判断BX 是否小于等于 1,如果不是进行大循环,知道结束为止。DATA SEGMENTMSG DB 0DH,0AH,$DATA ENDSCODE SEGMENT ASSUME CS:

温馨提示

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

评论

0/150

提交评论