


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、汇编语言编程编程练习一、实验题1.非数值运算编程 实验目的通过非数值运算(如统计,分类,排序,代码转换等)编程,进一步掌握8086/8088汇编语言程序设计方法和技巧(b)实验容统计设有100H个数,编程统计正数、负数和零的个数。实验分析:程序中数的总数很多,某些局部需要重复执行,因此要用到循环结构。循环结构 每次测试循环条件,当满足条件时,重复执行这一段程序;否那么循环完毕,顺序往下 执行。其次,要统计正数、负数、零的个数,可以依靠标志位SF进行判断,SF=0,正数;SF=1,负数;零那么为总数减去正负数的个数。该程序流程图如下:开始初始化:设置缓冲区BUFF指针BX,设定循环次数256,统
2、计计数 器DL清零执行:从BUFF取数,进行算术运 算,判断符号标志位 SF修改:移动缓冲区指针,循环次 数减一NO循环控制:CX=0YES完毕:将存放器的统计结果存入MEM单元,将控制交操惟系统程序如下所示:STACK SEGMENT STACKDW 128 DUP(?)STACK ENDSDATA SEGMENTBUFF DB 256 DUP(?)MEM1 DB ?MEM2 DB ?MEM3 DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START:MOV AX,DATAMOV DS,AXMOV CX,256LEA BX, BUFFXOR
3、DL,DLXOR DH,DHXOR SI,SI ; 统计计数器清 0NEXT:MOV AL,BX; 取数据到 ALSFADD AL,0 ; 做运算,影响标志位JNS AA1 ; 是正数,跳到 AA1INC DL ; 是负数,统计加 1AA1: INC DH ; 是正数,加 1INC BX ; 移动指针 LOOP NEXT ; 循环控制MOV MEM1,DLMOV MEM2,DHMOV MEM3,SI ; 保存统计结果MOV AX,4C00HINT 21HCODE ENDSEND START代码转换编程将组合的 BCD码9649转换成二进制数,考虑采用A*10 +B*10+C*10+D 的算法。
4、实验分析:由学习,写成十六进制的BCD码和十进制码是完全一样的,比方, 75D=01110101 BCD而01110101B=75耳BCD码的运算也遵循十进制运算规那么,这一点可以方便计算机本身擅长的二进制运算结合BCD码的调整指令来完成。此题中,由于9469H计算时机默认为二进制数。因而,我们首先要做的是将 9469h BCD码先转换成十进制数,计算机将会以二进制形式存储。最后再辅助程序令其输出在屏幕上。实验大抵流程如下:开始初始化:设定字节空间执行:BCD码转化成十进制*二进制码输出完毕实验代码如下:DATAS SEGMENT buffer1 DW 9649hbuffer2 DW ? ;
5、分配两个字节的空间DATAS ENDSCODES SEGMENTASSUME CS:CODES,DS:DATASSTART: MOV AX,DATASMOV DS,AXmov ax,buffer1and ax,0f000hmov cl,12shr ax,clmov dx,ax ; 至此,已将 9649hBCD 中的 9 十进制取出,并放入 dx 中 call change ; 调用 chang, 将 9 乘以 10mov ax,dxmov bx,buffer1and bx,0f00hmov cl,8shr bx,cladd ax,bxmov dx,axcall changemov ax,dxm
6、ov bx,buffer1and bx,00f0hmov cl,4shr bx,cladd ax,bxmov dx,axcall changemov ax,dxmov bx,buffer1and bx,000fh存axadd ax,bx ; 至此, ax 中的值已是 9649十进制 ,但电脑是将其以二进制的形式 储的,故应是 25B1h,二进制就是 10001mov buffer2,ax ; 因为后面会用到 ah, 为防止在其过程中丧失 ax 中的数据,故将 中的数据放入 buffer2 中mov cx,16agai n: shl buffer2,1 ;将已经转换成二进制的数逐个显示出来mov
7、 dl,0adc dl,30hmov ah,2int 21hloop aga inmov ah,4CHINT 21Hchange proc ; 子程序change的功能是实现 dx乘以10add dx,dxmov cx,dxadd dx,dxadd dx,dxadd dx,cxretcha nge ENDPCODES ENDSEND START排序将80H个无符号的八位二进制数按递增方式排列。同时考虑它们有符号数、递减等方式。实验分析:实验要求将数排序,那么用CMP比拟两个数大小,用标志位JNG有符号位不大于,JGE有符号位不小于,JAE无符号位不低于来判定排序种类。准备将该题用“冒泡排序法,
8、将其两两比拟。前一个数较大 递减,那么不会 改变原来位置;否那么,两数交换,依次将全部数据排序依次小循环。例如如下:不过,由于数据的原始情况不知,按以上方法排序一次不一定符合要求。此题 采取屡次小循环方法,用数据个数控制循环次数。这种方法效率低,不过在循环次 数较少的情况下还是很简单的,毕竟原理很简单。该程序流程图如下:开始初始化:初始化数据段,设定循环次数NOcx数据总数执行:采用变址寻址,将前数与后数比拟地址加一YESNO完毕前数 后数进入小循环直到数按照从大到小的顺序排列好为止。 附程序如下:1、无符号位从小到大:STACK SEGMENT STACKDW 64 DUP(?)STACK
9、ENDSDATA SEGMENTBUFF DB 128 DUP(?)COUNT EQU $-BUFF ; 等值命令DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,转无符号START:MOV AX,DATAMOV DS,AXMOV CX,COUNT-1LOOP1:MOV DX,CX ;MOV SI,0 ;LOOP2:MOV AL,BUFFSI CMP AL,BUFFSI+1; JNA COT ; XCHG AL,BUFFSI+1; MOV BUFFSI,ALCOT: INC SILOOP LOOP2 ; MOV CX,DX ; LOOP LOOP1 MOV
10、 AX,4C00HINT 21HCODE ENDSEND START2) 、无符号位从大到小STACK SEGMENT STACK DW 64 DUP(?)STACK ENDSDATA SEGMENTBUFF DB 128 DUP(?) COUNT EQU $-BUFF ; 等 DATA ENDS保存循环次数采用变址寻址前数与后数比 前个数小于或等于 否那么交换存位置所有数据排列一次开始下一次排序CODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,COUNT-1LOOP1:MOV DX,CXMOV SI,0LOO
11、P2:MOV AL,BUFFSICMP AL,BUFFSI+1JNG COT ; 前个数小于或等于 ,转有符号XCHG AL,BUFFSI+1MOV BUFFSI,ALCOT: INC SILOOP LOOP2MOV CX,DXLOOP LOOP1MOV AX,4C00HINT 21HCODE ENDSEND START3、有符号位递减STACK SEGMENT STACKDW 64 DUP?STACK ENDSDATA SEGMENTBUFF DB 128 DUP?COUNT EQU $-BUFF ; 等值命令DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DA
12、TASTART:MOV AX,DATAMOV DS,AXMOV CX,COUNT-1LOOP1:MOV DX,CXMOV SI,0LOOP2:MOV AL,BUFFSICMP AL,BUFFSI+1JGE COT ; 前个数大于或等于 ,转有符号XCHG AL,BUFFSI+1MOV BUFFSI,ALCOT: INC SILOOP LOOP2MOV CX,DXLOOP LOOP1MOV AX,4C00HINT 21HCODE ENDS END START2、数值运算编程(a) 实验目的 通过编程与程序调式,熟悉 8086/8088 运算指令与 DEBUG 动态调试程序的方法(b) 实验容无符
13、号二进制数运算有 20 个 8 位的无符号二进制数,编一个程序完成对这些数的求和。 实验分析:求 20 个无符号的八位二进制数,直接进行二进制运算要将数值转换成二进制 形式比拟繁琐。由此想到写成十六进制的BCD 码和十进制码是完全一样的,比方,75D= ( 01110101 ) BCD 而(01110101 ) B=75H。BCD码的运算也遵 循十进制运算规那么,这一点可以方便计算机本身擅长的二进制运算结合BCD码的调整指令来完成。将输入的20个无符号八位二进制数看成BCD码的十六进制表示,直接进行BCD加法运算。最终将结果转换成以 ASCII 码形式输出,即为所得数的十六进制BCD码形式。流
14、程图略。实验代码如下(参考) :STACK SEGMENT STACK STACK ; STACK SEGMENT DW 128 DUP(?) ; 128 WORDSSTACK ENDS ; SEGMENT ENDDATA SEGMENT PARA DATA ; DATA SEGMENTTABLE DB 01,02,03,04,05,06,07,08,09,10,11,12,13,14,15,16,17,18,19,20TOTAL DW ? ;BCD 加法运算结果PRINT DB ? ; 显示的 ASCII 字符DATA ENDS ; SEGMENT ENDCODE SEGMENT PARA
15、CODEASSUME CS:CODE, DS:DATA, SS:STACKMAIN PROC FARPUSH DSSUB AX,AXPUSH AX ;DS:0000 为返回地址MOV AX,DATAMOV DS,AX ;DS 初始化MOV AX,0LEA BX,TABLE ;DS:BX 指向 TABLE的首地址MOV CX,20 ; 循环 20 次SUM: ADD AL,BXJNC OVERINC AHCLC OVER: INC BXLOOP SUMMOV TOTAL,AXMOV CX,0010LEA SI,PRINT+3 L20: CMP AX,CX ; 值10?L30 ; 是,退出XOR
16、DX,DX ; 去除高位商DIV CX ; 除以 10OR DL,30HMOV SI,DL ; 存 ASCII 字符DEC SIJMP L20L30: OR AL,30H ; 存最后的商MOV SI,AL ; 作为 ASCII 字符MOV AH,02H ; 打印算术结果 ; MOV CX,4LEA DI,PRINTL10: MOV DL,DIINT 21HINC DILOOP L10MOV AX,4C00HINT 21H MAIN ENDP CODE ENDS END MAIN-BCD算术运算两个 6 位的 BCD 码,完成减法运算,设被减数为 123456 ,减数为 789123 实验分析:
17、此题中先做减法,再采用未组合的BCD 码减法调整,从低位开始逐位做减法运算。将计算结果低位存入 AL,高位存于AH。总体来说,该题原理较为简单。实验代码如下(参考) :STACK SEGMENT STACK DW 128 DUP(?) STACK ENDSDATA SEGMENT PARADATANUMBER1 DB 789123NUMBER2 DB 123456 SF DB - ; 需打印的符号 RESULT DB ? ; 存算术结果 DATA ENDSCODE SEGMENT PARACODEASSUME CS:CODE,DS:DATA,SS:STACKMAIN PROC FARPUSH
18、DSSUB AX,AXPUSH AXMOV AX,DATAMOV DS,AXLEA SI,NUMBER1+5LEA DI,NUMBER2+5LEA BX,RESULT+5MOV CX,6CLCMOV AL,SI ;将低位放在 AL 中L10: MOV AH,SI-1 ;将高位放在 AH 中SBB AL,DIAAS ; 做 ASCII 减法调整OR AX,3030HMOV BX,AL ;存单位运算结果MOV AL,AH ; 将下一位放入 ALDEC SIDEC DIDEC BXLOOP L10MOV AH,02H ; 打印算术结果MOV CX,7LEA DI,SFL20: MOV DL,DIINT 21HINC DILOOP L20MOV AX,4C00HINT 21HMAIN ENDP CODE ENDSEND
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- DB23-T2849-2021-公共视频监控系统监控杆体施工规范-黑龙江省
- 服装瑕疵检查方案(3篇)
- 商贸公司启动方案(3篇)
- 舞蹈培训招生方案(3篇)
- 学校学生定位管理制度
- 公司理赔指标管理制度
- 工程检测中心管理制度
- 跨境运输督查方案(3篇)
- 总经理绩效方案(3篇)
- DB62T 4329-2021 油菜品种 陇油15号
- 2024年新苏教版五年级下册科学全册精编知识点(附附问答题)
- 肠管脱出的应急救援原则、方法
- 《解密分层教学》读书心得体会(读书心得体会30篇)
- 服务档案管理制度
- 2024年新一轮科技革命的开启
- 村委消防安全网格化管理工作制度范文
- 房屋建筑工程监理规划(范本-附带监理细则内容)
- 【选填重点题型突破】专题03-折线最短问题(解析版)
- JGT266-2011 泡沫混凝土标准规范
- 【语文】四川省成都市泡桐树小学二年级下册期末复习试卷(含答案)
- arm嵌入式系统试题及标准答案
评论
0/150
提交评论