版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chapter04汇编语言程序设计第四章·微机原理与接口技术核心课程Contents本章目录汇编语言程序设计课程核心章节概览,涵盖基本概念、流程结构、系统调用与综合编程实践。01汇编语言程序基本概念02汇编语言程序基本流程结构03BIOS和DOS功能调用04汇编语言综合编程实例CHAPTER01汇编语言程序基本概念从机器语言到汇编语言的演进历程与核心原理LOW-LEVELLANGUAGES机器语言与汇编语言机器语言是计算机唯一能直接识别的二进制指令集合,而汇编语言通过助记符提升了可读性。两者本质等价,汇编须经翻译才能被CPU执行。机器语言直接操控硬件指令集01二进制指令集:由0、1组成的指令集合,是计算机硬件唯一能直接识别和执行的语言。02执行效率最高:每条指令对应特定硬件操作,但编写难度极大、可读性极差。03架构强绑定:与特定CPU架构绑定,不同处理器的机器语言互不兼容,可移植性为零。04助记符提升可读性:汇编语言使用MOV、ADD、SUB等符号表示操作码,大幅提升程序可读性。05汇编翻译过程:须通过汇编程序(如MASM)翻译成机器码目标程序,才能被CPU执行。06仍属低级语言:与机器语言一一对应,执行效率高但仍依赖特定处理器架构。ASSEMBLYPROCESS汇编过程:从源码到机器码汇编程序将汇编语言源程序自动翻译为机器码目标程序。翻译过程中,每条汇编指令对应一个或多个字节的机器代码,存放在特定内存地址中,形成可执行的二进制文件。01汇编程序逐行解析指令助记符和操作数,生成对应的机器码MASM02机器代码由一个或多个字节组成,首字节为操作码,后续为操作数或地址偏移Opcode03目标程序包含段地址和偏移地址,需链接器处理后才能在操作系统中加载执行Linker04汇编过程会进行语法检查,发现错误时输出错误信息和行号,帮助定位和修正SyntaxCheck机器码与汇编指令对照示例内存地址机器代码(H)汇编指令功能说明0100B80012MOVAX,1200H将立即数1200H送入AX0103BB3456MOVBX,5634H将立即数5634H送入BX010603C3ADDAX,BXAX与BX相加,结果存AX0108A30020MOV[2000H],AX将AX内容存入内存010BB44CMOVAH,4CH准备DOS返回功能号每条汇编指令对应特定字节数的机器码,汇编程序完成符号到二进制的翻译LANGUAGECOMPARISON汇编语言与高级语言对比汇编语言直接操作硬件资源,执行效率最高但开发难度大、可移植性差;高级语言屏蔽硬件细节,开发效率高、通用性强。两者各有适用场景,实际工程中常混合使用以兼顾性能与效率。汇编语言特点01直接访问CPU寄存器、内存和I/O端口,能充分发挥硬件性能,执行速度最快极速执行02生成的目标代码体积小、运行效率高,适合嵌入式系统和实时控制等对性能敏感的场景嵌入式03与特定CPU架构强绑定,不同处理器需重写代码,开发周期长、维护成本高强绑定高级语言特点01面向过程或对象,抽象层次高,语法接近自然语言,开发效率远高于汇编高抽象02具有良好的通用性和可移植性,同一代码可在不同平台编译运行,便于大型软件开发跨平台03编译器自动优化代码,但生成的机器码通常比手写汇编体积更大、效率略低编译优化ASSEMBLYLANGUAGE汇编语言语句格式汇编语言语句由标号、操作码、操作数和注释四部分组成,其中操作码是必需的核心元素。标号用于标识地址、操作数指定数据来源或目标、注释提升代码可读性,四者协同构成完整的汇编指令表达。01标号(Label):指令的地址标识符,后跟冒号,用于循环和条件跳转的目标定位,如LOOP1:02操作码(Opcode):指令助记符,指定CPU执行的具体操作,如MOV、ADD、JMP,是语句的必需部分03操作数(Operand):指令操作的对象,可以是寄存器、立即数、内存地址或变量名,数量0–2个04注释(Comment):以分号开头,解释代码功能和设计意图,不被汇编程序处理,对程序维护至关重要汇编语句结构示例解析标号操作码操作数注释START:MOVAX,0;初始化AX寄存器为0—ADDAX,BX;将BX值累加到AXLOOP1:DECCX;循环计数器减1—JNZLOOP1;CX不为0则跳转LOOP1—INT21H;调用DOS中断服务完整汇编语句包含标号、操作码、操作数、注释四部分,操作码是唯一必需元素ASSEMBLYLANGUAGE伪指令的概念与作用伪指令是汇编程序识别的控制命令,用于定义数据结构、分配存储空间、组织程序段等,不生成CPU可执行的机器码。伪指令在汇编阶段被处理,为程序构建必要的数据环境和内存布局,是汇编语言编程不可或缺的组成部分。本质区别CPU指令生成机器码供运行时执行,伪指令仅在汇编时起作用,不产生可执行代码。汇编时生效常用伪指令包括数据定义(DB/DW/DD)、段定义(SEGMENT/ENDS)、过程定义(PROC/ENDP)等核心指令。DB/DW/DD存储组织伪指令决定变量在内存中的存储位置和初始值,是程序数据段和代码段组织的基础。数据段基础内存管理正确使用伪指令能有效管理内存资源,避免地址冲突,保证程序各模块协调工作。避免冲突汇编语言程序设计数据定义伪指令详解数据定义伪指令DB/DW/DD用于在内存中分配存储空间并初始化数据,分别对应字节、字、双字三种数据宽度。结合DUP操作符可批量定义数组,变量名作为内存地址的符号引用,是汇编程序数据管理的核心工具。基本数据定义01DB(DefineByte):定义字节类型数据,占1个字节,取值范围-128~255或ASCII字符02DW(DefineWord):定义字类型数据,占2个字节,取值范围-32768~6553503DD(DefineDoubleword):定义双字类型数据,占4个字节,可存储32位整数或单精度浮点数DUP操作符与数组01DUP格式:nDUP(初始值),用于定义n个相同初始值的连续存储单元,如100DUP(0)02嵌套使用:2DUP(3DUP(1))展开为1,1,1,1,1,1,可用于定义多维数组结构03未初始化空间:变量名DB?或100DUP(?),?表示不指定初始值,运行时动态赋值数据定义伪指令示例字数据采用小端存储模式汇编语句占用字节内存内容(H)说明NUM1DB25119定义字节变量NUM1=25NUM2DW1234H23412字数据低字节在前STRDB'HELLO'548454C4C4F字符串按ASCII存储ARRDB5DUP(0)50000000000定义5字节数组初值0BUFDB100DUP(?)100未初始化预留100字节缓冲区8086Assembly段定义伪指令与程序结构8086采用分段内存模型,程序由代码段、数据段、堆栈段等逻辑段组成。SEGMENT/ENDS定义段边界,ASSUME建立段寄存器与段的关联,END标记程序结束并指定入口点。段定义伪指令SEGMENT/ENDS成对使用,定义一个逻辑段的开始和结束,段名作为该段的标识符ASSUME告知汇编程序段寄存器(CS/DS/SS/ES)与具体段的对应关系,汇编时据此计算地址END标记整个源程序结束,后可跟入口标号指定程序开始执行的地址8086标准段结构CODE代码段存放程序指令,由CS:IP指向当前执行位置,是程序的核心逻辑部分DATA数据段存放程序使用的变量和常量,通过DS寄存器访问,需初始化DS才能使用STACK堆栈段用于子程序调用、中断现场保护和临时数据存储,由SS:SP管理ProgramFramework完整汇编程序框架示例一个完整的8086汇编程序包含堆栈段、数据段和代码段三个基本组成部分。代码段入口需初始化DS寄存器指向数据段,程序结束时通过DOS功能调用返回操作系统。01堆栈段定义:STACKSEGMENTSTACK指定段类型,DB100DUP('S')分配100字节堆栈空间02数据段初始化:入口必须执行MOVAX,DATA和MOVDS,AX两条指令,建立数据段基址03程序返回:使用MOVAH,4CH和INT21H调用DOS功能,正常返回操作系统并释放资源04入口点指定:ENDSTART标记程序结束,START为代码段入口标号,操作系统从此处开始执行标准程序框架代码结构代码说明STACKSEGMENTSTACK定义堆栈段开始DB100DUP('S')分配100字节堆栈空间STACKENDS堆栈段结束DATASEGMENT定义数据段开始;变量定义区在此定义程序使用的变量DATAENDS数据段结束CODESEGMENT定义代码段开始ASSUMECS:CODE,DS:DATA建立段寄存器关联START:MOVAX,DATA取数据段地址到AXMOVDS,AX初始化DS寄存器完整程序框架包含三段定义、段寄存器初始化和DOS返回调用三个核心要素CHAPTER02汇编语言程序基本流程结构顺序、分支与循环三种基本控制结构的汇编实现汇编语言程序设计·程序结构顺序结构程序设计顺序结构程序按指令书写顺序依次执行,是最基础的程序控制结构。设计时需关注数据流向、寄存器分配和运算顺序。01顺序程序特点:指令线性排列,CPU按地址递增顺序逐条执行,无跳转和分支,逻辑清晰易调试02寄存器分配策略:合理规划AX、BX、CX、DX的用途,避免数据覆盖,必要时用堆栈保护中间结果03数据传送规范:内存到内存的数据传送必须通过寄存器中转,如MOVAX,[SRC]再MOV[DST],AX04运算结果处理:注意标志位状态、进位/溢出情况,多字节运算需使用带进位指令ADC/SBB顺序程序示例:计算Z=X+Y汇编代码功能说明DATASEGMENT数据段定义开始XDW1234H定义变量X=1234HYDW5678H定义变量Y=5678HZDW?定义结果变量ZDATAENDS数据段结束MOVAX,X取X值到AX寄存器ADDAX,YAX=X+YMOVZ,AX结果存入Z变量顺序程序按线性流程执行,关键是指令间的数据传递和寄存器合理分配CHAPTER14·ASSEMBLY分支结构程序设计分支结构通过条件跳转指令实现程序的有条件执行路径选择,标志寄存器状态决定跳转行为。条件跳转指令01JZ/JE零标志ZF=1时跳转,用于判断相等或运算结果为002JNZ/JNE零标志ZF=0时跳转,用于判断不相等或运算结果非003JG/JL有符号数比较:大于(JG/JNLE)与小于(JL/JNGE)跳转04JA/JB无符号数比较:高于(JA/JNBE)与低于(JB/JNAE)跳转分支程序设计要点CMP比较指令比较两操作数,执行减法但不保存结果,仅设置标志位供后续跳转判断单分支IF-THEN条件满足时执行代码块,否则跳过,最后汇合到公共出口双分支IF-THEN-ELSE条件满足执行THEN块后跳转到出口,否则执行ELSE块ASSEMBLY·BRANCH分支程序实例:求两数最大值将高级语言的条件判断转换为汇编分支结构,需要使用CMP指令比较操作数,再根据比较结果选择合适的条件跳转指令。双分支结构中,THEN块末尾必须有跳转到公共出口的JMP指令,避免执行ELSE块代码。01CMP+JLECMPA,B执行A−B运算并设置标志位,JLETHEN_ELSE在A≤B时跳转到ELSE分支处理。这是分支判断的核心指令组合,决定了程序执行流向。02JMPEXITTHEN分支执行MOVMAX,A后必须用JMPEXIT跳过ELSE块,否则会继续执行ELSE代码。这是双分支结构的关键保护机制。03EXITEXIT标号作为两个分支的汇合点,保证无论哪个分支执行都能到达统一的后续代码。它是程序流程控制的汇合枢纽。04NESTED多分支扩展:多个IF-ELSE嵌套时,需合理规划标号命名和跳转层次,避免逻辑混乱。建议采用层次化命名规范。求最大值程序代码解析汇编代码执行说明MOVAX,A取变量A到AXCMPAX,B比较A和B,设置标志位JLEELSE_PART若A≤B则跳转到ELSEMOVMAX,AXTHEN:A>B,MAX=AJMPEXIT跳过ELSE部分ELSE_PART:ELSE分支入口标号MOVAX,B取变量B到AXMOVMAX,AXELSE:A≤B,MAX=BEXIT:分支汇合点,继续执行双分支结构需要CMP比较、条件跳转、THEN块、JMP跳过、ELSE块五个核心要素Assembly·Loop循环结构程序设计循环结构通过跳转指令实现代码的重复执行,是处理批量数据的核心机制。汇编语言提供LOOP、JCXZ等专用循环指令,也可用CMP配合条件跳转实现灵活控制。循环程序需正确初始化计数器、设计循环体和退出条件,避免死循环。循环实现方式01LOOP指令:CX减1后判断是否为0,不为0则跳转到指定标号,适合固定次数的计数循环执行时自动递减CX寄存器,无需手动修改计数器,代码简洁高效02条件跳转循环:用CMP比较配合JNZ/JZ等指令,灵活控制循环继续或退出,适用范围更广支持复杂条件判断,可实现while、do-while等多种循环结构03JCXZ指令:CX为0时跳转,用于循环开始前的边界检查,避免CX初值为0时的错误执行常与LOOP配合使用,作为循环入口的安全检测机制循环程序设计要点01循环初始化:设置计数器初值、指针初值和累加器初值,确保循环从正确状态开始初始化顺序至关重要,需在循环体外完成所有准备工作02循环体设计:包含核心处理逻辑和计数器/指针更新,注意保护需要跨迭代保持的寄存器关键数据应入栈保存或使用非易失性寄存器,防止被循环逻辑破坏03退出条件:计数循环以CX=0为退出条件,条件循环需在循环体内设置条件检测和跳转必须确保循环能够正常终止,避免陷入无限循环导致程序崩溃AssemblyLanguage·Loop循环程序实例:数组求和数组求和是循环结构的典型应用,需要正确初始化指针、计数器和累加器三个核心变量。循环体内完成数据读取、累加运算和指针更新三个步骤,LOOP指令自动完成计数器递减和退出判断。数组求和程序代码循环三要素:初始化·循环体·控制汇编代码功能说明阶段ARRAYDW1,2,3,4,5,6,7,8,9,10定义10个字的数组数据定义SUMDW?定义结果变量MOVCX,10循环次数=数组长度初始化LEASI,ARRAYSI指向数组首地址XORAX,AXAX清零作为累加器SUM_LOOP:循环入口标号循环体ADDAX,[SI]累加当前元素到AXADDSI,2指针移动到下一个字LOOPSUM_LOOPCX-1,非0则继续循环循环控制MOVSUM,AX保存求和结果结果保存01初始化CX计数·SI指针·AX累加器02循环体取值·累加·移指针03循环控制LOOP自动递减CX并判断04结果保存AX中存储总和,存入SUMCHAPTER03BIOS和DOS功能调用通过中断机制实现输入输出与系统服务调用汇编语言·中断系统中断的基本概念中断是CPU响应异步事件的机制,通过中断向量表定位中断服务程序入口。软件中断(INTn)是程序主动触发的系统调用方式,DOS和BIOS通过中断提供输入输出、文件管理等服务。理解中断机制是掌握功能调用的理论基础。中断分类硬件中断:由外部设备信号触发,如键盘输入(INT09H)、定时器(INT08H),CPU自动响应软件中断:由INTn指令主动触发,用于调用系统服务,如DOS功能调用INT21H异常中断:CPU执行指令时检测到错误触发,如除零错误(INT00H)、溢出(INT04H)中断处理流程01中断触发:硬件信号或INT指令产生中断请求,CPU完成当前指令后响应中断02现场保护:CPU自动将FLAGS、CS、IP压入堆栈,保存被中断程序的执行状态03服务执行:根据中断号从中断向量表获取服务程序入口地址,跳转执行中断处理代码04现场恢复:IRET指令弹出IP、CS、FLAGS,返回被中断程序继续执行汇编语言·系统调用DOS功能调用规范DOS通过INT21H中断提供丰富的系统服务,功能号存于AH寄存器,入口参数和返回值通过约定寄存器传递。调用前需正确设置参数,调用后检查返回状态。STEP01MOVAH,功能号将目标功能号写入AH寄存器,指定本次系统调用的服务类型STEP02设置入口参数按约定寄存器传递参数,字符串地址用DS:DX,数值用AL/AXSTEP03INT21H触发21H中断,DOS根据AH中的功能号执行对应服务例程STEP04处理返回值返回值通常在AL/AX中,检查CF标志位确认调用成功或失败常用DOS功能调用一览表功能号(AH)功能名称入口参数返回值01H键盘输入字符无AL=输入字符ASCII码02H显示单个字符DL=字符ASCII码无09H显示字符串DS:DX=串首地址($结尾)无0AH输入字符串DS:DX=缓冲区首地址缓冲区含输入内容4CH程序终止返回AL=返回码(通常0)返回DOSDOS功能调用通过AH设置功能号、INT21H触发,是汇编程序实现I/O的核心机制CHAPTER21·DOSINTERRUPT单字符输入输出功能DOS的01H和02H功能调用分别实现单字符的键盘输入和屏幕输出,是最基础的人机交互接口。01H功能带回显,输入字符自动显示并返回ASCII码;02H功能输出DL中的字符。两者配合可实现简单的交互程序。单字符输入输出代码示例01H·键盘输入字符等待键盘输入一个字符,自动回显并支持Ctrl+C中断检测。调用:MOVAH,01H→INT21H,ASCII码返回AL。应用:菜单选择(Y/N确认)、单键命令响应。02H·显示单个字符将DL寄存器中的ASCII码对应字符输出到屏幕。调用:MOVDL,字符码→MOVAH,02H→INT21H。特殊:0DH回车/0AH换行/07H响铃。代码说明;输入一个字符注释:准备读取输入MOVAH,01H设置功能号01HINT21H调用DOS,AL=输入字符MOVBL,AL保存输入字符到BL;输出一个字符注释:准备输出显示MOVDL,BL要输出的字符放入DLMOVAH,02H设置功能号02HINT21H调用DOS,字符显示在屏幕DOSINT21H·FUNCTIONCALL字符串输入输出功能DOS的09H和0AH功能调用实现字符串级别的输入输出。09H要求字符串以$结尾,DS:DX指向串首;0AH使用特定格式的输入缓冲区,首字节定义最大长度,次字节返回实际长度。正确设置缓冲区结构是字符串输入成功的关键。09H:显示字符串DISPLAYSTRING·INT21H字符串格式:必须以$字符(ASCII24H)结尾,DOS遇到$停止输出,$本身不显示调用方法:LEADX,STRING加载串地址到DX,MOVAH,09H后INT21H执行显示嵌入控制符:串中可包含0DH回车、0AH换行实现多行输出,如'Hello',0DH,0AH,'World','$'0AH:输入字符串INPUTSTRING·INT21H缓冲区结构:第1字节=最大字符数(含回车)、第2字节=实际输入长度(DOS填入)、第3字节起=输入内容调用方法:LEADX,BUFFER指定缓冲区地址,MOVAH,0AH后INT21H等待用户输入直到回车长度处理:实际输入长度存入第2字节,可用MOVCL,[BX+1]获取长度用于后续字符串处理DOSINT21H综合实例:人机对话程序人机对话程序综合运用09H字符串显示和0AH字符串输入功能,实现用户交互。程序流程包括显示提示、读取输入、处理输入内容、显示结果四个阶段。正确处理缓冲区结构和字符串结尾符是实现功能的关键。01提示显示定义prompt1,用09H功能输出提示信息02输入读取USERMAX缓冲区最大30字符,0AH读取输入03字符串处理定位末尾,添加'!'和'$'使内容可显示04结果输出组合欢迎信息与用户名完整输出人机对话程序关键代码代码片段功能说明prompt1DB'Pleaseinputyourname:',0DH,0AH,'$'定义提示字符串USERMAXDB30缓冲区最大长度30USERLENDB?实际输入长度(DOS填写)USERNDB30DUP(?)输入内容存储区LEADX,USERMAX/MOVAH,0AH/INT21H读取用户输入MOVAL,USERLEN/CBW/MOVSI,AX获取输入长度到SIMOV[BX+SI],BYTEPTR'!'在末尾添加感叹号MOV[BX+SI+1],BYTEPTR'$'添加字符串结束符缓冲区结构详解偏移030最大长度偏移1?实际长度偏移2+30DUP内容存储核心机制0AH功能自动在偏移1处填入实际输入字符数,程序员无需手动计算字符串长度结尾处理'!''$'利用USERLEN定位末尾,依次写入'!'和'$',使09H功能可正确终止输出地址计算CBWBX+SI通过CBW将字节扩展为字,再用BX+SI基址变址定位到输入内容末尾ASSEMBLY·BIOSINTERRUPTBIOS功能调用概述BIOS中断提供比DOS更底层的硬件访问能力,直接控制显示、键盘、磁盘等设备。INT10H视频服务可设置显示模式、光标位置和字符属性;INT16H键盘服务可读取扩展键码。BIOS调用在需要精细控制硬件或DOS功能不足时使用。INT10H视频服务01AH=00H设置显示模式:AL=03H设置80×25彩色文本模式,AL=12H设置640×480图形模式02AH=02H设置光标位置:DH=行号、DL=列号、BH=页号,可精确定位字符输出位置03AH=09H显示字符及属性:AL=字符、BL=属性(前景/背景色)、CX=重复次数,实现彩色输出04AH=0EH电传方式输出:AL=字符,自动移动光标并处理回车换行,适合逐字符输出INT16H键盘服务01AH=00H读取键盘输入:等待按键,AL返回ASCII码,AH返回扫描码,可识别功能键和组合键。这是最基本的键盘输入方式,程序会暂停直到用户按下任意键02AH=01H检查键盘缓冲区:ZF=1表示无按键,ZF=0表示有键可读,不阻塞程序执行。适用于需要实时响应的交互程序,如游戏或监控程序03AH=02H读取shift状态:AL返回shift键状态字节,可检测Ctrl、Alt、Shift、CapsLock等状态。通过状态字节实现组合键功能,扩展键盘交互能力CHAPTER04汇编语言综合编程实例通过典型项目实践巩固汇编程序设计能力ASSEMBLY·ARITHMETIC数值运算程序设计汇编语言的数值运算需要关注操作数宽度、结果寄存器和溢出处理。加减法使用ADD/SUB指令,多字节运算用ADC/SBB传递进位;乘法MUL/IMUL结果存放在DX:AX或AX中;除法DIV/IDIV商和余数分别存放。正确选择指令和处理结果是数值运算的关键。加减法运算基本运算ADD目标,源→目标=目标+源SUB目标,源→目标=目标-源支持寄存器、内存与立即数多字节加法低字节用ADD指令高字节用ADC带进位加32位数相加需两条指令配合多字节减法低字节用SUB指令高字节用SBB带借位减保证借位正确传递到高位乘除法运算无符号乘法MUL8×8位结果存AX16×16位结果存DX:AX隐含被乘数在AL/AX无符号除法DIV16÷8位商AL余数AH32÷16位商AX余数DX隐含被除数在AX/DX:AX有符号运算IMUL/IDIV用于带符号数结果解释与无符号不同需根据数据性质选择指令ASSEMBLYCASESTUDY实例:四则运算计算器四则运算计算器综合运用菜单交互、数值输入转换、运算执行和结果显示等模块。程序采用分支结构根据用户选择执行不同运算,需要处理十六进制字符串到数值的转换、运算溢出检测和数值到字符串的反向转换。01菜单设计:用09H功能显示运算选项菜单(加/减/乘/除/退出),用01H功能读取用户选择02输入转换:读取十六进制字符序列,逐字符转换为数值,通过移位累加得到完整的16位操作数03运算执行:根据选择跳转到对应运算代码段,ADD/SUB/MUL/DIV执行计算,结果保存在AX中04结果输出:将AX中的二进制结果转换为十六进制字符序列,逐字符用02H功能显示在屏幕上四则运算程序结构模块功能说明关键指令菜单显示输出运算选项提示INT21H(AH=09H)输入读取获取用户选择和操作数INT21H(AH=01H)数值转换字符序列转二进制数值SHL/ROL移位累加加法运算两数相加存结果ADDAX,BX乘法运算两数相乘存结果MULBX(DX:AX)结果转换二进制转字符序列DIV16取余逆序结果显示输出运算结果INT21H(AH=02H)四则运算程序包含输入、转换、运算、输出四个核心模块ASSEMBLY·SUBROUTINE子程序设计与调用子程序是实现代码复用的核心机制,通过CALL指令调用、RET指令返回。设计时需明确入口参数、出口参数和现场保护策略。01子程序调用机制CALL指令将返回地址(CALL下一条指令的IP)压入堆栈,然后跳转到子程序入口地址PUSHIP→JMPRET指令从堆栈弹出返回地址到IP,CPU回到CALL后续指令继续执行,完成子程序返回POP→IPNEAR/FAR调用段内调用仅压入IP(2字节),段间调用压入CS和IP(4字节),由PROC属性决定2Bvs4B02参数传递与现场保护寄存器传参入口参数放入约定寄存器(如AX、BX),出口参数通过寄存器返回,简单高效AX·BX堆栈传参调用前PUSH参数,子程序通过[BP+n]访问,适合参数较多或递归调用的场景[BP+n]现场保护子程序入口PUSH使用的寄存器,出口前POP恢复,确保不破坏调用者的寄存器状态PUSH/POPSUBROUTINEEXAMPLE子程序实例:字符串处理子程序通过SI寄存器接收字符串地址参数,遍历统计长度后通过CX返回结果。PUSH/POP保护现场的设计可复用于各类字符串操作。01参数传递—主程序用LEASI,STRING将字符串首地址装入SI,子程序通过[SI]逐字节访问字符02长度计算—循环读取字符并与'$'比较,CX作为计数器每次加1,遇到'$'时CX即为字符串长度03现场保护—入口PUSHAX和PUSHSI保存原值,出口前POPSI和POPAX恢复,保证调用者状态不变04返回值约定—子程序将结果放入CX返回,主程序调用后直接从CX读取长度,无需额外参数传递字符串长度子程序代码代码说明STRLENPROCNEAR子程序定义开始PUSHAX保护AX寄存器PUSHSI保护SI寄存器XORCX,CXCX清零作为计数器COUNT_LOOP:循环入口标号MOVAL,[SI]读取当前字符CMPAL,'$'判断是否为结束符JEDONE是结束符则退出循环INCCX长度计数加1INCSI指针移到下一字符子程序设计三要素:参数传递、现场保护、返回值规范ASSEMBLYMACRO宏定义与宏调用宏定义是汇编阶段的代码替换机制,宏调用在汇编时被展开为完整的指令序列。与子程序不同,宏没有调用和返回的运行时开销,但会导致代码体积膨胀。宏的定义与使用定义格式:宏名MACRO参数列表…宏体…EN
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 加气混凝土制品工岗前进阶考核试卷含答案
- 农业经理人安全宣传模拟考核试卷含答案
- 供水管道工岗前班组建设考核试卷含答案
- 2026年医师法解读培训课件(知识竞赛版)
- 2026年小儿喘息性肺炎健康宣讲
- 筒并摇工岗位知识评优考核试卷含答案
- 味精提取工变革管理考核试卷含答案
- 玻璃配料熔化工岗前纪律考核试卷含答案
- 中央空调清洗工绩效目标强化考核试卷含答案
- 化学农药生产工变革管理模拟考核试卷含答案
- 2026年广州市海珠区教育系统引进教育管理急需人才6人考前冲刺密卷及参考答案详解【满分必刷】
- 2026秋小学人音版音乐二年级上册(新教材)教学计划
- 国网运检培训课件
- 2024年高考数学全国一卷试题和答案
- 血液科护士与患者沟通技巧
- 绿色建筑认证
- 高职高专教育英语课程教学基本要求(试行)A级-附表四(词汇表)
- 普通高中英语课程标准(2017年版 2020年修订)词汇表
- 陕西省公路工程通用表格
- 辽宁众辉生物科技有限公司年产8500吨农药原药、8000吨医药农药中间体及副产生产项目环境影响报告书
- GB/T 10824-2022充气轮胎轮辋实心轮胎技术规范
评论
0/150
提交评论