汇编语言程序设计实验指导书_第1页
汇编语言程序设计实验指导书_第2页
汇编语言程序设计实验指导书_第3页
汇编语言程序设计实验指导书_第4页
汇编语言程序设计实验指导书_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

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

文档简介

目目 录录 实验一 DEBUG 的使用 1 实验二 汇编语言程序结构 5 实验三 数据串传送和比较 7 实验四 屏幕字符显示 9 实验五 条件转移和分支程序 13 实验六 循环程序 15 实验七 子程序 17 实验八 宏指令及宏调用 20 实验九 数码转换程序 22 实验十 键盘和窗口程序 26 实验十一 活动图形显示程序 29 实验十二 磁盘文件操作程序 32 实验十三 模块程序设计 38 实验十四 综合程序设计 39 1 实验一 DEBUG 的使用 实验目的实验目的 1 学习使用DEBUG程序的各种命令 2 掌握8088 86指令系统 算数指令 3 掌握用DEBUG调试自编程序的方法 4 掌握8088 8086 CPU寄存器的用途和存储器组织及它们之间的关系 5 掌握内存操作数及寻址方法 6 掌握汇编语言伪操作 BYTE PTR WORD PTR 内容及步骤内容及步骤 一 DEBUG 命令使用 1 敲 DEBUG 进入 DEBUG 环境 显示提示符 2 用命令 D100 10F 观察内存中的16进制码及屏幕右边的ASCII字符 3 用命令 E100 30 31 32 3F 将30H 3FH写入地址为100H开始的内存单元中 再用D命令观察结果 看键入的16进制数是什么字符的ASCII码 4 用命令 F100 10F A 将 A 的ASCII码填入内存 用D命令查看结果 5 用命令 F110 11F 41 将41H 填入内存 用D命令观察结果并比较 6 用R 命令检查各寄存器内容 特别注意AX BX CX DX IP及标志位中ZF CF和AF的内 容 7 用R命令将AX BX内容改写为1234H及5678H 8 用H命令检查下列各组16进制数加减结果并和你的手算结果比较 1 34H 22H 2 56H 78H 3 A5 79H 4 1284H 5678H 5 A758 347FH 二 8088常用指令练习 1 传送指令 1 用A命令在内存100H处键入下列内容 MOVAX 1234 MOVBX 5678 XCHGAX BX MOVAH 34 MOVAL 56 MOVCX 75AB XCHGAX CX 2 用U命令检查键入的程序 特别注意左边的机器码 3 用T命令逐条运行这些指令 每运行一行检查并记录有关寄存器及IP的变化情况 并 注意标志位有无变化 2 加减法指令 1 用A命令在内存200H处键入下列内容 2 MOVAH 34 MOVAL 2E ADDAL AH SUBAL 78 MOVCX 1234 MOVDX 5678 ADDCX DX SUBCX AX SUBCX CX 2 用U命令检查键入的程序及对应的机器码 3 用T命令逐条运行这些指令 检查并记录有关寄存器及ZF情况 思考题思考题 这次运行还是打入T 行不行 如何单步运行上述小程序 用R命令检查一下IP的内容 注意T命令与IP的关系 3 带进位加减法 1 用A命令在内存300H处键入下列内容 并用U命令检查 MOVAH 12 MOVAL 89 MOVCH 56 MOVCL 98 ADDAL CL ADCAH CH MOVDH A7 MOVDL 58 SUBDL 7F SBBDH 34 2 用T命令逐条运行这些指令 检查并记录有寄存器及CF内容 3 上面这段程序若改用16位操作指令达到同样结果 怎么改 试修改并运行之 4 BCD码加减法 1 内容 MOVAL 58 ADDAL 25 DAA 2 要求 用A 命令键入 U命令检查 T命令逐条运行并记录有关寄存器及AF内容 三 内存操作数及各种寻址方式使用 1 用A命令在内存400H处键入下列内容 并用U命令检查 MOVAX 1234 MOV 1000 AX MOVBX 1002 MOVBYTE PTR BX 20 MOVDL 39 3 INCBX MOV BX DL DECDL MOVSI 3 MOV BX SI DL MOV BX SI 1 DL MOVWORD PTR BX SI 2 2846 2 用T命令逐条运行这些指令 每运行一条有关内存操作数的指令 要用D命令检查并记 录有关内存单元的内容并注明是什么寻址方式 注意 D命令显示结果中右边的ASCII字符及双字节数存放法 思考题思考题 有关指令中BYTE PTR及WORD PTR伪操作不加行不行 试一试 四 DEBUG下汇编运行程序方法 用A命令汇编程序 编程完成将DS 1000开始的10个字节的内存单元的内容相加 并把 相加结果存放在DS 200A 内存单元中 用DEBUG调试运行该程序 并察看运行结果 内容 MOV CX 0AH MOV AL 0 MOV BX 1000 LL ADD AL BX INC BX DEC CX JNZ LL MOV BX AL INT 3 步骤 1 用A命令将程序键入到100H开始的内存中 在键入时记下标号LL的实际地址 在键入 JNZ指令时LL用实际地址值代替 2 用U命令检查键入的程序及对应的机器码 3 用E1000 01 02 03 04 05 06 07 08 09 0A将1000H开始的前10个内存单元的内容修 改为01 02 03 04 05 0A 用D命令查看修改结果 4 用T命令逐条运行上述小程序指令 检查并记录有关寄存器 存储单元内容及ZF情况 5 用F2000l0A 02 03 04 05 0B 将1000H开始的10 个内存单元的内容修改为 02 03 04 05 0B 用D命令查看修改结果 6 用G 100 全速运行上述小程序 用D1000 100F 查看运行结果 思考题思考题 可否随意在DEBUG提示符 后不带参数发出命令G 什么情况下使用命令G时 可不 用 给出执行的首地址 实验报告实验报告 1 列出8088常用指令练习部分的逐条运行记录 4 2 列出DEBUG下调式运行小程序的运行步骤和运行结果 3 回答思考题 附 DEBUG 使用 1 打 DEBUG 进入 DEBUG 显示提示苻 2 退出DEBUG命令 Q 3 显示内存命令 D 起始地址 结束地址 4 修改内存命令 E 起始地址 连续修改打空格键 打回车键退出E命令 5 检查寄存器命令 R 标志位显示10 CFCYNC ZFZRNZ SFNGPL AFACNA OFOVNV PFPEPO DFDNUP IFEIDI 6 修改寄存器命令 R 寄存器名 7 小汇编命令 A 起始地址 不输入指令打回车键退出A命令 8 反汇编命令 U 起始地址 结束地址 9 文件命名命令 N 盘号 文件名 10 读文件命令 L 内存地址 11 写文件命令 W 内存地址 10 读扇区命令 L 内存地址 盘号 0 A 1 B 扇区号 扇区数 11 写扇区命令 W 内存地址 盘号 扇区号 扇区数 12 运行命令 G 起始地址 结束 断点 地址 13 单步命令 T 起始地址 运行指令数 进入子程序内部 14 单步命令 P 起始地址 运行指令数 不进入子程序内部 15 内存搬家命令 M 起始地址 结束地址 目的地址 5 实验二 汇编语言程序结构 实验目的实验目的 1 掌握汇编语言程序结构 2 掌握建立 汇编 链接 调试和运行汇编程序的过程 3 掌握伪指令 SEGMENT ENDS ASSUME END OFFSET DUP 4 了解 EXE文件和 COM文件的区别及用INT 21H 4C号功能返回系统的方法 5 熟悉加法调整指令意义及其用法 实验内容 实验内容 一 多字节加法程序 对两个多位十进制数求和 加数和被加数分别存放在D1和D2开始的数据缓冲区中 相 加结果存放在D1开始的单元中 D1和D2均为字节变量 分别存储着压缩BCD数 DATASEGMENT D1DB 12H 34H 56H 78H D2DB 56H 27H 38H 49H DATAENDS CODESEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX LEA DI D1 MOV CX 4 LEA SI D2 MOV BX 4 CLC LOP MOV AL DI BX 1 ADC AL SI BX 1 DAA MOV DI BX 1 AL DEC BX LOOPLOP MOV AH 4CH INT 21H CODEENDS END START 步骤 1 从开始菜单 程序 附件 选则c 命令提示符 进入DOS环境 2 敲 cd 退回到根目录 3 敲 cd masm 进入masm子目录 4 敲 dir 列出masm目录下文件 6 5 敲 edit 进入全屏幕编辑环境 输入以上程序 存盘命名退出 如abc asm 6 敲 masm abc asm 汇编源程序 如无语法错误就会生成abc obj形式的二进制目标 代码文件 如有错误就回到全屏幕编辑环境修改错误 再重新汇编 直到汇编通过 为止 7 敲 link abc obj 链接二进制目标代码文件 生成abc exe文件 8 敲 DEBUG abc asm 调入DEBUG和文件abc exe 然后用U命令检查调入程序 9 用命令G 100 J J用实际地址代替 使程序运行并停在断点J处 检查内存单元的 内 容是否是预期的结果 二 把上题改造成COM文件的编程格式 汇编 链接和运行调试该程序 三 用16位减法指令编一个32位 4字节 数减法程序 两个源数及结果存放地址同题一 调 试并做记录 实验说明 实验说明 压缩型十进制数就是用四位二进制数表示一个十进制数位 如 十进制数39表 示为0011 1001 非压缩型十进制数即拆开型十进制数 它是用8位二进制数表示一个十 进制数位 如 十进制数39表示为0000 0011 0000 1001 思考题 思考题 1 若在源程序中把INT 21H的 H 省去 会产生什么现象 2 把 INT 21H 4CH号功能改为 INT 20H 行不行 实验报告实验报告 1 列出自编程序的程序清单 并加适当注释 2 写出汇编 连接及调试程序时产生的错误 其原因及解决办法 3 总结EXE文件和COM文件的编程格式 4 回答思考题 7 实验三 数据串传送和比较 实验目的实验目的 通过实验掌握下列知识 1 堆栈 堆栈指示器SP和堆栈操作指令PUSH POP 2 数据串传送程序和数据串传送指令MOVS STOS及重复前辍REP 3 数据串比较指令CMPSB及重复前缀REPZ 4 循环指令ROL 逻辑与指令AND和清方向位指令CLD 5 利用汇编集成环境编辑运行自编程序的方法 实验内容实验内容 一 利用查表方法把DX的内容 16进制数 转换成ASCII码 参考程序 DATASEGMENT D1DB 0123456789ABCDEF DATAENDS CODESEGMENT ASSUME CS CODE DS DATA ES DATA START MOV AX DATA MOV DS AX MOV ES AX MOV DX 6C8EH LEA BX D1 MOV DI 2000H MOV CX 4 LOP PUSHCX MOV CL 4 ROL DX CL POP CX MOV AL DL AND AL OF XLAT CLD STOSB LOOP LOP INT 20H CODEENDS END START 步骤 1 进入windows桌面 点击 我的电脑 进入C盘 找到CMASM2文件夹打开 点击 CMASM EXE进入汇编集成环境 2 按任意键进入主菜单 选择1建立源程序文件名 不需送扩展名 如图3 1所示 8 图3 1 汇编集成环境 3 选择2进入全屏幕编辑环境 送入汇编源程序 存盘退出 如图3 2所示 图3 2 全屏幕编辑环境 4 选择3产生EXE文件 包括汇编和链接过程 如有语法错误 返回2查找和修改错 误 存盘退出 再重新产生EXE文件 直到成功为止 如图3 3所示 图3 3 汇编和链接 9 5 选择5进入DEBUG环境 调式运行该程序 图3 4 DEBUG动态调试环境 6 用T命令逐条运行这程序到LOOP指令处 观察并记录每次运行结果 特别是SP和堆栈 内容 用D命令检查 7 用G命令将此程序运行到结束 并用D命令检查2000H处所转换的结果 可注意屏幕右 边的ASCII字符与DX是否一致 思考题 思考题 1 为什么不选择4直接运行该程序 而进入DEBUG运行调式该程序 2 程序中不设附加段可不可以 二 段寄存器概念及字符串传送指令练习 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值 5 修改此程序 使ES与DS为同一值 以减少一条指令 而源物理地址和目的物理地址 是 多少 仍和原来一样 三 数据串搬家程序 编程实现把字符串 Welcome to laboratory 从源缓冲区传送到目的缓冲区 在 DEBUG下用G命令运行此程序 并用D命令检查目的地址处的字符与源串是否一致 10 实验报告要求实验报告要求 1 各项实验记录和思考题 2 调式通过的自编程序清单和调试记录 11 实验四 屏幕字符显示 实验目的实验目的 通过实验掌握下列知识 1 利用DOS功能调用INT21H的2号和9号功能进行屏幕显示的方法 2 利用DOS功能调用INT21H的 0AH号功能从键盘输入数据的方法 3 直接向视频RAM VRAM 送ASCII码进行屏幕显示的方法 4 IBM PC机的ASCII码表及控制字符 5 利用 Break退出程序的方法及局限性 实验内容及步骤实验内容及步骤 一 利用INT 21H 的09H号功能调用显示字符串 CODESEGMENT ASSUME CS CODE DS CODE ORG 100H START JMP BEGIN MSGDB HELLO WELCOME TO ASSEMBLEER WORLD 13 10 BEGIN MOV AX CS MOV DS AX MOV DX OFFSET MSG MOV AH 09H INT 21H MOV AX 4C00H INT 21H CODEENDS END START 步骤 1 进入汇编集成环境输入上述程序 存盘退出编辑环境 2 汇编链接该程序产生 COM文件 3 运行该程序 观察结果 二 利用INT 21H 0AH号功能显示从键盘输入的字符串 DATASEGMENT BUF1DB Please input a string 0dh 0ah BUF2DB 80 DB DB 81 DUP BUF3DB 0DH 0AH DATAENDS CODESEGMENT ASSUME CS CODE DS DATA 12 START MOV AX DATA MOV DS AX LEA DX BUF1 MOV AH 09H INT 21H MOV DX BUF2 MOV AH 0AH INT 21H MOV CL STR1 1 MOV CH 0 MOV SI OFFSET STR1 2 ADD SI CX MOV BYTE PTR SI MOV DX OFFSET BUF3 MOV AH 09H INT 21H MOV DX OFFSET BUF2 2 MOV AH 09H INT 21H MOV AH 4CH INT 21H CODEENDS END START 步骤 1 进入汇编集成环境输入上述程序 存盘退出编辑环境 2 汇编链接该程序产生 EXE文件 3 运行该程序观察结果 三 利用INT 21H 2号功能显示字符 CODESEGMENT ASSUME CS CODE START XOR DL DL MOV CX 100H LOP MOV AH 2 INT 21H INC DL PUSH CX MOV CX 8 DELY PUSH CX MOV CX 0 J LOOP J POP CX LOOP DELY POP CX 13 LOOP LOP MOV AH 4CH INT 21H CODEENDS END START 步骤 1 进入汇编集成环境输入上述程序 存盘退出编辑环境 2 汇编链接该程序产生 EXE文件 3 运行该程序 屏幕上依次缓慢的显示256个ASCII字符 仔细观察每个字符 和IBM PC ASCII码表对照 看07H 0DH处控制字符显示结果与表上有何不同 4 按CTRL BREAK退出此程序 若一次不行可多做几次 四 直接向VRAM送ASCII码显示字符 CODE SEGMENT ASSUME CS CODE START MOV AX B800H MOV DS 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 20H CODEENDS END START 步骤 1 进入汇编集成环境输入上述程序 存盘退出编辑环境 2 汇编链接该程序产生 EXE文件 3 运行该EXE文件 仔细观察每一个ASCII码显示结果 并和字符表及上一道程序运行情 况进行对照 其控制字符区 07 0DH 显示结果和INT 21H 2号功能调用有何不同 五 自编程序 1 要求显示AX的内容 即能显示AX xxxx 2 编程实现 屏幕显示 Please set the password 随后从键盘输入设定的密码 14 屏幕接着显示 Please set the password again 如果再次输入的密码和第一次输入 的相同则显示 OK WELCOME TO ASSEMBLE WORLD 否则显示 Password error 实验报告要求实验报告要求 1 各项实验记录 2 利用INT 21H显示和直接向VRAM送ASCII码显示方法在显示结果上有什么不同 3 调试通过的自编程序清单及调试结果 15 实验五 条件转移和分支程序 实验目的实验目的 通过实验掌握下列知识 1 8088指令 JZ JNZ JC JNC CMP SHR 2 用字符搜索法确定字符串长度 3 16进制数化为ASCII码的一般方法 4 掌握利用间接转移指令JMP BX实现多岔分枝的方法 5 宏替换指令MACRO及ENDM 6 符号扩展指令CBW 实验内容 一 用字符搜索法确定字符串长度 CODE SEGMENT ASSUME CS CODE DS CODE ORG 100H START JMPBEGIN MSG DB This is the program to measure DB the length of a string BEGIN MOV AX CS MOV DS AX LEABX MSG MOVAL 24 XORCL CL LOP CMPAL BX JZEXIT INCBX INCCL JMPLOP EXIT MOV AH 4CH INT 21H CODE ENDS END START 汇编 连接和运行此程序 并检查CL的统计长度是否与你自己统计的实际长度是否一样 二 16进制数化ASCII码的一般方法 显示内存内容 CODE SEGMENT ASSUME CS CODE START MOV SI 0 MOV BL 10H 16 LOP MOV DL SI MOV CL 4 SHR DL CL CMP DL 0AH JCL1 ADDDL 7 L1 ADDDL 30 MOVAH 2 INT21H MOVDL SI ANDDL 0FH CMPDL 0AH JCL2 ADDDL 7 L2 ADDDL 30H MOVAH 2 INT21H MOVDL 20H MOVAH 2 INT21H INCSI DECBL JNZLOP MOV AH 4CH INT21H CODE ENDS END START 汇编 连接和运行此程序 观察结果 三 综合程序 编程测量一字符串长度 并用16进制数显示之 四 分支程序 已知CHR单元有一个二进制数X 编程计算Y 其结果存入RESULT单元中 Y 20X 50 20X5 84 5X 4 当 当 当 X X 实验报告要求实验报告要求 1 列出调试通过程序清单并加注释 2 写出实验体会 17 实验六 循环程序 实验目的实验目的 1 掌握循环程序设计的方法和技巧 2 掌握双重循环程序的结构 明晰内外循环层次 3 掌握排序程序设计方法 实验内容 实验内容 1 将一个十六位二进制数逐位显示输出 CODESEGMENT ASSUME CS CODE BEGIN MOV BX 1011000101010111B MOV CL 16 ROLT ROL BX 1 JC DISP MOV AH 2 MOV DL 30H INT 21H DISP MOV AH 2 MOV DL 31H INT 21H NEXT DEC CL JNZ ROTL MOV AH 2 MOV DL B INT 21H MOV AH 4CH INT 21H CODEENDS END BEGIN 汇编 连接和运行此程序 观察结果 二 将一批无序的字数组元素按照从小到大的次序进行排序输出 codesegment org100h assume cs code ds code main jmpstart arraydw1234h 5673h 7fffh 8000h 0dffh dw0ab5h 0369h 005fh 5634h 9069h countequ array start movcx count 18 shrcx 1 deccx movbl 1 again movdx cx andbl bl jeexit xorbl bl xorsi si again1 movax array si cmpax array si 2 jlenchg xchgarray si 2 ax movarray si ax movbl 1 nchg incsi incsi decdx jnzagain1 loopagain exit int20h codeends endmain 实验步骤 1 输入 汇编并连接此程序 忽略连接时的无堆栈告警 2 将 exe文件转换为 COM文件 3 在DEBUG下运行此程序 记录运行结果 是否达到要求 按从小到大进行排序 4 将转移指令JLE改为JNA 运行并记录排序结果 三 已知数组A包含5个互不相等的整数 数组B包含6个互不相等的整数 将既在A数组中 又在B 数组中出现的整数存放于数组D 中 实验报告要求实验报告要求 1 列出调试通过程序清单并加注释 2 写出实验体会 19 实验七 子程序 实验目的实验目的 1 掌握一般子程序的调用和返回 熟悉定义过程的伪指令 2 掌握利用堆栈传递参数的子程序调用方法 3 掌握子程序递归调用方法 实验内容及步骤实验内容及步骤 一 利用堆栈传递参数的子程序调用 求累加和 stacksegment stack db256 dup 0 stackends datasegment ary1db1 2 3 4 5 6 7 8 9 10 count1equ ary1 sum1dw ary2db10 11 12 13 14 15 16 17 18 count2equ ary2 sum2dw dataends mainsegment assume cs main ds data ss stack startprocfar pushds PSP段基址压栈 xorax ax pushax 双字节0压栈 movax data movds ax movax count1 pushax leaax ary1 pushax callfar ptr sum movax count2 pushax leaax ary2 pushax callfar ptr sum ret 返回DOS startendp mainends procesegment 20 assume cs proce sum proc far movbp sp movcx bp 6 movbx bp 4 xorax ax adn addal bx adcah 0 incbx loopadn mov bx ax ret4 sum endp proceends endstart 步骤 1 输入 汇编并将此程序连接成EXE文件 2 用DEBUG的断点命令和T命令运行此程序 观察并记录每次过程调用及进出栈指令前 后 带 的语句 的SP和堆栈内容 3 记录最后结果 SUM1 SUM2的段及偏移地址和它们的内容 思考题 思考题 1 sum子程序结尾为什么要用 ret 4返回 2 什么是程序段前缀PSP 二 完成一个四位十进制数相加的程序设计 形式为 2345 7869 要求 1 设计一个子程序 完成从键盘输入一个四位十进制数的操作 2 设计一个子程序 完成将缓冲区数送屏幕显示功能 3 设计一个子程序 完成两个数相加操作 三 子程序递归调用 求阶乘 stacksegment stack db100h dup stackends datasegment resuldw dataends codesegment mainprocfar assume cs code ds data ss stack start pushds subax ax pushax movax data 21 movds ax movax 5 callfact movresul ax ret factproc andal al jneiia moval 1 ret iia pushax decal callfact x2 popcx mulcl ret factendp mainendp codeends endstart 步骤 1 将程序输入 汇编并连接成EXE文件 2 用DEBUG的断点和T命令检查并记录每层递归嵌套过程的堆栈和AL内容 3 修改源程序 将阶乘数 3 改为本程序的最大允许值 是多少 重新汇编连接之 用 DEBUG运行并记录RESUL单元内容 4 若要在DOS命令下直接运行并显示阶乘结果 16进制形式 试修改程序并 调试运行 机动 四 自编程序 用递归方法编程实现两个正整数M和N相乘 编程说明 编程说明 正整数M和N相乘可看作如下形式的递归函数 MULT M 1 1 1 MNMMULT MN 若设N 15 M 4 则 MULT 4 MULT 3 15 MULT 2 15 15 MULT 1 15 15 15 15 15 15 15 60 3CH 实验报告实验报告 1 列出实验记录 2 列出自编程序清单并加注释 3 回答思考题 4 写出心得体会 22 实验八 宏指令及宏调用 实验目的实验目的 1 熟悉宏定义的一般结构 2 掌握宏指令的编写方法和调用方法 3 能区别宏调用和子程序调用的不同之处 4 了解 LOCAL 伪操作的用法 5 熟悉无参数宏指令和有参数宏指令的定义与调用 实验内容 实验内容 一 无参数宏指令的定义与调用 CRLFMARCO 宏定义 MOV AH 02H MOV DL 0DH INT 21H MOV AH 02H MOV DL 0AH INT 21H ENDM DATASEGMENT STR1DB PLEASE INPUT STRING1 STR2DB PLEASE INPUT STRING2 DATAENDS CODESEGMENT ASSUME CS CODE DS DATA START MOV AX DATA MOV DS AX MOV CX 10 AGAIN MOV AH 09H LEA DX STR1 INT 21H CRLF 宏展开 MOV AH 09H MOV DX OFFSET STR2 INT 21H CRLF 宏展开 LOOP AGAIN MOV AH 4CH INT 21H CODEENDS END START 23 实验步骤 1 汇编连接和运行此程序 观察结果 2 如果去掉程序中的 CRLF 宏展开 运行此程序观察结果 二 设计一个子功能 完成显示一串文字信息 三 设计一个子功能 能实现多个字或字节数据连加或连减的功能 实验报告要求实验报告要求 1 列出实验记录 2 列出自编程序清单并加注释 3 写出心得体会 24 实验九 数码转换程序 实验实验目的目的 1 掌握二进制和十进制数转换程序的编制和调试 2 掌握批处理文件的编制及使用 3 熟悉双字节乘法的编程方法 实验内容及步骤实验内容及步骤 一 数码转换程序 1 将一个十六位二进制数转换成十六进制数显示 CODESEGMENT ASSUME CS CODE BEGIN MOV BX 1011000101010111B MOV CH 4 MOV CL 4 ROLT ROL BX CL MOV DL BL AND DL 0FH CMP DL 9 JLE L ADD DL 7 L ADD DL 30H MOV AH 2 INT 21H DEC CH JNZ ROTL MOV DL H MOV AH 2 INT 21H MOV AH 4CH INT 21H CODEENDS END BEG 进入汇编集成环境 输入 汇编 连接和运行此程序 观察结果 2 将一个十六位二进制数转换成十进制数并显示输出 DATASEGMENT BUF0DW 2768H BUF1DB 5 DUP 0 BUF2 DW10000 1000 100 10 1 DATAENDS CODESEGMENT 25 ASSUME CS CODE DS DATA BEG MOV AX DATA MOV DS AX MOV AX BUF0 MOV BX OFFSET BUF1 MOV SI OFFSET BUF2 MOV CX 5 L MOV DX 0 DIV WORD PTR SI ADD AL 30H MOV BX AL INC BX ADD SI 2 MOV AX DX LOOP L MOV AH 9 MOV DX OFFSET BUF1 INT 21H MOV AH 4CH INT 21H CODEENDS END BEG 进入汇编集成环境 输入 汇编 连接和运行此程序 观察结果 二 自动汇编 连接及转换的批处理文件 1 用EDIT或COPY CON ALK BAT命令将下列程序输入 echo off masm 1 echo if you donot link strike Ctrl Break for quit and either pause link 1 del obj echo if the file is exe pleas strike Ctrl Break for quit and either pause exe2bin 1 exe 1 com del 1 exe 2 利用ALK BAK文件汇编连接二个以前通过的源文件 COM型及EXE型 三 双字节乘法程序 dispmacromess leadx mess movah 9 int21h endm 26 stacksegmentstack db256 dup 0 stackends datasegment bufdb7 db db15 dup messadb pleas input number A messbdb0dh 0ah pleas input number B linefddb0dh 0ah bcddd1000000000 100000000 10000000 dd1000000 100000 10000 1000 dd100 10 1 dataends codesegment assumecs code ds data ss stack mainprocfar pushds xorbx bx pushbx movax data movds ax dispmessa callget pushbx dispmessb callget displinefd popax mulbx movcx 10 leasi bcd leadi buf lop callbinec looplop movbyte ptr di dispbuf ret mainendp getproc leadx buf movah 0ah int21h leasi buf 1 xorbx bx 27 movah bh movcl si next incsi addbx bx movdx bx addbx bx addbx bx addbx dx moval si andal 0fh addbx ax deccl jnenext ret getendp binecproc movbl 0 again subax word ptr si sbbdx word ptr si 2 incbl jncagain addax word ptr si adcdx word ptr si 2 addbl 2fh mov di bl incdi addsi 4 ret binecendp codeends endmain 步骤 1 输入 汇编并连接此程序 2 在DOS下运行此程序 根据提示输入二个乘数 检查并记录结果 思考题思考题 本程序的输入范围是多少 若超过范围 会产生什么现象 试一试 四 根据上题 按下列要求选做一个修改程序 1 带符号数16位乘法 2 无符号数16位乘法 输入超过范围时能告警并要求重输 实验报告实验报告 1 列出实验记录 2 列出调试通过程序清单并加注释 3 回答思考题 4 写出心得体会 28 实验十 键盘和窗口程序 实验目的实验目的 1 掌握利用INT 16H 2号功能调用实行键盘输入的方法 2 熟悉键盘的扫描码和ASCII码的关系 3 掌握利用INT 10H功能调用实现窗口功能的方法 实验内容实验内容 一 键盘输入程序 PRO NAMSEGMENT ASSUME CS PRO NAM ORG100H AGAIN MOVAH 0 INT16H MOVBX AX CALLBINIHEX MOVAH 2 MOVdl 20h INT21H MOVDL BL MOVAH 2 INT21H MOVDL 0DH MOVAH 2 INT21H MOVDL 0AH MOVAH 2 INT21H JMPAGAIN INT20H BINIHEXPROCNEAR MOVCH 4 ROTATE MOVCL 4 ROLBX CL MOVAL BL ANDAL 0FH ADDAL 30H CMPAL 3AH JLPRINT ADDAL 7 PRINT MOVDL AL MOVAH 2 29 INT21H DECCH JNZROTATE RET BINIHEXENDP PRO NAMENDS ENDAGAIN 1 进入汇编集成环境 输入 汇编 连接此程序 并将它转变成 COM文件 2 运行此程序 观察并记录各个键的扫描码 ASCII码及对应字符 二 窗口程序 codesegment assume cs code ss code org100h start movax 0600h movcx 0 movdx 184fh movbh 7 int10h pos movah 2 movdx 101eh movbh 0 int10h movcx 20 get movah 1 int21h cmpal 1bh jzexit loopget movax 601h movcx 81eh movdx 1031h movbh 7 int10h jmppos exit mov ah 4ch int 21h codeends endstart 1 进入汇编集成环境 输入 汇编 连接此程序 并转变成 COM文件 2 运行此程序 观察按不同键所产生的效果 3 此程序所产生的窗口效果有何缺陷 试修改之 三 编程在屏幕中间建立一个20列宽10行高的窗口 然后把键入的内容在这个窗口显示出 来 每当输入20个字符光标具有下移一行 10行字符输入完毕 窗口自动清屏 30 实验报告实验报告 1 列出实验记录 2 给出调式通过程序清单 并加注释 31 实验十一 活动图形显示程序 实验目的实验目的 1 掌握利用INT 10H实现活动图形的方法 2 INT 10H 的 2号 6号 0AH号功能 实验内容实验内容 参考下列程序自编一活动的复合图形显示程序 stacksegment stack db256 dup 0 stackends codesegment assumecs code ss stack move movcx 0 movdx 184fh movbh 7 movax 0618h int10h movdx 0 movcx 1 movbh 0 rept movah 2 int10h movah 10 moval 0fh int10h calldely moval 20h movah 10 int10h incdh incdl incdl cmpdh 25 jnerept movah 4ch int21h delyproc pushcx pushdx movcx 5 lop movdx 0 32 lop1 decdx jnelop1 looplop popdx popcx ret delyendp codeends endmove stacksegment stack db256 dup 0 stackends datasegment chrtabdw7 db0dbh 0 0 0dbh 0 1 db0dbh 0 1 52h 0 1 db1 1 1 9 2 0 db9 0 2 dataends codesegment assume cs code ss stack ds data start movax data movds ax movcx 0 movdx 184fh movbh 7 movax 0618h int10h leadi chrtab movcx di movdx 400h adddi 2 next adddh di 1 adddl di 2 movah 2 movbh 0 int10h pushcx movcx 1 movah 10 moval di int10h popcx adddi 3 33 loopnext movah 4ch int21h codeends end start 实验报告实验报告 1 给出调试通过程序清单 并加注释 2 总结调试中产生的问题 34 实验十二 磁盘文件操作程序 实验目的实验目的 1 掌握利用FCB进行磁盘文件读写的方法 2 掌握利用HANDLE进行磁盘文件读写的方法 3 INT 21H 0FH 10H 14H 15H 16H 1AH号功能调用 4 INT 21H 3CH 3DH 3FH 40H号功能调用 实验内容实验内容 一 文本文件内容显示程序 stacksegmentstack db100h dup stackends datasegment fcbdb36 dup 0 countdb0 chardb0 dtadb0 errmsgdb file access error dataends codesegment mainprocfar assume cs code ss stack start pushds subax ax pushax movax data moves ax assume es data movsi 5ch movdi offset fcb movcx 12 cld repmovsb movds ax assume ds data movdx offset dta movah 1ah int21h movdx offset fcb movah 0fh int21h cmpal 0 35 jnzerror movword ptr fcb 0ch 0 movword ptr fcb 0eh 1 movfcb 20h 0 again leadx fcb movah 14h int21h cmpal 0 jnzerror moval dta cmpal 1ah jzeof cmpal 9 jztab calldispchar incchar cmpdta 0ah jnzagain movchar 0 inccount cmpcount 24 jnzagain movah 0 int16h movcount 0 jmpagain tab moval calldispchar incchar testchar 7 jzagain jmptab eof leadx fcb movah 10h int21h ret error leabx errmsg calldisplay ret displayproc movcx 30 disp1 moval bx calldispchar incbx loopdisp1 36 moval 0dh calldispchar moval 0ah calldispchar ret displayendp dispcharproc pushbx movbx 0 movah 14 int10h popbx ret dispcharendp mainendp codeends endstart 1 输入 汇编 连接此程序 用DEBUG将目的程序带参数调入 用D命令观看并记录 PSP中的FCB内容 2 运行此程序 二 磁盘文件拷贝程序 参考 stacksegmentstack db100h dup 9 stackends datasegment sfiledb64 db db64 dup dfiledb64 db db64 dup ask1db0ah 0dh please input source db file name ask2db0ah 0dh please input destnation db file name notedb0ah 0dh please insert diskettes db and strike any when ready er1db0ah 0dh create error er2db0ah 0dh open error er3db0ah 0dh read error er4db0ah 0dh write error er5db0ah 0dh close source file error er6db0ah 0dh close dest file error 37 bufrdw dataends codesegment assume cs code ds data ss stack startprocfar pushds subax ax pushax

温馨提示

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

评论

0/150

提交评论