已阅读5页,还剩56页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
汇 编 语 言 实 验 习 题 指 导 张彩虹 闫冬梅 长春理工大学计算机科学与技术系目 录实 验 须 知1实 验 一 DEBUG调试程序的使用3实验二 用DEBUG程序调试程序功能段12实验三 数据串传送和查表程序19实验四 汇编语言上机过程及屏幕字符显示程序22实验五 条件转移指令27实验六 循环程序是设计30实验七 子程序设计33附录:汇编语言试卷一342004年10月汇编语言试题39浙江省2004年1月汇编语言程序设计试题45全国2005年10月汇编语言程序设计试题50汇编语言试卷一答案5760实 验 须 知一、 预习要求1 实验前认真阅读实验教程中有关内容,明确实验目的和实验任务。2 每次实验前应有预习报告,未预习者不允许参加实验。预习报告中:对程序设计实验,要求画出程序流程图,编好上机程序; 二、 实验要求1 实验是学习“汇编语言程序设计”这门课程的重要环节,实验课请勿迟到,缺席。2 上机时要遵守实验室的规章制度,爱护实验设备。要熟悉与实验相关的系统软件(如编辑程序、汇编程序、连接程序和调试程序等)的使用方法。在程序的调试过程中,有意识地学习及掌握DEBUG程序的各种操作命令,以便掌握程序的调试方法及技巧。3 程序调试完后,须由实验辅导教师在机器上检查运行结果。4 每个实验完成后,结果写入预习报告,完成分析,上交实验教师。三、 报告要求每次实验后,应递交一份实验报告,报告中应包括下列内容:1 实验名称、实验人姓名、学号、班级、所用的设备号。2 实验目的、任务。3 各任务程序流程图、程序清单(应加适量注释)。4 记录和分析实验结果。5 据实验目的认真做小结。实 验 一 DEBUG调试程序的使用一、 实验目的1 学习使用DEBUG程序的各种命令。2 利用DEBUG学习了解计算机取指令、执行指令的工作过程。3 掌握用DEBUG调试自编程序的方法。二、 实验准备预备知识:DEBUG的使用.在以后的所有实验中,都将用到DEBUG程序,首先学习一下他的主要用法。 (一)什么是debug?Debug 是DOS、WINDOWS都提供的实模式(8086方式)程序的调试工具。使用它,可以调试CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序运行。(二) 我们用到的DEBUG功能l 用DEBUG的R命令查看、改变CPU中寄存器的内容;l 用DEBUG的D命令查看内存的内容;l 用DEBUG的E命令改写内存的内容;l 用DEBUG的U命令将内存中的机器指令翻译成汇编指令;l 用DEBUG的T命令执行一条机器指令;l 用DEBUG的A命令以汇编指令的格式在内存中写入一条机器指令;DEBUG的命令比较多,有20多个,这是常用的6个。(三) 进入DEBUGDEBUG是在DOS方式下使用的程序。我们在进入DEBUG前,应先进入到DOS方式。在WINDOWS下进入DOS方式的方法:在【开始】菜单选择运行命令,如图1.1,打开【运行】框如图1.2输入COMMAND,点击确定按钮 图1.2在文本框中输入COMMAND命令图1.1 选择【运行】命令进入DOS后运行DEBUG程序如图1-3 图1.3运行DEBUG程序图1.4 DEBUG编辑界面启动成功,显示连接符“-”(四) 关于使用DEBUG命令的几点说明(1)在提示符“-”下才能输入命令,在按“回车”后该命令才开始执行;(2)命令是单个字母,命令和参数的大小写可混合输入;(3)可用F1 、F2 、F3 、INS、DEL、!、等编辑键,编辑本行命令(4) 当命令出现语法错误时,将在出错位置显示“ERROR”(5) 可用ctrl+c 或ctrl+break 来终止当前命令的执行,还可以用ctrl+s 来暂停屏幕显示(当连续不断地显示信息时)(6)DEBUG使用的数以十六进制来表示;(7)DEBUG中的命令不区分大小写;(五)几个常用命令1、R 命令(Register)格式1:R功能1:显示所有寄存器中的内容.图1.5 用R命令显示寄存器的内容格式2: R 寄存器名功能2: 显示修改寄存器的内容例如打入:-R AX系统将响应如下:AX 0000:表示AX当前内容为0000,此时若不对其作修改,可按ENTER键,否则,打入修改后内容。如图1-6:图1.6用R命令修改寄存器的内容2、 D 命令用DEBUG的D命令查看内存的内容;功能: 显示内存单元内容输入D命令,执行结果如图1.7图1.7 D命令执行结果说明:(1) XXXX:YYYY-前者是内存单元的段地址,后者是内存单元的偏移量;(2) 中间显示区域时内存单元内容(十六进制形式),每行显示16个字节的内容;(3) 右边以“字符”形式显示内存单元值。格式一:D起始位置DEBUG从起始位置显示128个字节的内容。输入命令D 0C0B:100执行结果如图:1.8图1.8 D 0C0B:100命令的执行结果格式二:D 起始位置 结束位置 DEBUG 从起始位置一直显示到结束位置。输入命令D DS:100 11F,执行结果如图1.9 所示图1.9命令 D DS:100 11F 执行结果格式三: D 起始位置 L 长度DEBUG 从起始位置开始显示指定长度的内容。输入命令D DS:100 L10执行结果如图1.10 图1.10命令 D DS:100 L1命令执行结果3E 命令用DEBUG的E命令改写内存的内容;格式一:E 起始地址 字节值表功能:用字节值表中的值替换从“起始地址”开始的内存单元内容或 E 起始地址输入命令:E1AF5:0100,连续输入12、34(空格)、56(空格)、(空格)、78(回车);在输入命令D1AF5:0100 ,执行结果如下图1.11:图1.11命令D 1AF5:0100 ,执行结果格式二:E 起始地址功能:采用提问的方式一个一个地改写内存单元的内容图1.12 命令 E 1AF5:0100执行结果(4)A命令功能:输入汇编指令。格式:A 起始地址首先用A命令以汇编语言的形式输入程序,以D命令显示内存,从下图可以看到我们输入的是汇编指令,DEBUG 把它们翻译成机器指令,以机器码写入内存。图1.13 用A命令写入程序图1.14 从一个预设的地址开始输入指令(5)U 命令功能:反汇编,显示机器码所对应的汇编指令格式1:U地址功能1:从指定地址开始反汇编图1.15 U命令执行结果格式2:U 地址范围功能2:对指定的地址范围进行反汇编.图1.16 U100 108 命令执行结果(6)T命令格式:T=地址功能:从指定地址起执行一条语句后停下来,显示所有寄存器的内容及标志位的值与下一条将要执行的指令图1.17 T命令执行结果格式:T=地址x功能:从指定的地址开始跟踪x 条指令图1.18 命令T=100 2 执行结果(7)Q 命令 功能:退出DEBUG程序,返回DOS 图1.19 Q命令执行结果三、实验任务1、 参照实验准备,掌握DEBUG程序的各种命令,重点是命令R,D ,A,U,T,E命令的使用2、 按照以下步骤输入一系列的命令和指令,编写出简单的汇编语言指令,并完成指定任务。debug-e200XXXX:0200 XX.10 XX.20 XX.30 XX. 40 (将200H203H 内容改为10H40H )-e150XXXX:0150 XX.00 XX.01 -a100XXXX:0100 MOV AX,CS (01)XXXX:0102 MOV DS,AX (02)XXXX:0104 MOV BX,100 (03) XXXX:0107 MOV AX,150 (04) XXXX:010A ADD BX, ,AX (05) XXXX:010C MOV AL,BX (06) XXXX:010E ADD AL, BX+1 (07) XXXX:0111 MOV SI,2 (08) XXXX:0114 MOV AL,BX+SI (09) XXXX:0116 MOV AH,0 (10)XXXX:0118 MOV CH,0 (11)XXXX:011A MOV CL,BX+SI+1 (12)XXXX:011D ADD AX,CX (13)XXXX:011F INT 20 (1) 用D命令显示XXXX:0200 -XXXX:0203单元内容(2) 指出以上汇编语言指令中源操作数使用的是什么寻址方式?(3) 用T命令单步跟踪,观察指令的执行结果,并记录3、 查看内存单元内容,pc机主板上的ROM中写有一个生产日期,在内存FFF00H-FFFFFH 的某几个单元中,请找到这个生产日期并试图改变它4、 向内存从B8100H开始的单元中填写数据,如:-e b810:0000 01 01 02 02 03 03 04 04四、 实验报告要求把实验任务中要求的各项记录到预习报告上,完成预习报告,作为实验报告上交五、 实验小结实验报告的最后一项,写出本次实验小结实验二 用DEBUG程序调试程序功能段一 、实验目的1 继续学习使用DEBUG程序的各种命令。2 利用DEBUG学习了解计算机取指令、执行指令的工作过程。3 掌握8086/8088基本指令的使用方法和功能。二 、实验准备1DEBUG命令学习1).G 命令 格式:G=起始地址 断点地址功能:从起始地址开始执行到断点地址,如不设断点地址,则程序一直执行到终止指令才停止。图2.1 命令G=100执行结果2)。 P命令功能:执行汇编程序,单步跟踪。与T命令不同的是:P 命令不会跟踪进入子程序或软中断。其使用方式与T相同图2.2P命令执行结果从结果中可以看出P命令不会进入INT 21 H 软中断3)。N命令功能:指定文件名。为读/写文件做准备D200 20FU100 10CN E:R CX:110第一、二条命令的作用是检查一下刚才编写的汇编指令,第三条命令的作用是设置存盘文件名为FIRST。COM,第四条命令的作用是设置存盘文件大小为110H个字节,最后一条命令是将文件存盘。执行结果如图图2.3 N E:执行结果文件存盘后,在DOS环境下执行FIRST。COM。观看运行结果,如图2.4图2.4 文件FIRST。COM文件执行结果4)。W命令功能:向磁盘写内容见“N命令”5)。L命令功能:从磁盘将文件或扇区内容读入内存注意:使用该命令前,必须用N命令设定文件名N E:L在文件读入内存后,可用U100 命令查看调入程序的汇编代码,执行结果如图2.5 图2.5 用L命令跳入程序三、 实验任务1 按照下列给定步骤完成求累加和程序: 程序: MOVBX,1000 MOVCX,10 MOVAL,0 LOP: ADDAL,BX INCBX J:LOOPLOP INT3 步骤: 1)用A命令将程序键入到100H开始的内存中,在键入时记下标号LOP和J的实际地址,在键入LOOP指令时LOP用实际地址值代替。 2)用命令N AA将此程序命名为文件AA(文件名可任取)。 3)用R命令将BX:CX改为程序长度值(即最后一条指令后面的地址减去开始地址) ,用R命令把BX设为:0000H,CX 设为文件长度。4)用命令W 100将此程序存到AA命名的磁盘文件中。 5)用命令Q退出DEBUG。 6)用命令DEBUG AA再次调入DEBUG和文件AA,可用U命令检查调入程序。 若调入DEBUG时忘了加AA文件名,可用N命令和L命令将文件调入。 7)用E命令在内存地址1000H处键入16个数字 8)用命令G=100 J(J用实际地址代替),使程序运行并停在断点J上,检查 AX,BX的值是否符合你的预计值。 9)用T命令运行一步,观察程序方向(IP值)和CX值是否与你的估计一样, 若不一样,检查程序是否有错。 10)重复G J与T,再检查AX是否正确。 (J为断点地址)11)用G命令使程序运行到结束,检查AX值是否正确。2用命令A汇编下列指令,判断指令正误并说明原因。(1) LEA DI,AX(2) MOV DS,2010(3) PUSH AL(4) OUT 900,AL(5) MOV BX,03利用T,P,G命令,执行下列指令段,注意它们的不同之处。(6) MOV DI,300MOV SI,400MOV CX,3CLDREP MOVSBINT 3(7) MOV AH,2MOV DL,41INT 21INT 34程序: MOV DI,1000 MOVCX,8 MOVSI,2000 CLC LOP: MOVAL,SI ADCDI,AL INCSI INCDI LOOPLOP INT20 步骤: 1)用A命令键入此程序 2)用E命令在1000H开始处键入一个8字节被加数,在2000H开始处键入一个8字节加数,均为低字节在前面。 3)用G命令运行此程序,并用D命令检查其结果(存放在哪里?),是否正确? 4)将INT 20H指令改为INT 3,有何区别?若这条指令不加,行不行?试试。5)请说明这个程序完成的功能是什么?四、 实验说明1. 初学者在使用DEBUG命令修改内存或执行程序时,由于多种原因,出现死机是较经常的现象,可按RESET复位按钮,重新启动系统。2. 用连续执行命令G执行程序时,注意给出执行的首地址,或查看当前CS和IP值是否为要执行程序段的首地址,并注意查看执行的指令流程中有无返回DEBUG功能的程序段,如指令INT 20T或断点设置INT3,否则发出命令后,很容易出现死机,原因是如无程序段使系统返回命令接受状态,CPU将不断到内存取指令、执行指令,使作户失去对系统的控制,出现死机。为避免这种情况,可在用户程序段的最后加上一条INT 20H指令,或用断点方式执行。避免出现死机。3. 关于任务2,在命令A下汇编各条指令,对于错误的指令,DEBUG指令出其错误位置,对于正确的指令,将其汇编到相应内存,据此可判断指令正误,而具体原因需自己分析。4. 关于任务3,用A命令汇编好后,用T,P,G命令分别执行,记录指令执行前后各寄存器(包括标志寄存器各标志位值)、堆栈指针及堆栈内容变化情况,以及与指令有关内存单元的内容,总结T和P执行某些指令的不同之处及适用场合。5. DEBUG下不支持符号地址,如任务1中的标号LOP和J 等,在命令A下输入程序时,不输入标号(如next:),在用到标号的指令(如LOOP,JNZ等),在其后直接输入要跳转的目的地址。6. 对向前跳转的指令,输入程序的过程如下:A 1270:0100 MOV CX,10 1270:0103 MOV AL,0 1270:0105 MOV BX,1000 1270:0108 ADD AL,BX 1270:010A INC BX 1270:010B DEC CX1270:010C JNZ 0108 1270:101E MOV BX,AL 1270:0110 INT 31270:0112 用目的地址0108代替标号LOP在LOOP指令中的位置,而在输入ADD AL,BX这条指令时,不输入标号LOP.对向后跳转的指令,由于目的地址尚未确定,可先随意输入一个地址,若是条件转移指令,注意跳转范围应在128127之间,待程序输入完毕,目的地址明确后,再用命令A修改跳转指令。如下程序段,功能是比较AX和CX中的两符号数,将较大的数放在AX和BX中,较小的数放在CX中。 CMP AX,CX JX continue XCHG AX,CXcontinue: MOV BX,AX用命令A输入程序的过程如下:A 1270:0100 CMP AX,CX 1270:0102 JG 0102 输入本条指令的地址0102代替标号continue1270:0104 XCHG AX,CX 1270:0106 MOV BX,AX 1270:0108 A 102 修改跳转指令的目的地址1270:0102 JG 0106 输入目的地址01061270:0104 U 1270:0100 L 0 A 用命令U查看程序,跳转正确1270:0100 39C8 CMP AX,CX1270:0102 7F02 JG 01061270:0104 87C1 XCHG AX,CX1270:0106 89C3 MOV BX,AX五、 问题思考1 假设某内存单元的内容为CCH,试问该内容如看作一条指令、看作无符号数、看作带符号数,那将分别表示什么?不查看教材中的指令系统代码,如何在DEBUG下知道CCH表示一条什么指令?2 在指令MOVBX,AX中,操作数BX的寻址方式是什么?在DEBUG下执行完该指令后,如何查看执行结果?3 可否随意在DEBUG提示符“”后不带参数发出命令G?什么情况下使用命令G时,可不用“=”给出执行的首地址?4 分析出现死机的几种情况。如何理解死机现象?试从计算机的工作原理进行解释。六、 实验报告1 分析任务2中各条指令错误原因。2 说明命令T和P的差别。3 回答问题思考。4 针对实验目的认真做小结。实验三 数据串传送和查表程序一、实验目的 1、堆栈。堆栈指示器SP和堆栈操作指令PUSH。POP。 2、段寄存器和物理地址计算。 3、查表法和查表指令XLAT。 4、数据串传送程序和数据串传送指令MOVS。STOS及重复前辍REP。 5、循环指令ROL。逻辑与指令AND和清方向位指令CLD。 6、伪操作指令DB。 二、实验准备1编写实验任务要求的程序 2学习一下调试方法利用查表方法把DX的内容(16进制数)转换成ASCII码: 1)、用A命令键入下列程序: MOVBX,1000 MOVDI,2000 MOVCX,4 LOP: PUSH CX MOVCL,4 ROLDX,CL POPCX MOVAL,DL ANDAL,OF XLAT CLD STOSB LOOPLOP INT20 2)用A命令在1000H处键入下列ASCII码并用D命令检查之: DB 0 1 2 3 4 5 6 7 8 9 A B C D E F 用D命令检查时注意左边的ASCII码值和右边的字符。 3)用R命令给DX送一个四位的16进制数(例7F8E)。 4)用T命令逐条运行这程序到LOOP指令处,观察并记录每次运行结果,特别是SP和堆栈内容(用D命令检查)5)用G命令将此程序运行到结束,并用D命令检查2000H处所转换的结果。可注意屏幕右边的ASCII字符与DX是否一致。 3验证:数据串搬家程序: 1)用A命令键入下列程序: MOVSI,1000 MOVDI,1500 MOVCX,0F LOP: MOVAL,SI MOVDI,AL INCSI INCDI LOOPLOP INT20 2)用A命令DB伪指令在1000H键入下列字符串: IBM_PC COMPUTER 3)用G命令运行此程序,并用D命令检查目的地址处的字符与源串是否一致。 4段寄存器概念及字符串传送指令练习: 1)用A命令键入下列程序: MOVSI,0 MOVDI,0 MOVAX,1000 MOVDS,AX MOVAX,1500 MOVES,AX MOVCX,0F CLD REPMOVSB INT20 2)用A命令DB伪指令在1000:0000处键入字符串IBM_PC COMPUTER,并用D命检查之 3)用D命令检查0F00:1000处内容,看是否一样。为什么? 4)用G命令运行此程序,检查目的地址1500:0000处内容。并记下DS与ES值。 三、实验任务1、把实验准备(二)程序中的目的地址改为1002H,再运行此程序,看能不能把1000H开始的 字符串搬到1002H开始的地方去?2、修改实验准备(二)程序以做到把1000H开始的字符串搬到1002H开始的地方去 3、编一程序段,求双字(DX,AX)的绝对值 4、将双字(DX,AX)左移4 位。四、实验报告要求1、各项实验记录和思考题。 2、要求给出任务2中要求编写的程序的清单(修改后)和调试记录。 3、给出任务3,4的程序清单和调试记录实验四 汇编语言上机过程及屏幕字符显示程序一、实验目的: 1、熟练掌握汇编语言的程序格式,程序设计方法;学会使用masm6.11对源程序进行编译、链接、调试和运行2、利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法。 3、利用Break退出程序的方法及局限性。 4、汇编程序的编写二、实验准备: 1编写实验任务要求的两个程序,画出流程图,给出程序清单2学习汇编语言程序的上机过程(1)建立汇编语言程序源文件。可使用任何一个文本编辑器(如EDIT.com)编辑源文件,源文件,源文件的扩展名通常取为.asm。图4.1 用EDIT编辑源文件图4.2 EDIT环境下建立的文件(2)汇编文件,形成目标模块。MASM LT301A。ASM 若文件有语法错误,据错误提示,返回(1),修改源文件。图4.3 MASM LT301a.asm 执行结果可以看出文件有错,返回(1),根据提示修改源文件11行,重新编译图4.4 MASM 编译成功编译成功。则形成.OBJ目标文件图4.5在目录下看到的目标文件(3)连接目标模块,形成可执行文件。LINK LT301A。OBJ图4.6 LINK LT301a.obj 命令执行结果若有错,据错误提示,返回(1),修改错误。若无错,则形成.EXE可执行文件和.MAP映像文件。(4) DOS下直接键入可执行文件名,即可执行该程序。LT301A.EXE图4.7 运行结果(5) 如果运行结果不对,需调试程序,查找原因。返回步骤(1)查看源文件,查找错误,修改文件。若无法通过查看源文件找出错误,可在DEBUG下调试.EXE文件,找出错误之处,再返回步骤(1)。3. 利用INT 21 09H号功能调用显示字符串。验证以下程序 1) 用A命令在100H处键入下列程序: MOVAH, 9 MOVDX,110 INT21 INT20 2) 用A命令在110H处键入下列字符串的ASCII码: DBThis is a sample!$ 3) 用N命令和W命令将此程序(包括数据区)存入文件名为AA.COM的磁盘文件中。(存入前BX:CX必须置为文件长度值)。 4) 用Q命令退出DEBUG。 5) 在DOS命令下打AA,运行此程序,即在屏幕上显示This is a sample!字符串,若不出现,用DEBUG检查程序有无错误。4、利用INT 21H 2号功能显示字符: 1)用A命令在100H处键入下列程序: XORDL,DL MOV CX,100 LOP: MOV AH,2 INT21 INCDL PUSH CX MOVCX,8 DELY: PUSHCX MOVCX,256 J: LOOPJ POPCX LOOPDELY POPCX LOOPLOP INT20 2)用G命令运行程序,即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII码表对照,看07H-0DH处控制字符显示结果与表上有何不同? 3)按CTRL+BREAK退出此程序,若一次不行可多做几次。三、实验任务1 编写一个简化的段定义结构程序:先提示输入数字“Input number:0-9”,然后在下一行显示输入的数字,结束;如果不是键入了0-9 数字,就提示错误“ERROR!”,继续等待输入数字。2 编写一个完整的段定义结构程序:从键盘输入一个字符串(不超过255个),将其中的小写字母转换成大写字母,然后按原来的顺序在屏幕上显示。要求对以上两个程序,进行编译,链接,调试,运行,给出具体步骤四、实验报告要求: 1自编程序清单及调试结果。 实验五 条件转移指令一、实验目的: 18088指令:JZ,JNZ,JC,JNC,CMP,SHR。 2程序:用字符搜索法确定字符串长度。 3程序:16进制数化为ASCII码的一般方法。二、实验准备 1(1) 编写实验任务要求的两个程序。(2) 写出调试以上程序,即修改程序参数,检查结果的操作方法。(3) 熟悉源程序汇编、连接命令的使用方法即要回答的内容。2验证以下程序16进制数化ASCII码的一般方法(显示内存内容) 1)用A命令在100H处键入下列程序: MOV SI,0 MOV BL,10 LOP: MOV DL,SI MOV CL,4 SHR DL,CL CMP DL,0A JCJ1 ADDDL,7 J1: ADDDL,30 MOVAH,2 INT21 MOVDL,SI ANDDL,0F CMPDL,0A JCJ2 ADDDL,7 J2: ADDDL,30 MOVAH,2 INT21 MOVDL,20 MOVAH,2 INT21 INCSI DECBL JNZLOP INT20 2)用N,W命令将此程序用CC.COM文件名存入磁盘。 3)用Q命令退出DEBUG。 4)在DOS命令状态下直接运行CC.COM命令文件,应在屏幕上显示出内存从0000H开始的16个字节的内容,若有错误,用DEBUG检查之。 三、实验任务1自编程序:修改实验准备程序(二),使除了以16进制数形式显示内存内容外,还能在其右边显示该16进制码所对应的ASCII字符,07-0D的控制字符用.代替。 2 BUFX、BUFY和BUFZ是3个有符号的十六进制数,编写一个比较相等关系的程序: 1)如果这3个数都不相等,则显示02)如果这3个数中有两个数相等,则显示13)如果这3个数都相等,则显示2四、实验步骤1) 用EDIT或其它编辑软件,编写.ASM源程序, 2) 对其进行汇编及连接,产生.EXE文件。3) 对.EXE文件进行调试运行。a. 用DEBUG调试运行。b.键入不同的字符,分别进行调试。c. 在MS-DOS下运行这两个.EXE文件。五、实验报告要求: 1先完成准备实验2务2要求画出流程图,给出程序清单,给出调试结果,并存盘3实验体会。实验六 循环程序是设计一、实验目的: 1灵活运用各类许循环指令,掌握循环程序的设计方法2 学会针对不同的问题,选用不同的组织循环的方法。 3伪指令 EQU 及操作符 $的使用。 4 COM文件的要求和生成过程。二、实验准备 1编写任务要求的程序 2学习COM文件的生成过程codesegment org100h assumecs:code,ds:code main:jmpstart arraydw1234h,5673h,7fffh,8000h,0dffh dw0ab5h,0369h,005fh,5634h,9069h countequ$-array start:movcx,count shrcx,1 deccx movbl,-1 again:movdx,cx andbl,bl jeexit xorbl,bl xorsi,si again1:movax,arraysi cmpax,arraysi+2 jlenchg xchgarraysi+2,ax movarraysi,ax movbl,-1 nchg:incsi incsi decdx jnzagain1 loopagain exit:int20h codeends endmain 1)输入,汇编并连接此程序。忽略连接时的无堆栈告警。 2)用EXE2BIN将 .exe文件转换为 。COM文件,命令格式: EXE2BIN? ?.EXE ?.COM 3)在DEBUG下运行此程序,记录运行结果。 4)思考:将转移指令JLE改为JBE,JGE和JAE,分别运行并记录排序结果。 三、实验任务1编写程序:将一个包含有20个有符号数据的数组arrayM分成两个数组,正数数组arrayP 和负数数组arrayN,并分别把两个数组中的数据个数显示出来 2编程实现把键入的一个字符,用二进制形式(0/1)形式显示出它的ASCII码四、实验步骤1 用EDIT或其它编辑软件,编写.ASM源程序,2 对其进行汇编及连接,产生.EXE文件。3 对.EXE文件进行调试运行。4 在MS-DOS下运行这两个.EXE文件。五、实验报告要求1 画出任务1,2 两个程序的流程图,列出相应的程序清单。2 说明本实验是如何利用DEBUG进行调试的实验七 子程序设计一、实验目的: 1掌握子程序设计方法。2掌握调用程序与子程序间参数传递的几种方法。二、 实验准备(1) 预习子程序设计的基本方法,根据实验任务要求,画出子程序及主程序的流程图。(2) 熟悉键盘键入字符串及用堆栈传送参数的程序段编制方法。三、实验任务1编制一个子程序把一个十六位二进制数用十六进制形式在屏幕上显示出来,采用堆栈方法传递这个二进制数,并用一个主程序验证它。2设有一个数组存放学生的成绩(0100),编制一个子程序统计059分,6069分, 7079分, 8089分,90100分的人数,并分别存放到scoreE, scoreD, scoreC, scoreB, scoreA单元中,编写一个主程序与之配合使用。四、实验步骤1 用EDIT或其它编辑软件,编写.ASM源程序,2 对其进行汇编及连接,产生.EXE文件。3 对.EXE文件进行调试运行。4 在MS-DOS下运行这两个.EXE文件。五、实验报告要求 1 画出任务1,2 两个程序的流程图,列出相应的程序清单。2说明本实验是如何利用DEBUG进行调试的3说明用堆栈传送参数的过程及其具体方法。4分析实验结果及所遇到问题,并说明解决的方法。附录:汇编语言试卷一一、单项选择题(本大题共20小题,每小题1分,共20分)1CPU要访问的某一存储单元的实际地址称()A段地址B偏移地址C物理地址D逻辑地址2某存储单元的物理地址是12345H,可以作为它的段地址有()A2345H B12345H C12340HD1234H3执行后使BX=0的同时也使CF=0,OF=0的指令是()AXOR BX,BXBOR BX,BXCAND BX,BXDCMP BX,BX4循环控制指令LoopNZ/LoopNE控制循环继续执行的条件是()ACX0且ZF=1BCX0且ZF=0CCX0或ZF=1DCX0或ZF=05在执行DAA指令,当高四位BCD码校正时产生进位,如要把此进位值送入AH中,对这进位值的操作应是()ADAA校正指令的功能已自动加在AH中B进位值在AF中,校正后根据AF内容再加在AH中C进位值在CF中,校正后根据CF内容再加在AH中D进位值在AL最高位上,校正后根据AL最高位内容再加在AH中6AND,OR,XOR,NOT为四条逻辑运算指令,下面的解释正确的是()A指令XOR AX,AX执行后,AX内容不变,但设置了标志位B指令OR DX,1000H执行后,将DX最高位置1,其余各位置0C指令AND AX,OFH执行后,分离出AL低四位DNOT AX,执行后,将AX清07在执行下列指令时,需要使用段寄存器DS的指令是()ASTOSW BADD AL,CLCNEG BXDINC DABX8无论BH中原有的数是奇数或偶数,若要使BH中的数一定为奇数,应执行的指令是()AADD BH,01HBOR BH,01HCXOR BH,01HDTEST BH,01H9完成对CL寄存器的内容乘以4的正确操作是()AROL CL,1 BMUL 4ROL CL,1 CSHL CL,1 DMOV CL,2SHL CL,1 SHL CL,CL10下面各传送指令中,正确的是()AMOV DI,SIBMOVDX+DI,ALCMOV WORD PTR BX,0100HDMOV AL,BX11汇编语言语句格式中对名字项的规定如下,请找出其中错误的说法()A名字的第一个字符可以是大写英文字母及小写英文字母B名字的第一个字符可以是字母、数字及、_ C名字的有效长度31个字符 D在名字中不允许出现$12要实现使BETA的值为56,应采用语句为()ABETA DB 56 BBETA DB 56HCBETA EQU 56 DBETA EQU 56H13REPZ CMPSW指令,重复执行的终止条件是()ACX=0或ZF=0 BCX=0且ZF=0CCX=0或ZF=1 DCX=0且ZF=114下面程序段执行后,AL中的内容是()MOV AX,8833HADD AL,AHDAAA21B21H C0C1H D0DDH15比较两个带符号的数A、B,当A=B时程序转移,测试的条件为()AZF=1 BZF=0 CSF=1 DSF=016检查二个无符号数的关系,若要实现ALBL时分支去LOP1处,那么在“CMP AL,BL”指令后应跟的分支指令是()AJNC LOP1 BJA LOP1CJC LOP1 DJGE LOP117在下列串操作指令中,同时使用源串和目的串地址指针的指令是( )ASTOSW BLODSW CSCASW DCMPSW18设AL=0AH,下列指令执行后能使AL=05H的是()ANOT AL BAND AL,0FHCXOR AL,0FH DOR AL,0FH19DA1 DWAB,CD,EF,GH() MOV AX,DA1+3 指令执行后AX中的内容是AEF BCD CBC DFC20使用DOS系统功能调用时,使用的软中断指令是()AINT 21 BINT 10HCINT 16H DINT 21H二、填空题(本大题共12空,每空0.5分,共6分)21十六进制数0FFF8H表示的十进制正数为_,表示的十进制负数为_。22若DS=0F3EH,SI=2000H,COUNT=0A8H,指令MOV AX,(SI+COUNT)中,源操作数的有效地址EA为_,其物理地址为_。23CPU的标志寄存器中标志位,可以分为两大类,其中一类称为_标志位,另一类称为_标志位。24当标志位_=1时表示无符号数运算产生溢出,而当标志位_=1是表示带符号数运算产生溢出。25如JMP指令采用段间间接寻址,那么由4个相邻字节单元中存放有转移地址,其中前两个字节存放的是_,而后两个字节存放的是_。26在串操作程序中,通常在重复前缀指令REPZ或REPNZ后,选用的串操作指令是_或_才有实际意义。三、简答题(本大题共4小题,每小题2分,共8分)27已知:BX=1357H,DI=2000H,DS=2000H,CS=4000H,分别指出下面各指令中存储器操作数的物理地址。(1)MOV AL,BX(2)MOV CS:BX+DI,AH280P1 DB 1,20P2 DW 3412H,5678HMOV AX,OP1+1;字单元(OP1+1) AXMOV BL,OP2+1;字节单元(OP2+1) BL上述二条传送语句有语法错误,请根据注释字段的说明,将其改正。29下列语句在存储器中分别为变量分配多少字节?(1)AD2 DW 10 DUP(?),10(2)AD3 DD 100 DUP(?)30简述下面两条指令分别是什么语法错误?MOV BX,SIMOV AX,DL四、程序分析题(本大题共6小题,每小题6分,共36分)31 MOV DL,AL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年咯血诊疗与护理理论知识考核试题及答案
- 沟通平台及邮件处理规范工具包
- 肠穿孔病人的疾病介绍
- 幼儿园交通安全课件-1
- 苏教版三年级上册数学期末复习试卷(含答案)
- 展示委托合同协议书
- 家族分配楼房协议书
- 展览馆展品协议合同
- 如何签订国界协议书
- 屠宰场租赁合同范本
- 银行保洁服务投标方案技术标
- MOOC 灰色系统理论-南京航空航天大学 中国大学慕课答案
- 2024-2029年中国冻干口崩片行业市场现状分析及竞争格局与投资发展研究报告
- 个人医保代办委托书
- 销售人员客户需求分析报告
- 消防安全评估投标方案技术标
- 驾照体检表完整版本
- 人美版4年级上册《美术》期末考试试题及答案
- 利润问题-2023-2024学年六年级数学上册典型例题解析苏教版
- 武夷山风景区的总体规划
- 卫生统计学智慧树知到答案章节测试2023年湖南中医药大学
评论
0/150
提交评论