汇编语言程序实例(入门级)_第1页
汇编语言程序实例(入门级)_第2页
汇编语言程序实例(入门级)_第3页
汇编语言程序实例(入门级)_第4页
汇编语言程序实例(入门级)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言程序实例(入门级)以下实例基于8086汇编(DOS环境),均包含完整代码、注释及功能说明,适合汇编入门学习者参考,代码可直接在MASM、emu8086等工具中编译运行。实例1:屏幕输出字符串(基础入门)功能说明在DOS屏幕上输出指定字符串“Hello,Assembly!”,核心运用DOS中断21H的09H功能,是汇编语言中最基础的输入输出实例,掌握字符串定义、中断调用的基本用法。完整代码asm

;屏幕输出字符串实例

DATASEGMENT;数据段:定义程序中使用的数据

STRDB'Hello,Assembly!',0DH,0AH,'$';要输出的字符串,0DH(回车)、0AH(换行),$表示字符串结束

DATAENDS;数据段结束

CODESEGMENT;代码段:存放程序执行指令

ASSUMECS:CODE,DS:DATA;关联代码段(CS)和数据段(DS)

START:;程序入口

MOVAX,DATA;将数据段地址送入AX寄存器

MOVDS,AX;将AX中的地址送入DS,完成数据段初始化(8086中DS不能直接赋值,需通过AX中转)

MOVAH,09H;功能号09H:DOS中断,用于输出字符串

LEADX,STR;将字符串STR的偏移地址送入DX(LEA指令:取有效地址)

INT21H;调用DOS中断21H,执行字符串输出

MOVAH,4CH;功能号4CH:程序正常退出

INT21H;调用中断,退出程序

CODEENDS;代码段结束

ENDSTART;程序结束,指定入口为START关键注释补充DATASEGMENT/ENDS:定义数据段,用于存放常量、变量等数据,所有要使用的字符串、数值需在此定义。CODESEGMENT/ENDS:定义代码段,存放程序的执行指令,是程序的核心部分。INT21H:DOS系统中断,不同的AH值对应不同功能,09H是输出字符串,4CH是程序退出。LEADX,STR:等价于MOVDX,OFFSETSTR,用于获取字符串的偏移地址,供中断调用使用。实例2:两个8位无符号数加法运算(算术运算基础)功能说明计算两个8位无符号数(如35H和4AH)的和,将结果存储到指定内存单元,若产生进位则在屏幕输出“Carry!”,否则输出“NoCarry!”,掌握汇编中加法指令、进位标志位(CF)的使用及分支判断。完整代码asm

;8位无符号数加法运算实例

DATASEGMENT

NUM1DB35H;第一个8位无符号数(十进制53)

NUM2DB4AH;第二个8位无符号数(十进制74)

SUMDB?;用于存储加法结果的内存单元(?表示未初始化)

CARYDB'Carry!',0DH,0AH,'$';有进位时输出的字符串

NO_CARYDB'NoCarry!',0DH,0AH,'$';无进位时输出的字符串

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX;初始化数据段

MOVAL,NUM1;将第一个数送入AL寄存器(8位累加器,用于加法运算)

ADDAL,NUM2;AL=AL+NUM2,执行加法运算,进位标志位CF会自动更新

MOVSUM,AL;将加法结果存入SUM单元

JCCARRY_FLAG;判断进位标志位CF:若CF=1(有进位),跳至CARRY_FLAG标签处

;无进位时执行以下指令

MOVAH,09H

LEADX,NO_CARY

INT21H;输出“NoCarry!”

JMPEXIT;跳至程序退出处,避免执行有进位的代码

CARRY_FLAG:;有进位时执行的代码

MOVAH,09H

LEADX,CARY

INT21H;输出“Carry!”

EXIT:;程序退出标签

MOVAH,4CH

INT21H

CODEENDS

ENDSTART关键注释补充ADDAL,NUM2:加法指令,将AL中的值与NUM2相加,结果存入AL;若和大于255(8位无符号数最大值),则CF=1(产生进位),否则CF=0。JCCARRY_FLAG:条件跳转指令,JC(JumpifCarry)表示若CF=1则跳转,对应“有进位”的分支。JMPEXIT:无条件跳转指令,用于跳过另一个分支的代码,避免逻辑错误。SUMDB?:定义一个未初始化的8位内存单元,用于存储加法结果,后续可通过调试工具查看结果。实例3:循环实现1到10的累加(循环结构基础)功能说明使用循环指令,计算1到10的累加和(1+2+3+...+10),将结果存储到内存单元,最后输出结果(十进制),掌握汇编中循环指令(LOOP)、计数器(CX)的使用,理解循环结构的实现逻辑。完整代码asm

;1到10累加求和(循环实现)

DATASEGMENT

COUNTEQU10;常量定义,循环次数为10(1到10共10个数)

SUMDW0;存储累加和,用16位(DW),避免结果溢出(1到10和为55,8位足够,此处演示16位用法)

MSGDB'1+2+...+10=',0DH,0AH,'$';提示信息

BUFDB3DUP(0),'$';用于存储十进制结果的缓冲区(3位,足够存储55)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX;初始化数据段

;输出提示信息

MOVAH,09H

LEADX,MSG

INT21H

;循环累加初始化

MOVCX,COUNT;CX作为计数器,装入循环次数10

MOVAX,0;AX作为累加器,初始化为0(存储累加和)

MOVBX,1;BX作为循环变量,初始化为1(从1开始累加)

LOOP_ADD:;循环标签

ADDAX,BX;AX=AX+BX,执行累加

INCBX;BX自增1(BX=BX+1)

LOOPLOOP_ADD;循环指令:CX=CX-1,若CX≠0则跳至LOOP_ADD,直至CX=0结束循环

MOVSUM,AX;将累加和存入SUM单元(结果为55,十六进制37H)

;将AX中的十六进制结果转换为十进制,存入BUF缓冲区(用于屏幕输出)

MOVSI,OFFSETBUF;SI指向BUF缓冲区起始地址

MOVCX,3;转换为3位十进制数,循环3次

MOVBX,10;除数为10(用于取余、取商)

CONVERT:

XORDX,DX;DX清零(避免除法溢出,DX:AX作为被除数)

DIVBX;DX:AX÷BX,商存AX,余数存DX(余数即当前位的十进制数)

ADDDL,30H;将余数(0-9)转换为ASCII码(30H是'0'的ASCII码)

MOV[SI],DL;将转换后的ASCII码存入缓冲区

INCSI;SI指针自增,指向缓冲区下一个位置

LOOPCONVERT;循环转换,直至3位转换完成

;输出十进制结果

MOVAH,09H

LEADX,BUF

INT21H

;程序退出

MOVAH,4CH

INT21H

CODEENDS

ENDSTART关键注释补充LOOPLOOP_ADD:循环指令,核心逻辑是“CX自减1,若CX≠0则跳转”,CX是循环计数器,需提前装入循环次数。DIVBX:除法指令,8086中除法分为8位和16位,此处是16位除法(AX为被除数,BX为除数),商存AX,余数存DX。ASCII码转换:十进制数字0-9的ASCII码是30H-39H,因此将余数(0-9)加上30H,即可转换为对应的字符,用于屏幕输出。BUFDB3DUP(0),'$':D

温馨提示

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

评论

0/150

提交评论