汇编语言程序设计实例分析_第1页
汇编语言程序设计实例分析_第2页
汇编语言程序设计实例分析_第3页
汇编语言程序设计实例分析_第4页
汇编语言程序设计实例分析_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序设计实例分析

注意事项:1.按照程序分段的原则,合理设定各段内容2.凡是用到内存单元的数据、变量及符号地址等应该在数据段或堆栈段中加以描述3.程序的执行顺序由逻辑地址CS:IP确定

CS-当前指令所在代码段的段地址

IP-要执行的下一条指令的偏移地址例1:将内存缓冲区中以BUFA开始的一组字数据传送到BUFB开始的内存区DATA SEGMENTBUFA DW 367BH,2845H,0A78H, 9DE3H,0F6BH,6532H COUNT EQU($-BUFA)/2BUFB DWCOUNTDUP(?)DATA ENDSSTACK SEGMENTSTACK DB 200DUP(?)STACK ENDSCODESEGMENT ASSUMEDS:DATA,SS:STACK,CS:CODESTART:MOV AX,DATA MOV DS,AX

MOVSI,0;初始化 MOVDI,0 MOV CX,COUNT;计数器初值 LOP: MOV AX,BUFA[SI];取数 MOV BUFB[DI],AX;送数 INC SI;字数据占用2个单元

INC SI;地址加2 INC DI INC DI DEC CX;计数器减1 JNZ LOP;非0转 MOV AH,4CH INT 21H CODEENDS END START例2:已知在内存中从BLOCK单元起存放有20个带符号字节数据,统计其中负数的个数并放入COUNT单元DATASEGMENTBLOCKDB-7,1,12,-90,-70,34,-1,56DB45,-12,-3,-4,23,0,12DB11,-9,-8,67,-56CNEQU$-BLOCKCOUNTDB?DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AX

MOVDL,0;初始化DLLEASI,BLOCK;取有效地址MOVCX,CN;取计数器初值LP:MOVAL,[SI];取数TESTAL,80H;测试符号位JZNEXT;非0转INCDL;为负数时计数NEXT:INCSI;地址加1LOOPLP;循环MOVCOUNT,DL;保存负数个数MOVAH,4CHINT21HCODEENDSENDSTART例3:设计一个程序,统计内存W单元保存的无符号字数据中有多少个二进制“1”,结果送内存N单元保存

分析:要统计内存W单元保存的无符号字数据中有多少个二进制“1”,可将该数据送至寄存器AX中,通过移位指令将AX中的每一位依次移入进位位CF中,若CF=1则计数器CL的值加1。

这样就可以统计出AX中1的个数。

DATASEGMENTWDW0F0FH;定义字数据

NDB?;设置计数单元DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCL,0 ;计数器清零

MOVAX,W ;取数到AX

AA:ANDAX,AX ;判AX=0?

JZCC ;为0转移到CCSHLAX,1 ;逻辑左移1位

JNCBB ;无进位转BBINCCL ;有“1”则计数

BB:JMPAA ;无条件转AACC:MOVN,CL ;结果送N单元

MOVAH,4CHINT21HCODEENDSENDSTART例4:设计一个程序,连续将键盘输入的小写字母转为大写字母,字母之间用“-”号间隔CODESEGMENTASSUMECS:CODESTART:MOVAH,01H;DOS调用,从键盘输入1个字符

INT21HMOVBL,AL;保存在BL中

MOVDL,‘-’;送‘-’号到DLMOVAH,02H;显示字符‘-’INT21HMOVAL,BL;取回键盘输入的字符

CMPAL,‘a’;与‘a’比较

JBEXIT;低于转EXIT

CMPAL,‘z’;与‘z’比较

JAEXIT;高于转移到EXITSUBAL,20H;取大写字母

MOVDL,AL;输出

MOVAH,02HINT21HMOVDL,0AH;调用换行

MOVAH,02HINT21HMOVDL,0DH;调用回车

MOVAH,02HINT21HJMPSTART;无条件转

EXIT:MOVAH,4CHINT21HCODEENDSENDSTART例5:设计子程序,实现用DOS功能调用完成屏幕光标回车和换行的处理功能

本题在子程序中实现DOS的功能调用,调用的基本步骤和方法是:在指定寄存器中设置入口参数;在AH寄存器中设置系统功能调用号;采用中断调用指令INT21H来实现功能调用。子程序如下:STARPROCFAR ;定义过程名为STARPUSHAX ;保护现场PUSHDXMOVDL,0DH;入口参数,回车CR的ASCII码MOVAH,02H ;设置系统功能号INT21H ;DOS调用,显示字符MOVDL,0AH;入口参数,换行LR的ASCII码MOVAH,02H ;设置系统功能号INT21H ;DOS调用,显示字符POPDX ;恢复现场POPAXRET ;子程序返回STARENDP ;过程结束例6:将内存中任意存放的10个无符号字节数据中的最大数找出,存入MAX单元DATASEGMENTTABDB5,8,10,43,54,12,100,4,67,90MAXDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX

MOVAL,TAB;取第一个数

MOVBX,OFFSETTAB;取偏移地址

MOVCL,9LL:INCBX;地址加1CMPAL,[BX];两数比较

JAETT;大于等于转

XCHGAL,[BX];交换数据位置

TT:DECCL;计数器减1JNZLL;非0转

MOVMAX,AL;保存最大数

MOVAH,4CHINT21HCODEENDSENDSTART例如:输入数字7,屏幕上显示出以下图案:****************************可采用双重循环程序,外循环控制行数,内循环控制列数。例7:从键盘输入3-9之间的数字,用“*”号组成三角形图案CODESEGMENTASSUMECS:CODESTART:MOVAH,01H;键盘输入1个数字至ALINT21HCMPAL,33H;与数字3比较

JBSTART;低于转

CMPAL,39H;与数字9比较

JASTART;高于转

SUBAL,30H;ASCII码转换为数字

MOVCL,AL;保存至AL中

MOVCH,0;CH清0MOVDL,0DH;输出回车

MOVAH,02HINT21HMOVDL,0AH;输出换行

INT21HAA:PUSHCX;保存循环次数BB:MOVDL,‘*’;输出“*”MOVAH,02HINT21HLOOPBB;内循环

MOVDL,0DH;输出回车INT21HMOVDL,0AH;输出换行INT21HPOPCXLOOPAA;外循环EXIT:MOVAH,4CHINT21H

温馨提示

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

评论

0/150

提交评论