《2022年2022年汇编语言实验指导书 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年汇编语言实验指导书 .pdf(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、汇编语言程序设计实验指导书吉首大学数学与计算机科学学院名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 37 页 - - - - - - - - - 目录实验一熟悉汇编语言的编程过程1实验二汇编数据寻址的方法4 实验三数据传送指令和算术运算指令7 实验四逻辑指令的作用10 实验五循环程序设计 13实验六分支程序设计 15实验七子程序设计 19实验八输入输出程序 23实验九中断程序设计 26实验十系统调用程序设计 .29 附录.31名师资料总结 - - -精品资料欢迎下载 -
2、 - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 37 页 - - - - - - - - - 实验报告按照微机原理实验项目写!实验一熟悉汇编语言的编程过程实验目的通过实验掌握下列知识: 1、DOS 命令 : CD,DIR,DEL,RENAME,COPY。2、DEBUG 命令 : A,D,E,F,H,R,T,U。3、汇编的编程过程。4、8088寄存器 : AX,BX,CX,DX,F,IP。实验类型 : 验证内容及步骤一、 DOS 常用命令练习1、开机后 , 切换到命令提示符窗口下,出现提示符后键入命令DIR, 查看此
3、目录下所有文件。2、键入命令 CD. 进入上级目录,再查看此目录下所有文件。3、将一张 3.5 寸软盘插到 A驱动器中 , 用DIR命令查看盘上文件。4、用命令 COPY 命令 复制一个文件。5、用命令 REN 命令将拷贝的文件改为BG 。6、用命令 DEL BG 将文件 BG 删除。在操作时要注意提示信息, 并按提示操作。二、 DEBUG 命令使用1、键入 DEBUG 进入 DEBUG 控制状态 , 显示提示符 - 。2、用命令 F100 10F A 将A 的ASCII码填入内存。3、用命令 D100 10F 观察内存中的十六进制码及屏幕右边的ASCII字符。4、用命令 F110 11F 4
4、1 重复上二项实验, 观察结果并比较。5、用命令 E100 30 31 32 , 3F 将30H-3FH写入地址为 100开始的内存单元中, 再用D命令观察结果 , 看键入的十六进制数是什么字符的ASCII码? 6、用H命令检查下列各组十六进制数加减结果并和你的手算结果比较: (1)34H,22H (2)56H,78H (3)A5,79H (4)1284H,5678H (5)A758H,347FH 7、用R命令检查各寄存器内容, 特别注意 AX,BX,CX,DX,IP 及标志位中 ZF,CF和AF的内容。8、用R命令将 AX,BX内容改写为 1050H及23A8H 。名师资料总结 - - -精
5、品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 37 页 - - - - - - - - - 2 三、熟悉汇编语言的编程过程1、首先在运行菜单中运行CMD 命令,进入 DOS 状态。2、切入 D: 盘,进入 MASM。3、用EDIT 命令编辑下列源程序。data segment message db Hello World!,$ data ends code segment assume cs:code,ds:data begin:mov ax,data mov ds,ax mov dx,offs
6、et message mov ah,9 int 21h mov ah,4ch int 21h code ends end begin 4、用MASM 命令编译源程序。(如果出错,则需要重新编辑,修改错误)。5、用LINK 命令连接目标文件,生成可执行文件。(可以用 DIR命令查一下 )。6、运行该可执行文件, 检查是否正常输出字符串。实验报告要求1、十六进制数加减法手算结果及实验结果2、8088常用指令练习部分的逐条运行记录, 思考结果及自编程序运行记录( 列出自编程序) 。附: 动态调试器 DEBUG 使用1、键入 DEBUG 进入 DEBUG,显示提示符 -。2、退出 DEBUG 命令 :
7、Q 3、显示内存命令:D 起始地址结束地址4、修改内存命令:E 起始地址 , 连续修改键入空格键,键入回车键退出E命令。5、检查寄存器命令:R 6、修改寄存器命令:R 寄存器名名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 37 页 - - - - - - - - - 3 7、小汇编命令 :A 起始地址 , 不输入指令键入回车键退出A命令。8、反汇编命令 :U 起始地址结束地址9、文件命名命令:N 盘号: 文件名10、读文件命令:L 内存地址11、写文件命令:W 内存地址
8、10、读扇区命令:L 内存地址盘号 (0-A:,1-B:) 扇区号扇区数11、写扇区命令:W 内存地址盘号 扇区号扇区数12、运行命令 :G=起始地址结束( 断点 ) 地址13、单步命令 :T= 起始地址运行指令数 , 进入子程序内部。14、单步命令 :P= 起始地址运行指令数 , 不进入子程序内部。15、内存搬家命令:M 起始地址结束地址目的地址16、十六进制数加法:H 数值数值表1 标志寄存器显示内容一览表标志位显示1 0 CF CY NC ZF ZR NZ SF NG PL AF AC NA OF OV NV PF PE PO DF DN UP IF EI DI 名师资料总结 - - -
9、精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 37 页 - - - - - - - - - 4 实验二汇编数据寻址的方法实验目的通过实验掌握下列知识: 1、DEBUG 命令 :G,N,W,L 及Q。2、8088系统中数据在内存中的存放方式和内存操作数的几种寻址方式。3、8088指令 :INC,DEC,LOOP,INT 3,INT 20H,寄存器 SI,DI 。4、8088汇编语言伪操作:BYTE PTR,WORD PTR 。5、求累加和程序和多字节加减法程序。实验类型 : 验证实验内容和步骤一
10、、内存操作数及各种寻址方式使用程序内容:MOV AX,1234 MOV 1000,AX MOV BX,1002 MOV BYTE PTRBX,20 MOV DL,39 INC BX MOV BX,DL DEC DL MOV SI,3 MOV BX+SI,DL MOV BX+SI+1,DL MOV WORD PTRBX+SI+2,2846 操作步骤1)用A命令键入上述程序, 并用 T命令逐条运行。2)每运行一条有关内存操作数的指令, 要用 D命令检查并记录有关内存单元的内容并注明是什么寻址方式。注意 D命令显示结果中右边的ASCII字符及双字节数存放法。思考 : 有关指令中 BYTE PTR 及
11、WORD PTR伪操作不加行不行?试一试。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 37 页 - - - - - - - - - 5 二、求累加和程序 : 程序内容 : MOV BX,1000 MOV CX,10 SUB AX,AX LOP: ADD AL,BX ADC AH,0 INC BX J: LOOP LOP INT3 操作步骤 :1)用A命令将程序键入到100H开始的内存中 , 在键入时记下标号LOP 和J的实际地址 , 在键入LOOP 指令时 LOP 用
12、实际地址值代替。2)用命令 N AA将此程序命名为文件AA(文件名可任取 ) 。3)用R命令将 BX: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的值是否符合你的预计值
13、。9)用T命令运行一步, 观察程序方向 (IP 值 ) 和CX 值是否与你的估计一样, 若不一样 , 检查程序是否有错。10) 重复 G J与T, 再检查 AX 是否正确。11) 用G命令使程序运行到结束, 检查AX 值是否正确。三、多字节加法程序。程序内容 : MOV DI,1000 MOV CX,8 MOV SI,2000 CLC LOP: MOV AL,SI ADC DI,AL INC SI 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 37 页 - - - -
14、- - - - - 6 INC DI LOOP LOP INT 20 操作步骤 :1)用命令键入此程序。2)用E命令在 1000H开始处键入一个8字节被加数 , 在2000H 开始处键入一个8字节加数 , 均为低字节在前面。3)用G 命令运行此程序, 并用 D命令检查其结果( 存放在哪里 ?), 是否正确 ? 4)将INT 20H 指令改为 INT 3, 有何区别 ?若这条指令不加, 行不行 ?试一试。四、自编程序用16位减法指令编一个32位(4 字节 ) 数减法程序 , 两个源数及结果存放地址同上题。调试并做记录。实验报告要求1、各项实验结果记录。2、自编程序原稿及调试后修正稿, 写出原稿错
15、在那里。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 37 页 - - - - - - - - - 7 实验三数据传送指令和算术运算指令实验目的通过实验掌握下列知识: 1、堆栈。堆栈指示器SP 和堆栈操作指令PUSH 和POP 。2、段寄存器和物理地址计算。3、查表法和查表指令XLAT 。4、数据串传送程序和数据串传送指令MOVS 、STOS 及重复前辍 REP 。5、循环指令 ROL 、逻辑与指令 AND 和清方向位指令CLD 。6、伪操作指令 DB 。实验类型 :
16、验证实验内容及步骤一、利用查表方法把DX 的内容 (十六进制数 )转换成 ASCII 码1、用A命令键入下列程序: MOV BX,1000 MOV DI,2000 MOV CX,4 LOP: PUSH CX MOV CL,4 ROL DX,CL POP CX MOV AL,DL AND AL,0F XLAT CLD STOSB LOOP LOP INT 20 2、用A命令在 1000H处键入下列 ASCII码并用 D命令检查之 : DB ,0123456789ABCDEF ?用D命令检查时注意左边的ASCII码值和右边的字符。3、用R命令给 DX 送一个四位的十六进制数( 例7F8E)。名师资
17、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 37 页 - - - - - - - - - 8 4、 用T命令逐条运行这程序到LOOP 指令处 , 观察并记录每次运行结果, 特别是 SP 和堆栈内容( 用D命令检查 ) 。5、用G命令将此程序运行到结束, 并用 D命令检查 2000H处所转换的结果。可注意屏幕右边的ASCII 字符与 DX 是否一致。二、数据串搬家程序 : 1、用A命令键入下列程序: MOV SI,1000 MOV DI,1500 MOV CX,0F LOP:
18、 MOV AL,SI MOV DI,AL INC SI INC DI LOOP LOP INT 20 2、用A命令 DB 伪指令在 1000H键入下列字符串: IBM_PC COMPUTER 3、用G命令运行此程序, 并用 D命令检查目的地址处的字符与源串是否一致。4、若此程序中的目的地址改为1002H,再运行此程序 , 看能不能把 1000H开始的字符串搬到1002H开始的地方去?修改程序以做到这一点。三、段寄存器概念及字符串传送指令练习1、用A命令键入下列程序: MOV SI,0 MOV DI,0 MOV AX,1000 MOV DS,AX MOV AX,1500 MOV ES,AX MO
19、V CX,0F CLD REP MOVSB INT 20 2、用A命令 DB 伪指令在 1000:0000 处键入字符串 IBM_PC COMPUTER, 并用D命检查之。3、用D命令检查 0F00:1000 处内容 , 看是否一样,为什么? 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 37 页 - - - - - - - - - 9 4、用G命令运行此程序, 检查目的地址 1500:0000 处内容。并记下DS与ES 值。5、修改此程序 , 使ES 与DS 为同一
20、值 , 以减少一条指令, 而源物理地址和目的物理地址( 是多少?) 仍和原来一样。实验报告要求1、各项实验记录和思考题。2、要求你修改的程序的清单( 修改后 ) 和调试记录。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 37 页 - - - - - - - - - 10 实验四逻辑指令的作用实验目的通过实验掌握下列知识: 1、8088指令 : JMP,ROR,XOR,HLT。2、利用 DOS 功能调用 INT 21H 的2号和 9号功能进行屏幕显示的方法。3、直接向视
21、频 RAM(VRAM) 送ASCII码进行屏幕显示的方法。4、IBM-PC机的 ASCII 码表及控制字符。5、命令 (.COM)文件及使用方法。6、利用 Break(CTRL+BREAK)退出程序的方法及局限性。实验类型 : 验证实验内容及步骤一、利用 INT 21 09H 号功能调用显示字符串1、用A命令在 100H处键入下列程序: MOV AH, 9 MOV DX,110 INT 21 INT 20 2、用A命令在 110H处键入下列字符串的ASCII码: DB This is a sample!$ 3、用N命令和 W 命令将此程序( 包括数据区 ) 存入文件名为AA.COM 的磁盘文件
22、中。( 存入前BX:CX 必须置为文件长度值) 。4、用Q命令退出 DEBUG 。5、在DOS 命令下键入 AA,运行此程序 , 即在屏幕上显示This is a sample!字符串 , 若不出现, 用DEBUG 检查程序有无错误。二、利用 INT 21H 2 号功能显示字符1、用A命令在 100H处键入下列程序: XOR DL,DL MOV CX,100 LOP: MOV AH,2 INT 21 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 37 页 - - -
23、- - - - - - 11 INC DL PUSH CX MOV CX,8 DELY:PUSH CX MOV CX,0 J: LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20 2、用G命令运行程序, 即在屏幕上依次缓慢的显示256个ASCII字符。仔细观察每个字符,和IBM-PC ASCII 码表对照 , 看07H-0DH 处控制字符显示结果与表上有何不同? 3、按CTRL+BREAK退出此程序 , 若一次不行可多做几次。三、直接向 VRAM 送 ASCII 码显示字符1、用A命令在 100H处键入下列程序: MOV AX,B000 MOV DS,
24、AX XOR AL,AL XOR BX,BX MOV CX,100 LOP: MOV BX,AL INC BX INC AL PUSH CX MOV CX,8 DELY:PUSH CX MOV CX,0 J: LOOP J POP CX LOOP DELY POP CX LOOP LOP INT 20 2、用N命令和 W 命令将此程序存入BB.COM 文件中。 ( 一定要先存入 !) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 37 页 - - - - - - -
25、- - 12 3、用G命令运行此程序, 仔细观察每一个ASCII码显示结果 , 并和字符表及上一道程序运行情况进行对照 , 其控制字符区 (07-0DH) 显示结果和 INT 21H 2 号功能调用有何不同? 四、自编一个程序 ,要求显示 AX 的内容 ,即能显示 AX=xxxx 。调试时 AX 的内容可用 R命令赋值 ,也可用 MOV 指令赋值。实验报告要求1、各项实验记录及观察体会。2、利用 INT 21H 显示和直接向 VRAM 送ASCII码显示方法在显示结果上有什么不同? 3、自编程序草稿及调试结果。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
26、 - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 37 页 - - - - - - - - - 13 实验五循环程序设计实验目的1、掌握循环程序和排序程序设计方法。2、掌握带符号数的比较转移指令:JL,JLE,JG,JGE 3、伪指令 EQU 及操作符 $的使用。实验类型 : 验证实验内容一、 简单的循环程序。data segment string db “ Hello world”code segment assume cs:code,ds:data begin:mov ax,ds mov ds,ax mov cx,7 mov bx,offset st
27、ring next: mov dl,bx mov ah,2 int 21h inc bx loop next mov ah,4ch int 21h code ends end begin 编译上面的程序。指出其中的错误改正错误。二、多重循环CODE SEGMENT ORG 100H 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 37 页 - - - - - - - - - 14 ASSUME CS:CODE,DS:CODE MAIN: JMP START ARRAY
28、DW 1234H,5673H,7FFFH,8000H,0DFFH DW 0AB5H,0369H,005FH,5634H,9069H COUNT EQU $-ARRAY START: MOV CX,COUNT SHR CX,1 DEC CX MOV BL,-1 AGAIN: MOV DX,CX AND BL,BL JE EXIT XOR BL,BL XOR SI,SI AGAIN1: MOV AX,ARRAYSI CMP AX,ARRAYSI+2 JLE NCHG XCHG ARRAYSI+2,AX MOV ARRAYSI,AX MOV BL,-1 NCHG: INC SI INC SI DEC
29、 DX JNZ AGAIN1 LOOP AGAIN EXIT: INT 20H CODE ENDS END MAIN 实验步骤1、输入 , 汇编并连接此程序。忽略连接时的无堆栈告警。2、在DEBUG 下运行此程序 , 记录运行结果。3、将转移指令 JLE改为JBE,JGE和JAE,分别运行并记录排序结果。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 37 页 - - - - - - - - - 15 实验六分支程序设计实验目的1、掌握利用间接转移指令JMP BX 实现
30、多岔分支的方法。2、分支程序实现的方法。3、符号扩展指令CBW 。实验类型 : 综合实验内容一、简单的分支DISP MACRO MSG LEA DX,MSG MOV AH,9 INT 21H MOV AH,4CH INT 21H ENDM STACK SEGMENT STACK DB 256 DUP(0) STACK ENDS DATA SEGMENT PARM DB 16 DUP(?) BRTABLE DW OFFSET BRA,OFFSET BRB,OFFSET BRC DW OFFSET BRD,OFFSET BRE,OFFSET BRF MSGA DB I LIKE MY IBM-PC
31、!$ MSGB DB HOW ARE YOU!$ MSGC DB NIBAO COLLEGE$ MSGD DB THIS IS A SAMPLE$ MSGE DB WELLCOME USE MY COPUTER!$ MSGF DB THE ASSEMBLER LANGUAGE OF 8088$ ERRMS DB ERROR! INVALID PARAMETER!$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心
32、整理 - - - - - - - 第 17 页,共 37 页 - - - - - - - - - 16 START: MOV AX,DATA MOV ES,AX MOV SI,80H LEA DI,PARM MOV CX,16 CLD REP MOVSB MOV DS,AX CMP PARM,2 JC ERR MOV AL,PARM+2 SUB AL,30H JC ERR CMP AL,6 JNC ERR LEA BX,BRTABLE CBW ADD AX,AX ADD BX,AX JMP BX ERR: DISP ERRMS BRA: DISP MSGA BRB: DISP MSGB BRC
33、: DISP MSGC BRD: DISP MSGD BRE: DISP MSGE BRF: DISP MSGF CODE ENDS END START 实验步骤1、输入并汇编此程序。要求生成一个 .LST 文件。用TYPE 命令检查 .LST 文件, 观察宏替换命令产生的指令集。2、将OBJ 文件连接成 EXE 文件 ( 假设为 AA.EXE)。3、用命令 DEBUG AA.EXE XXX (XXX 为任意字符串 ) 将AA.EXE 带参数调入 DEBUG 用D命令观察DS:0080处的命令行 , 记录80H处的内容和字符个数的关系。名师资料总结 - - -精品资料欢迎下载 - - - -
34、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 18 页,共 37 页 - - - - - - - - - 17 4、退出 DEBUG 。直接带参数运行此程序: AA n(n=0-5) 依次观察并记录n从0到5时的运行结果。二、综合程序测量一字符串长度 ,并用十六进制数显示之程序内容 : JMP START DB This is a program to measure the length of a string。 DB 0D,0A DB the length of the string is: $ START: MOV AH,9 MOV
35、 DX,102 INT 21 MOV BX,101 MOV AL,24 MOV DH,FF LOP: INC BX INC DH CMP AL,BX JNZ LOP MOV CH,2 MOV CL,4 LOP1: ROL DH,CL MOV DL,DH AND DL,0F ADD DL,30 CMP DL,3A JC J ADD DL,7 J: MOV AH,2 INT 21 DEC CH JNZ LOP1 INT 20 键入此程序, 存入 DD.COM 文件中并在DOS 命令状态下直接运行之, 若未出现预期结果, 用DEBUG 检查有否错误? 名师资料总结 - - -精品资料欢迎下载 - -
36、 - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 19 页,共 37 页 - - - - - - - - - 18 三、编程实现把一个字符串中所有的i 找出来转换成大写的I实验报告要求1、自编程序草稿及调试后的正确程序。2、实验体会。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 20 页,共 37 页 - - - - - - - - - 19 实验七子程序设计实验目的1、掌握利用堆栈传递参数的子程序调用方法。2、掌握子程
37、序递归调用方法。3、过程调用伪指令: PROC,ENDP,NEAR 和FAR 。4、8088指令 : CALL,RET,RET n 。5、利用 RET 指令退出 EXE 文件的方法。实验类型 : 综合实验内容及步骤一、利用堆栈传递参数的子程序调用(求累加和 ) 程序内容 :STACK SEGMENT STACK DB 256 DUP(0) STACK ENDS DATA SEGMENT ARY1 DB 1,2,3,4,5,6,7,8,9,10 COUNT1 EQU $-ARY1 SUM1 DW ? ARY2 DB 10,11,12,13,14,15,16,17,18 COUNT2 EQU $-
38、ARY2 SUM2 DW ? DATA ENDS MAIN SEGMENT ASSUME CS:MAIN,DS:DATA,SS:STACK START PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AX,COUNT1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 21 页,共 37 页 - - - - - - - - - 20 PUSH AX LEA AX,ARY1 PUSH AX CALL FAR PTR
39、 SUM MOV AX,COUNT2 PUSH AX LEA AX,ARY2 PUSH AX CALL FAR PTR SUM RET START ENDP MAIN ENDS PROCE SEGMENT ASSUME CS: PROCE SUM PROC FAR MOV BP,SP MOV CX,BP+6 MOV BX,BP+4 XOR AX,AX ADN: ADD AL,BX ADC AH,0 INC BX LOOP ADN MOV BX,AX RET 4 SUM ENDP PROCE ENDS END START 操作步骤 : 1、输入 , 汇编并将此程序连接成EXE 文件。2、用DEB
40、UG 的断点命令和 T命令运行此程序, 观察并记录每次过程调用及进出栈指令前后( 带;的语句 ) 的SP 和堆栈内容。3、记录最后结果:SUM1,SUM2 的段及偏移地址和它们的内容。二、子程序递归调用 (求阶乘 ) 程序内容 :名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 22 页,共 37 页 - - - - - - - - - 21 STACK SEGMENT STACK DB 100H DUP(?) STACK ENDS DATA SEGMENT RESUL DW ? DA
41、TA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK START: PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV AX,5 CALL FACT MOV RESUL,AX RET FACT PROC AND AL,AL JNE IIA MOV AL,1 RET IIA: PUSH AX DEC AL CALL FACT X2: POP CX MUL CL RET FACT ENDP MAIN ENDP CODE ENDS END START 操作步骤 : 1、
42、将程序输入 , 汇编并连接成 EXE 文件。2、用DEBUG 的断点和 T命令检查并记录每层递归嵌套过程的堆栈和AL内容。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 23 页,共 37 页 - - - - - - - - - 22 3、修改源程序, 将阶乘数 5 改为本程序的最大允许值( 是多少 ?), 重新汇编连接之。用DEBUG 运行并记录 RESUL 单元内容。4、若要在 DOS 命令下直接运行并显示阶乘结果( 十六进制形式 ), 试修改程序并调试运行。( 机动 ) 实验报
43、告1、实验记录。2、自编程序。3、体会和意见。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 24 页,共 37 页 - - - - - - - - - 23 实验八输入输出程序实验目的1、掌握 PC机发音原理及音乐程序编制方法。2、8088指令 : IN,OUT,DIV,OR 。实验类型 : 综合实验内容一、发音程序1、用DEBUG 输入下列程序 : MOV DX,4000H IN AL,61H AND AL,FCH LOP: XOR AL,02H OUT 61H,AL MOV C
44、X,0140H DEY: LOOP LOP DEC DX JNE LOP INT 21H INT 20H 2、在DEBUG 下运行此程序 , 改变延时时间常数, 注意声音高低变化。二、音乐程序1、输入 , 汇编 , 连接并运行下列程序: STACKSG SEGMENT PARA STACK DW 32 DUP(?) STACKSG ENDS DATASG SEGMENT TIGER DB 0AH,0DH,TWO TIGER$ TIG_FREQ DW 2 DUP(262,294,330,262) DW 2 DUP(330,349,392) DW 2 DUP(392,440,392,349,330
45、,262) DW 2 DUP(294,196,262),0FFFFH 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 25 页,共 37 页 - - - - - - - - - 24 TIG_TIME DW 10 DUP(25),50,25,25,50 DW 2 DUP(12,12,12,12,25,25) DW 2 DUP(25,25,50) DATASG ENDS CODESG SEGMENT ASSUME CS:CODESG,DS:DATASG,SS:STACKSG START
46、: MOV AX,DATASG MOV DS,AX LEA DX,TIGER MOV AH,9 INT 21H LEA SI,TIG_FREQ LEA BP,DS:TIG_TIME CALL PLAY MOV AH,4CH INT 21H PLAY PROC FREQ: MOV DI,SI CMP DI,0FFFFH JE END_PLY MOV BX,DS:BP CALL SOUND ADD SI,2 ADD BP,2 JMP FREQ END_PLY: RET PLAY ENDP SOUND PROC MOV AL,0B6H OUT 43H,AL MOV DX,14H MOV AX,4F3
47、8H DIV DI OUT 42H,AL MOV AL,AH OUT 42H,AL 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 26 页,共 37 页 - - - - - - - - - 25 IN AL,61H MOV AH,AL OR AL,3 OUT 61H,AL MOV BX,3FFFH DELAY: MOV CX,32717 SPKR_ON: LOOP SPKR_ON DEC BX JNZ DELAY MOV AL,AH OUT 61H,AL RET SOUND END
48、P CODESG ENDS END START 2、修改程序 , 使它能演奏一首你所喜爱的歌曲。3、若歌曲中有休止符, 怎么办 ? 实验报告1、实验记录和体会。2、自编程序。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 27 页,共 37 页 - - - - - - - - - 26 实验九中断程序设计实验目的1、掌握利用 INT 16H 2 号功能调用实行键盘输入的方法。2、熟悉键盘的扫描码和ASCII 码的关系。3、掌握利用 INT 10H 功能调用实现窗口功能的方法。实验类型
49、 : 综合实验内容一、键盘输入程序PRO_NAM SEGMENT ASSUME CS:PRO_NAM ORG 100H AGAIN: MOV AH,0 INT 16H CMP AL,1BH JE EXIT PUSH AX MOV BL,AH CALL BINIHEX MOV AH,2 MOV DL,20H INT 21H POP AX MOV BL,AL CALL BINIHEX MOV AH,2 MOV DL,20H INT 21H MOV DL,BL MOV AH,2 INT 21H MOV DL,0DH 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - -
50、 - - - - - - - 名师精心整理 - - - - - - - 第 28 页,共 37 页 - - - - - - - - - 27 MOV AH,2 INT 21H MOV DL,0AH MOV AH,2 INT 21H JMP AGAIN EXIT: INT 20H BINIHEX PROC NEAR MOV CH,2 ROTATE: MOV CL,4 ROL BL,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JL PRINT ADD AL,7 PRINT: MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ