版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验九 汇编综合程序设计一实验目的1、通过前面所学的汇编语言结构(顺序、分支、循环和子程序结构)以及 DOS 功能调用等基本 的程序结构来设计一个综合程序,达到学以致用,举一反三; 2、掌握模块化程序的设计方法; 3、掌握综合程序的编制及调试方法。 二实验内容1、编程实现由键盘输入任意一个字符,将该字符的 ASCII 码值显示在屏幕上(要求:分别以二 进制和十六进制形式显示)。 程序: DATA SEGMENT X DB ? Y DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX MOV
2、 AH,1 INT 21H MOV X,AL MOV Y,AL MOV DL,0AH MOV AH,2 INT 21H MOV CX,8 L1: SHL X,1 JC MAKE1 MOV DL,0 JMP MAKE2 MAKE1: MOV DL,1 MAKE2: INT 21H LOOP L1 MOV DL,B INT 21H MOV DL,0AH INT 21H MOV AL,Y MOV CL,4 SHR AL,CL CMP AL,09H JNA MAKE3 ADD AL,A-0AH MOV DL,AL JMP MAKE4 MAKE3: ADD AL,0 MOV DL,AL MAKE4: M
3、OV AH,2 INT 21H MOV AL,Y AND AL,0FH CMP AL,09H JNA MAKE5 ADD AL,A-0AH MOV DL,AL JMP MAKE6 MAKE5: ADD AL,0 MOV DL,AL MAKE6: MOV AH,2 INT 21H MOV DL,H INT 21H MOV DL,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START二进制的输出,将寄存器中的数据逐步左移,判断进位标志位CF是否为0,若为0,输出0,否则输出1。结果:如图,输入A,二进制为0100 0001B,16进制为41H编写一个程
4、序,实现把存放在 BX 寄存器内的二进制数以十六进制数的形式显示在屏幕上。 程序: DATA SEGMENT X DW 78A9H DATA ENDS STACK SEGMENT DB 100 DUP(?) CODE SEGMENT ASSUME DS:DATA,CS:CODE,ES:STACK START: MOV AX,DATA MOV DS,AX MOV BX,X MOV DL,0AH MOV AH,2 INT 21H MOV CX,16 L1: SHL BX,1 JC M1 MOV DL,0 JMP M2 M1: MOV DL,1 M2: INT 21H LOOP L1 MOV DL,
5、B INT 21H MOV DL,0AH INT 21H MOV DL,0DH INT 21H MOV AX,X AND AX,0F000H MOV CL,12 SHR AX,CL PUSH AX CALL SUB1 MOV AX,X AND AX,0F00H MOV CL,8 SHR AX,CL PUSH AX CALL SUB1 MOV AX,X AND AX,00F0H MOV CL,4 SHR AX,CL PUSH AX CALL SB1 MOV AX,X AND AX,000FH PUSH AX CALL SUB1 MOV DL,H MOV AH,2 INT 21H MOV AH,4
6、CH INT 21H SUB1 PROC NEAR PUSHF PUSH SP PUSH AX PUSH DX ADD SP,10 POP AX SUB SP,12 CMP AL,9 JG TOM1 ADD AL,30H JMP TOM2 TOM1: ADD AL,A-10 TOM2: MOV DL,AL MOV AH,2 INT 21H POP DX POP AX POP SP POPF RET 2 SUB1 ENDP CODE ENDS END START结果:现在 block 数据区有 20 个字数据,按要求编写程程序: 将正数和负数分开存放; (2)统计其中的正数和负数个数,并将结果放
7、在各区前面。 程序: DATA SEGMENT ORG 0100H BLOCK DW 142,563,386,-477,84,6723,-943,-242,-432, -234,342,-322,354,-23,432,-4453,23,-23, 375,686 ORG 0200H GNUM DW 0,20 DUP(?) ORG 0300H LNUM DW 0,20 DUP(?) DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV CX,20 LEA S
8、I,BLOCK L1: LODSW CMP AX,0 JNG M1 LEA DI,LNUM SHL LNUM,1 ADD DI,LNUM SHR LNUM,1 ADD DI,2 STOSW INC LNUM JMP M2 M1: JZ M2 LEA DI,GNUM SHL GNUM,1 ADD DI,GNUM SHR GNUM,1 ADD DI,2 STOSW INC GNUM M2: LOOP L1 MOV AH,4CH INT 21H CODE ENDS END START在以 BUF 为首址的字存储区中存放有 N 个有符号数,现将它们按由小到大的顺序排列后再放 回 BUF 存储区中,试编
9、程实现。 程序: DATA SEGMENT BUF DB -5,9,11,-3,0,-1,6,9,8,15,5 N EQU $-BUF DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV DX,N NEXT1: LEA SI,BUF DEC DX JZ ENDD MOV CX,DX NEXT2: MOV AL,SI CMP AL,SI+1 JG CHANGE MAKE: INC SI DEC CX JZ NEXT1 JMP NEXT2 CHANGE:
10、MOV BL,SI /数据交换 MOV BH,SI+1 MOV SI,BH MOV SI+1,BL JMP MAKE ENDD: MOV AH,4CH INT 21H CODE ENDS END START使用冒泡排序,利用CMP比较,JMP跳转结果: -5, 9,11,-3, 0,-1, 6, 9, 8,15, 5上图为未排序前的数据:FB,09,0B,FD,00,FF,06,09,08,0F,05下图为排序后的数据: FB,FD,FF,00,05,06,08,09,09,0B,0F -5,-3,-1, 0, 5, 6, 8, 9, 9,11,15 4、在以BUF 为首址的字存储区中存放有N
11、 个有符号数,现将它们按由小到大的顺序排列后再放回BUF 存储区中,试编程实现。 程序清单及其结构分析:DATA SEGMENT BUF DW 3,-5,9,-4,0,7,-1,10,-11 N=($-BUF)/2DATA ENDSSTACK SEGMENT STACK1 DB 200 DUP(0)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV CX,N DEC CX S1: MOV DX,CX MOV BX,0 S2: MOV AX,BUFBX CMP AX,BUFB
12、X+2 JL S3 XCHG AX,BUFBX+2 MOV BUFBX,AXS3:ADD BX,2 DEC CX JNE S2 MOV CX,DX LOOP S1 MOV AH,4CH INT 21HCODE ENDS END START 5、教材中布置过的习题。5.4 在X单元中存放着数Y的地址,请编制一个程序把Y中1的个数存入COUNT单元中,并画出程序流程图。程序清单:DATA SEGMENT X DW 1000H ;X单元存放Y的地址1000H COUNT DW 0 ;COUNT存放数据中1的个数 ORG 1000H ;在偏移地址为1000H的单元存放数Y为1 Y DW 1DATA E
13、NDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,X MOV AX,SI ;AX获得Y中的数据 MOV DX,AX MOV CL,0 ;CL赋初值为0,存放数据中1的个数S1:AND DX,DX ;因为采用左移位指令,DX与其自身进行与运算,若为0 JZ S2 ;说明数据位数已经循环结束。结束程序,输出结果。 SHL DX,1 ;逻辑左移 JNC S1 ;CF不为1时跳到S1继续循环 INC CL ;CF为1时CL=CL+1 JMP S1 ;程序没结束,无条件跳转S2:MOV COUNT,CL ;
14、输出结果,存入COUNT单元 MOV AH,4CH INT 21HCODE ENDSEND START运行结果:如上图结果所示:Y单元中只有一个5.9 、编写一个程序将DAT字节单元中的内容求补,并与原来的内容进行“或”运算,结果再存回原内存单元。程序清单:DATA SEGMENT ;数据段:字数组,长度要除2 DAT DW 12,23,11,43 N=($-DAT)/2DATA ENDSCODE SEGMENT ;代码段 ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,0 MOV CX,N CALL proc_1 ;调用子程
15、序1 MOV AH,4CH INT 21Hproc_1 PROC ;定义子程序1S1:MOV AX,SI ; MOV BX,AX NOT AX ADD AX,1 ;求补 OR AX,BX ;或运算 MOV SI,AX ;存回原内存 ADD SI,2 ;指针+2移动 LOOP S1 RETproc_1 ENDPCODE ENDSEND START程序结果:5.10在DAT字节单元有一个符号数,判断其正负,如为正数,在屏幕显示“Y”;如为负数,则显示“N”;如为0,显示0.程序清单:DATA SEGMENT ;数据段 DAT DB 10 M1 DB Y M2 DB NDATA ENDSCODE S
16、EGMENT ;代码段 ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AL,DATSI CMP AL,0 JZ S1 JG S2 MOV DI,OFFSET M2 MOV DL,DI MOV AH,2 INT 21H JMP EXITS1: MOV DL,30H MOV AH,2 INT 21H JMP EXITS2: MOV DI,OFFSET M1 MOV DL,DI MOV AH,2 INT 21HEXIT: MOV AH,4CH INT 21HCODE ENDSEND START程序结果:说明DAT字节单元中的数字正数。5
17、.12、在以DAT为首地址的字缓冲区存有100个字数据,编程求其最大值和最小值之和,结果存入RSLT单元。程序清单:DATA SEGMENT DAT DW 10,9,29,99,2,-2,-58,3,11,23 N=($-DAT)/2 ;字(dw)一定要除2 ORG 1000H RSLT DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,N PUSH CX ;数据保护 CALL proc_max ;求最大值的子程序 POP CX CALL proc_min ;求最小值的子程序
18、ADD AX,BX ;最大值和最小值之和 MOV RSLT,AX MOV AH,4CH INT 21Hproc_max PROC ;求最大值的子程序S1:MOV AX,SIS2:ADD SI,2 ;指针移动也是加2 DEC CX JZ S0 CMP AX,SI JL S1 JMP S2S0:RETproc_max ENDPproc_min PROC ;求最小值的子程序 MOV SI,0S3:MOV BX,SIS4:ADD SI,2 DEC CX JZ S5 CMP BX,SI JG S3 JMP S4S5:RETproc_min ENDPCODE ENDSEND START程序结果: 最大值为
19、41,换为16进制为29,存在偏移地址为1000H的内存单元中5.13从键盘输入15中的任何一个数,分别在屏幕上显示1st、2st、3st、4st、5st。输入其他字符则显示*程序清单:DATA SEGMENT m1 DB 1st $ m2 DB 2st $ m3 DB 3st $ m4 DB 4st $ m5 DB 5st $DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AXS0:MOV AH,8 INT 21H CALL proc1E:MOV AH,4CH INT 21Hproc1 PROC CM
20、P AL,31H JNZ S1 MOV DX,OFFSET m1 JMP EXITS1:CMP AL,32H JNZ S2 MOV DX,OFFSET m2 JMP EXITS2:CMP AL,33H JNZ S3 MOV DX,OFFSET m3 JMP EXITS3:CMP AL,34H JNZ S4 MOV DX,OFFSET m4 JMP EXITS4:CMP AL,35H JNZ S5 MOV DX,OFFSET m5 JMP EXITEXIT:MOV AH,9 INT 21H JMP E1S5:CMP AL,24H JNZ S6 MOV DL,24H MOV AH,2 INT 21
21、H JMP ES6:MOV DL,2AH MOV DL,2AH MOV AH,2 INT 21HE1:JMP S0 RETproc1 ENDPCODE ENDSEND START程序结果:5.14有一个首地址为A的N字数组,编制一个程序使该数组的数按照从大到小的次序排列。程序清单:DATA SEGMENT dat DW 1,2,3,4,5,6,7,8,9,10 N=($- dat)/2DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV CX,N DEC CXS0:MOV DX,CX MOV S
22、I,0S1:MOV AX,datSI CMP AX,SI+2 JG S2 XCHG AX,datSI+2 MOV datSI,AXS2:ADD SI,2 DEC CX JNE S1 MOV CX,DX LOOP S0 MOV AH,4CH INT 21HCODE ENDSEND START 程序结果:5.15程序清单:DATA SEGMENT string1 DB ABCDE string2 DB ABCDE M1 DB MATCH$ M2 DB NOT MATCH$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATASTART: MOV A
23、X,DATA MOV DS,AX MOV ES,AX MOV SI,OFFSET string1 MOV DI,OFFSET string2 MOV CX,5 CLD S1:CMPSB JNZ S2 DEC CX JNZ S1 MOV DX,OFFSET M1 MOV AH,9 INT 21H JMP S3S2: MOV DX,OFFSET M2 MOV AH,9 INT 21HS3:MOV AH,4CH INT 21HCODE ENDSEND START程序结果:5.18DATA SEGMENT M1 DB Please input a lowercase:$ M2 DB This is not a lowercase,please resume load:$DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV DX,OFFSET M1 MOV AH,9 INT 21HS0:MOV AH,1 INT 21H CMP AL,24H JZ S3 CMP AL,61H JB S1 CMP AL,7AH JA S1 SUB AL,20H MOV DL,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高中生物必修一:200个易混易错判断题集锦
- 丰收之歌图文
- 小学语文教学设计案例 完整的小学语文教学设计案例
- 教育培训项目投资合同三篇
- 生物与艺术结合的跨界教学探索计划
- 组织结构对工作计划的影响
- 单位健康码红码应急预案
- 主管如何运用社交技能加强影响力计划
- 计算机网络概述
- 2025年中考数学考点分类专题归纳之有理数
- 2024年入团积极分子结业考试试题
- 潮湿相关性皮炎的护理
- 餐饮服务质量提升
- 幼儿园园长的幼教教研与项目管理
- 健康评估练习题大全(含答案)
- 新北师大版小学数学二年级上册《六-测量:课桌有多长》-公开课教案-1
- 构建文明校园共同创造和谐学园
- 铁路边坡水害分析报告
- 南平出租车从业资格证模拟考试题
- 《怎样听课评课》课件
- 建筑施工工程投入的主要施工机械设备情况描述及进场计划
评论
0/150
提交评论