汇编语言编程实例(基础必学)_第1页
汇编语言编程实例(基础必学)_第2页
汇编语言编程实例(基础必学)_第3页
汇编语言编程实例(基础必学)_第4页
汇编语言编程实例(基础必学)_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

汇编语言编程实例(基础必学)本文选取8086汇编(最常用基础汇编),所有实例均适配DOSBox环境,包含完整代码、详细注释及运行说明,兼顾入门级语法和实际功能,帮助快速理解汇编编程逻辑。实例一:屏幕输出字符串(入门基础)功能说明在DOS屏幕上输出指定字符串“Hello,Assembly!”,核心掌握DOS中断调用(21H)的使用,以及字符串定义、程序结束的基本语法。完整代码(带注释)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,完成数据段初始化(必须步骤)

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

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

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

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

INT21H;调用中断,结束程序

CODEENDS

ENDSTART;程序结束标记,指定入口为START运行说明1.用记事本编写代码,保存为“.asm”格式(如hello.asm);2.用MASM编译器编译:masmhello.asm,生成.obj文件;3.用LINK链接器链接:linkhello.obj,生成.exe文件;4.在DOSBox中运行.exe文件,即可看到屏幕输出指定字符串。核心知识点-数据段(DATASEGMENT):用于定义常量、字符串、变量等数据;-代码段(CODESEGMENT):程序执行逻辑的核心区域,包含指令和中断调用;-中断调用:21H是DOS常用中断,09H负责输出字符串,4CH负责程序退出;-LEA指令:取字符串的偏移地址,必须配合DX寄存器使用(输出字符串时,DX存储字符串偏移)。实例二:两个字节数求和(运算基础)功能说明定义两个8位字节数(如35H和4AH),计算两者之和,将结果存储到指定变量中,核心掌握寄存器运算、数据存储及标志位的基础应用。完整代码(带注释)asm

DATASEGMENT

NUM1DB35H;第一个加数(8位字节,十六进制35H,对应十进制53)

NUM2DB4AH;第二个加数(8位字节,十六进制4AH,对应十进制74)

SUMDB?;存储求和结果,?表示暂未赋值

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX;初始化数据段

MOVAL,NUM1;将第一个加数送入AL寄存器(AL是8位寄存器,用于存储字节数据)

ADDAL,NUM2;AL=AL+NUM2,执行求和运算

MOVSUM,AL;将求和结果送入SUM变量存储

;程序退出

MOVAH,4CH

INT21H

CODEENDS

ENDSTART运行说明1.编译、链接步骤同实例一,生成.exe文件;2.运行后无屏幕输出(未添加输出逻辑),可通过调试工具(如DEBUG)查看SUM变量的值;3.预期结果:35H+4AH=7FH(十进制53+74=127),SUM变量的值为7FH。核心知识点-8位寄存器AL:用于存储字节级数据(0~255),适合简单的字节运算;-ADD指令:加法指令,格式为“ADD目标寄存器,源数据”,此处目标是AL,源是NUM2;-变量定义:DB(DefineByte)表示定义1个字节的变量,?表示未初始化,后续通过指令赋值;-进位判断:若两个字节数之和超过255(如FFH+02H),会触发进位标志位CF=1,可通过JC指令判断进位。实例三:分支判断(比较并输出结果)功能说明定义两个16位字数据,比较两者大小,在屏幕上输出“BIG”(前者大)、“SMALL”(前者小)或“EQUAL”(相等),核心掌握比较指令(CMP)、分支指令(JE、JG、JL)的使用。完整代码(带注释)asm

DATASEGMENT

NUM1DW1234H;第一个16位字数据(十进制4660)

NUM2DW5678H;第二个16位字数据(十进制22136)

BIGDB'BIG',0DH,0AH,'$';前者大时输出的字符串

SMALLDB'SMALL',0DH,0AH,'$';前者小时输出的字符串

EQUALDB'EQUAL',0DH,0AH,'$';相等时输出的字符串

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

START:

MOVAX,DATA

MOVDS,AX;初始化数据段

MOVAX,NUM1;将NUM1送入AX寄存器(AX是16位寄存器,存储字数据)

CMPAX,NUM2;比较AX和NUM2(AX-NUM2,不改变AX的值,仅修改标志位)

JESHOW_EQUAL;若相等(ZF=1),跳转到SHOW_EQUAL标签

JGSHOW_BIG;若AX>NUM2(ZF=0且SF=OF),跳转到SHOW_BIG标签

JLSHOW_SMALL;若AX<NUM2(ZF=0且SF≠OF),跳转到SHOW_SMALL标签

;输出“BIG”的逻辑

SHOW_BIG:

MOVAH,09H

LEADX,BIG

INT21H

JMPEXIT;输出后跳转到EXIT,避免执行后续标签

;输出“SMALL”的逻辑

SHOW_SMALL:

MOVAH,09H

LEADX,SMALL

INT21H

JMPEXIT

;输出“EQUAL”的逻辑

SHOW_EQUAL:

MOVAH,09H

LEADX,EQUAL

INT21H

;程序退出

EXIT:

MOVAH,4CH

INT21H

CODEENDS

ENDSTART运行说明1.编译、链接后运行.exe文件;2.本实例中NUM1=1234H(4660),NUM2=5678H(22136),因此屏幕会输出“SMALL”;3.可修改NUM1和NUM2的值(如NUM1=5678H,NUM2=1234H),运行后会输出“BIG”;若两者相等,输出“EQUAL”。核心知识点-16位寄存器AX:用于存储字级数据(0~65535),适合较大量的运算;-CMP指令:比较指令,本质是“目标-源”,不改变目标值,仅修改标志位(ZF零标志、SF符号标志、OF溢出标志);-分支指令:JE(相等跳转)、JG(大于跳转)、JL(小于跳转),需配合CMP指令使用,根据标志位判断是否跳转;-标签(如SHOW_BIG、EXIT):用于标记程序中的跳转目标,使分支逻辑清晰。通用注意事项1.汇编语言区分大小写,指令(如M

温馨提示

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

评论

0/150

提交评论