第6章6.4汇编语言程序设计_第1页
第6章6.4汇编语言程序设计_第2页
第6章6.4汇编语言程序设计_第3页
第6章6.4汇编语言程序设计_第4页
第6章6.4汇编语言程序设计_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

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

文档简介

1、2014/076.4 8086微处理器汇编程序设计微处理器汇编程序设计 程序设计语言按照形式与功能的不同可分为三种,程序设计语言按照形式与功能的不同可分为三种,即机器语言、汇编语言和高级语言即机器语言、汇编语言和高级语言。 汇编源程序需翻译成机器语言,变成可执行文件,机器汇编源程序需翻译成机器语言,变成可执行文件,机器才能执行,这个翻译过程叫才能执行,这个翻译过程叫汇编汇编。高级语言中称该过程为高级语言中称该过程为“解释解释”或或“编译编译”。执行翻译。执行翻译的程序称为的程序称为“汇编程序汇编程序”。.ASM.OBJ.EXE编译编译连接连接汇编汇编(编译编译)程序:程序: MASM.EXE2

2、014/076.4.1 8086微处理器汇编伪指令微处理器汇编伪指令1、伪指令的语句格式、伪指令的语句格式1 1)标号)标号 目标名后面不能用冒号目标名后面不能用冒号“:”,标号名可以是,标号名可以是常量名、常量名、变量名、过程名、结构名、记录名变量名、过程名、结构名、记录名等。标号名表示一个常等。标号名表示一个常量或存储器量或存储器地址地址。2014/072)伪指令)伪指令 如定义数据伪指令如定义数据伪指令DB,DW,DD;段定义伪指令;段定义伪指令SEGMENT;定义过程伪指令;定义过程伪指令PROC;。它们是伪指令。它们是伪指令语句要求汇编程序完成的具体操作命令。语句要求汇编程序完成的具

3、体操作命令。3)操作数)操作数 操作数可以是一个操作数可以是一个常数(二进制、十进制、十六进制常数(二进制、十进制、十六进制等)、字符串、常量名、变量名、标号等)、字符串、常量名、变量名、标号、一些专用的符号、一些专用的符号(如(如BYTE,FAR,PARA等)。等)。4)注释)注释 必须以分号为开始,它的作用与指令语句的注释字段必须以分号为开始,它的作用与指令语句的注释字段相同。相同。2014/072、常数、变量和标号、常数、变量和标号1 1)常数)常数 常数是没有任何属性的常数是没有任何属性的纯数值纯数值。2 2)变量)变量 变量是代表存放在某些存储单元的数据,常以变量变量是代表存放在某些

4、存储单元的数据,常以变量名的形式出现在程序中,它可以认为是存放数据的名的形式出现在程序中,它可以认为是存放数据的存储单存储单元地址元地址。3 3)标号)标号 标号是一条标号是一条指令目标代码的地址指令目标代码的地址,它常作为转移指,它常作为转移指令(含子程序调用指令)的操作数。令(含子程序调用指令)的操作数。 2014/073、运算符、运算符1)SEG 功能是求符号名所在段的段基址。功能是求符号名所在段的段基址。2)OFFSET 功能是求符号名所在段的偏移地址。功能是求符号名所在段的偏移地址。3)TYPE 功能是获得符号名类型值。功能是获得符号名类型值。4)SIZE 功能是获得为符号名分配的字

5、节数。功能是获得为符号名分配的字节数。5)PTR 功能是定义符号名为新类型。功能是定义符号名为新类型。2014/07名字名字 EQUEQU 表达式表达式名字名字 = = 表达式表达式 给名字定义一个值或其他符号名或一条可执行语句,凡给名字定义一个值或其他符号名或一条可执行语句,凡是出现该名字的地方就用定义的数据替代。是出现该名字的地方就用定义的数据替代。 用用EQU赋值的名字赋值的名字不能重新赋值不能重新赋值,但,但可用可用PURGE释放释放后重新定义。后重新定义。例:例: TIMES TIMES EQU 50EQU 50 BUF DB BUF DB TIMES TIMES DUP(?)DUP

6、(?) ALPHAALPHA EQU 256 EQU 256 BETA = BETA = ALPHAALPHA-2-21 1)等价定义伪指令)等价定义伪指令4、伪指令、伪指令2014/071. DB:定义字节,其后的每个操作数占有一个字节单元,定义字节,其后的每个操作数占有一个字节单元,连续存放。连续存放。BUFFER DB 2, 3, 505H03H02HBUFFER2. DW:定义字,其后的每个操作数定义字,其后的每个操作数占有两个字节;占有两个字节;BUF DW 2, 3, 505H00H00H03H00H02HBUF2 2)内存数据定义伪指令)内存数据定义伪指令2014/073. DD

7、: 定义双字,其后每个操作数占定义双字,其后每个操作数占4个字节。个字节。4. 若仅保留单元,不初始化,用若仅保留单元,不初始化,用 ? 代替初值;代替初值; 若数据重复,用若数据重复,用 n DUP( )代替,代替,n为重复次数。为重复次数。STRING DD 2, 3, 5ARRAY DB 100 DUP(?) 保留保留100个字节,首地址为个字节,首地址为ARRAY,不初始化,不初始化,即即100个字节内均为随机值。个字节内均为随机值。2014/073 3)段定义伪指令)段定义伪指令 SEGMENT 定位定位 组合组合 类别类别 属性属性 ;段体;段体 ENDS注意注意:1.1.完整段定

8、义由完整段定义由SEGMENTSEGMENT和和ENDSENDS这一对伪指令实现这一对伪指令实现2.2.指令后的指令后的4 4个关键字个关键字用于确定段的各种用于确定段的各种属性属性3.3.如不指定,则采用默认参数;如不指定,则采用默认参数;用途:用途: 在汇编语言程序中定义逻辑段,指定段的名称和范围,在汇编语言程序中定义逻辑段,指定段的名称和范围,并指明段的定位类型、组合类型及类别。并指明段的定位类型、组合类型及类别。1. 段定义段定义 SEGMENT/ENDS 2014/07 定位类型:定位类型:规定逻辑段的起始地址要求。规定逻辑段的起始地址要求。方方 式式PARAPARA:逻辑段地址从段

9、边界开始逻辑段地址从段边界开始BYTEBYTE:逻辑段地址从字节边界开始逻辑段地址从字节边界开始WORDWORD:逻辑段地址从字边界开始逻辑段地址从字边界开始PAGEPAGE:逻辑段地址从页边界开始逻辑段地址从页边界开始以上以上4 4种边界如下所示:种边界如下所示: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 PAGEPAGE 0 0 0 0 0 0 0 0 PARAPARA 0 0 WORDWORD BYTEBYTE2014/07 组合类型:组合类型: 规定本段与其他段的关系规定本段与其他段的关系NONENONE: 与其他段在逻辑上没有关系。与其他段在逻辑上没有关系。PU

10、BLICPUBLIC:与其它同名、同类别的段相邻地连在一起。与其它同名、同类别的段相邻地连在一起。STACKSTACK: 此段为堆栈段,连接方式与此段为堆栈段,连接方式与PUBLICPUBLIC相同。相同。 类别:类别: 需用单引号括起来,凡是类型名相同的段在连接时需用单引号括起来,凡是类型名相同的段在连接时均按先后顺序连接起来。均按先后顺序连接起来。 属性类型:属性类型:规定规定16位段或位段或32位段。位段。 注意:注意:大多数大多数MASMMASM程序使用程序使用 codecode、datadata和和stackstack来分别指名代码段、数据段和堆栈段。来分别指名代码段、数据段和堆栈段

11、。2014/07ASSUME :NOTHING ;取消段性质的;取消段性质的规定。规定。4 4)指定段址伪指令)指定段址伪指令 ASSUME ASSUME ASSUME :,:功能功能:告诉汇编程序在汇编时,:告诉汇编程序在汇编时,段寄存器段寄存器CS:DS:SS:和和ES:应具有的应具有的符号段基址符号段基址,但是段寄存器,但是段寄存器实际值实际值(CS除外)还要有传送指令在执行程序时赋值。除外)还要有传送指令在执行程序时赋值。 ASSUME CS: CODE,DS: DATA,SS: STACK 2014/07 过程名过程名 PROC NEAR/FAR RET 过程名过程名 ENDP 功能

12、:把具有独立功能的程序段定义为过程功能:把具有独立功能的程序段定义为过程, ,供其它程序调用。供其它程序调用。 对过程的调用要使用对过程的调用要使用CALL语句,如:语句,如: CALL 过程名过程名 如果在过程定义中没有写明是如果在过程定义中没有写明是NEAR过程或过程或FAR过程,则过程,则汇编器将这个过程默认为汇编器将这个过程默认为NEAR过程。过程。5 5)过程定义伪指令)过程定义伪指令2014/076 6)模块定义伪指令)模块定义伪指令1. 模块开始模块开始伪指令伪指令格式:格式:NAME 模块名模块名功能:功能:指明程序模块的开始,并指出模块名,一般取源程序文指明程序模块的开始,并

13、指出模块名,一般取源程序文件名为模块名。件名为模块名。2. 模块结束模块结束伪指令伪指令格式:格式:END 启动标号或过程名启动标号或过程名功能功能:告诉汇编程序源文件结束,并给出执行程序的入口位置。:告诉汇编程序源文件结束,并给出执行程序的入口位置。2014/07例:例:MYDATA SEGMENT ; 定义数据段起始语句定义数据段起始语句 ; 定义数据定义数据MYDATA ENDS; 定义数据段终止语句定义数据段终止语句MYCODE SEGMENT ; 定义代码段起始语句定义代码段起始语句ASSUME CS:MYCODE,DS:MYDATA; 约定段寄存器和段的关系约定段寄存器和段的关系S

14、TART: MOV AX,MYDATA; 装填相应的段寄存器装填相应的段寄存器MOV DS,AX ; 完成所需功能的程序段完成所需功能的程序段MYCODE ENDS; 定义代码段终止语句定义代码段终止语句END START; 程序结束程序结束2014/071. 定位定位伪指令伪指令格式格式:ORG 功能功能:把以下语句定义的内存数据或程序,从表达式指定的:把以下语句定义的内存数据或程序,从表达式指定的起点(偏移地址)开始连续存放,直至遇到新的起点(偏移地址)开始连续存放,直至遇到新的ORG指指令。表达式值是一个令。表达式值是一个无符号数无符号数2. 列表列表伪指令伪指令格式格式:PAGE 行数

15、,行字数行数,行字数功能功能:为列表文件定义每页行数(:为列表文件定义每页行数(10255)和每行字符)和每行字符数(数(60132),默认值是),默认值是66行,行,80列列7)其它伪指令)其它伪指令2014/07在汇编程序中,如果用户程序要与输入输在汇编程序中,如果用户程序要与输入输出设备打交道,就要调用现成的程序,出设备打交道,就要调用现成的程序,这些程序这些程序是是DOS系统的一部分,随着系统的一部分,随着DOS系统驻留内存,系统驻留内存,用户需要按照这些程序要求的接口格式调用。用户需要按照这些程序要求的接口格式调用。 返回操作的用返回操作的用DOS系统调用中断指令:系统调用中断指令:

16、INT 21H,在用户程序结束时,用下面两条指令:,在用户程序结束时,用下面两条指令: MOV AH, 4CH INT 21H6.4.2 DOS系统功能调用系统功能调用2014/07 8086指令系统中,每执行一条软中断指令指令系统中,每执行一条软中断指令INT n,就,就调用一个相应的中断服务程序。当调用一个相应的中断服务程序。当n=51FH时,调用时,调用BIOS中的服务程序,当中的服务程序,当n=203FH时,调用时,调用DOS中的服中的服务程序。其中,务程序。其中,INT 21H是一个具有多种功能的服务程序,是一个具有多种功能的服务程序,一般称之为一般称之为DOS系统功能调用。系统功能

17、调用。1、DOS软中断软中断 DOS软中断功能见表软中断功能见表6-16,矢量号为,矢量号为20H27H。2014/07地址(地址(矢量号矢量号(中断名称中断名称地址(地址(矢量号(矢量号(中断名称中断名称00除以零除以零6018常驻常驻41单步单步6419引导程序入口引导程序入口82不可屏蔽不可屏蔽681A时间调用时间调用C3断点断点6C1B键盘键盘104溢出溢出701C定时器报时定时器报时145打印屏幕打印屏幕741D显示器参数表显示器参数表186保留保留781E软盘参数表软盘参数表1D7保留保留7C1F字符点阵结构参数表字符点阵结构参数表208定时器定时器8020程序结束,返回程序结束,

18、返回249键盘键盘8421DOS28A保留保留8822结束地址结束地址2CB串口串口8C23CTRL-BREAK30C串口串口9024标准错误出口地址标准错误出口地址34D硬盘硬盘9425绝对磁盘读绝对磁盘读38E软盘软盘9826绝对磁盘写绝对磁盘写3CF打印机打印机9C27程序结束,驻留内存程序结束,驻留内存4010视频显示视频显示A028为为4411设备配置检查调用设备配置检查调用10040保留保留4812存储器容量检查调用存储器容量检查调用18060为用户软中断保留为用户软中断保留4C13软盘软盘1A068不用不用5014通信通信20080BASIC5415盒式磁带盒式磁带21886BA

19、SIC5816键盘键盘3C4F1未用未用5C17打印机打印机 2014/07在汇编程序中最常用的是在汇编程序中最常用的是INT 21H中断入口,中断入口,也称为也称为DOS系统功能调用系统功能调用。这个中断入口中有许多。这个中断入口中有许多小程序,每个小程序都被编上号,固定完成某一种小程序,每个小程序都被编上号,固定完成某一种功能,调用时有一定的格式,因为对某一个小程序功能,调用时有一定的格式,因为对某一个小程序而言,输入条件而言,输入条件(入口参数入口参数)和输出结果和输出结果(出口参数出口参数)的的格式都是固定的。用户在使用时,既要格式都是固定的。用户在使用时,既要给出小程序给出小程序的编

20、号的编号(AH),又要按照其提供的格式进行调用,才,又要按照其提供的格式进行调用,才能正确完成操作。能正确完成操作。2、DOS系统功能调用(系统功能调用(INT 21H)2014/071) 1) 在显示器上显示单个字符在显示器上显示单个字符(2(2号功能号功能) )功能功能:在屏幕的光标处显示单个字符:在屏幕的光标处显示单个字符入口参数入口参数: 要显示字符的要显示字符的ASCIIASCII码放在码放在DLDL中中出口参数出口参数: 无无MOV DL, MOV DL, A AMOV AH, 2MOV AH, 2INT 21HINT 21H; ; 提供调用功能号提供调用功能号; ; 系统功能调用

21、系统功能调用; ; 在屏幕光标处显示字符在屏幕光标处显示字符A A运行至此,屏幕上当前光标处显示字符运行至此,屏幕上当前光标处显示字符A A2014/072) 2) 在屏幕上显示字符串在屏幕上显示字符串(9(9号功能号功能) )功能功能:在屏幕上当前光标处输出存储在内存数据段的一串字:在屏幕上当前光标处输出存储在内存数据段的一串字符串,该字符串以符串,该字符串以$ $结束。结束。入口参数入口参数: DS:DXDS:DX指向欲显示字符串的首址指向欲显示字符串的首址出口参数出口参数:无:无DATA SEGMENTDATA SEGMENT STRING DB STRING DB I am a stu

22、dent.$DATA ENDSDATA ENDSMOV DX, OFFSET STRINGMOV DX, OFFSET STRINGMOV AH, 9MOV AH, 9INT 21HINT 21H; ; 指向字符串首址指向字符串首址; ; 提供调用功能号提供调用功能号; ; 系统功能调用系统功能调用2014/073) 3) 带显示的键盘输入带显示的键盘输入(1(1号功能号功能) )功能功能:等待键盘输入,直到按下一个键。:等待键盘输入,直到按下一个键。入口参数入口参数: 无无出口参数出口参数: 键入键的键入键的ASCIIASCII码放在码放在ALAL中,并在屏幕上显示中,并在屏幕上显示该键。该

23、键。MOV AH, 1MOV AH, 1INT 21HINT 21HMOV 2000H, ALMOV 2000H, AL; ;提供调用功能号提供调用功能号; ;系统功能调用系统功能调用程序运行到此程序运行到此停下,等待用停下,等待用户键盘输入户键盘输入. .用户从键盘键入的键的用户从键盘键入的键的ASCIIASCII码进入码进入ALAL中中. .2014/074) 4) 不带显示的键盘输入不带显示的键盘输入(7(7号功能号功能) )功能功能:等待键盘输入,直到按下一个键。:等待键盘输入,直到按下一个键。入口参数入口参数: 无无出口参数出口参数: 键入键的键入键的ASCIIASCII码放在码放在

24、ALAL中,但在屏幕上没有中,但在屏幕上没有显示,常用于输入密码。显示,常用于输入密码。MOV AH, 7MOV AH, 7INT 21HINT 21HMOV 2000H, MOV 2000H, ALAL; ; 提供调用功能号提供调用功能号; ; 系统功能调用系统功能调用程序运行到此程序运行到此停下,等待用停下,等待用户键盘输入户键盘输入用户从键盘键入的键的用户从键盘键入的键的ASCIIASCII码进入码进入ALAL中中该功能与1号功能类似,只是输入的字符不在屏幕上显示。2014/075) 5) 字符串输入字符串输入(10(10号功能号功能) )功能功能:等待从键盘输入一串字符到存储区的数据段

25、,直到按下:等待从键盘输入一串字符到存储区的数据段,直到按下回车结束输入。回车结束输入。入口参数入口参数:DS:DXDS:DX指向接收字符串的内存地址的首址,该地址的指向接收字符串的内存地址的首址,该地址的第一个字节是第一个字节是由用户设置由用户设置的可输入字符串的的可输入字符串的最大字符数最大字符数( (含回车含回车) )出口参数出口参数:存放输入字符串存储区的第二个字节是:存放输入字符串存储区的第二个字节是实际输入的实际输入的字符数字符数( (不含回车不含回车) ),实际输入的字符串实际输入的字符串从该存储区的从该存储区的第三个字第三个字节处开始存放节处开始存放。2014/07DATA S

26、EGMENT BUF DB 20, 20 DUP(?)DATA ENDS LEA DX, BUF MOV AH, 0AH INT 21H14H14H程序运行到此停下,程序运行到此停下,等待用户键盘输入等待用户键盘输入若输入若输入ABCD后后BUFBUFDXDX04H04H41H41H42H42H43H43H44H44H实际字符个数实际字符个数开始存放开始存放2014/076) 6) 程序结束,返回程序结束,返回DOS( 4CDOS( 4C号功能号功能 ) )功能功能:将控制权移交:将控制权移交DOSDOS。入口参数入口参数:无:无出口参数出口参数:无:无MOV AH, 4CHMOV AH, 4

27、CHINT 21HINT 21H2014/07在屏幕上显示在屏幕上显示Whats your name?,用户输入自己的名字,用户输入自己的名字#后显示:后显示:Welcome #。 DATA SEGMENT MEG DB Whats your name ?, 10,13,$ MEG1 DB Welcome $ BUF DB 30, ? ,30 DUP(0)DATA ENDSCODE SEGMENT ASSUME CS: CODE, DS:DATAMAIN PROC FARSTART: MOV AX, DATA MOV DS, AX LEA DX, MEG MOV AH, 9 INT 21H L

28、EA DX, BUF MOV AH, 10 INT 21H LEA DX, MEG1 MOV AH, 9 INT 21H XOR BH, BH MOV BL, BUF+1 MOV BX+BUF+2, $ LEA DX, BUF+2 MOV AH, 9 INT 21H MOV AH, 4CH INT 21HMAIN ENDPCODE ENDS END START;输出字符串输出字符串;接受姓名接受姓名;输出输出Welcome;输出姓名输出姓名;返回返回DOS输入缓冲区以输入缓冲区以$结尾结尾显示字符串后回车换行显示字符串后回车换行2014/07 例:例:编程实现多字节加法,如编程实现多字节加法,

29、如 S=3B74AC60F8H+20D59E36C1HF8H60HACH74H3BHC1H36H9EHD5H20H被加数、和加数DATA1DATA2 2014/07CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS, AX MOV CX, 5 MOV SI, 0 CLC LOOPER:MOV AL, DATA2SI ADC DATA1SI,AL INC SI DEC CX JNZ LOOPER MOV AH, 4CH INT 21HCODE ENDS END STARTDATA SEGMENT DATA1 DB 0F8H

30、, 60H, 0ACH, 74H, 3BH DATA2 DB 0C1H, 36H, 9EH, 0D5H, 20H DATA ENDS2014/07特点特点:计算机执行程序的方式是:计算机执行程序的方式是“从头到尾从头到尾”逐条执行逐条执行指令语句,直至程序结束。指令语句,直至程序结束。1、 顺序结构程序设计顺序结构程序设计例例: 内存内存10050H单元的内容拆成两段,每段单元的内容拆成两段,每段4位,并将它们位,并将它们分别存入内存分别存入内存10051H和和10052H单元;即单元;即10050H单元中的低单元中的低4位放入位放入10051H单元的低单元的低4位,位, 10050H单元中的

31、高单元中的高4位放入位放入10052H单元的低单元的低4位,而位,而10051H和和10052H单元的高单元的高4位均为零。位均为零。6.4.3 8086微处理器汇编程序设计微处理器汇编程序设计2014/07流程图流程图:2014/07程序程序:DATA SEGMENT ORG 50HData1 DB 7AHData2 DB ?Data3 DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATACODE ENDS ENDSTART ?2014/07程序程序:START: MOV AX, DATA MOV DS, AX LEASI, Data1;需拆字节

32、的指针(需拆字节的指针(SI)=50H MOVAL, SI;取一个字节取一个字节(AL) MOV BL,AL;(BL)(AL),内容备份,内容备份 ANDAL, 0FH;(AL)的前的前4位清位清0 LEASI, Data2;(SI)=51H MOVSI, AL;把得到的后把得到的后4位位(10051H) MOVAL, BL;再取出需拆字节再取出需拆字节(AL) MOVCL, 4 SHRAL, CL;逻辑右移逻辑右移4次,前次,前4位补位补0 LEASI, Data3;(SI)=52H MOVSI, AL;(10052H)(AL)2014/07 利用利用条件转移指令条件转移指令,使程序执行到某

33、一指令后,使程序执行到某一指令后,根据条件(即上面运算的情况)是否满足,改变程根据条件(即上面运算的情况)是否满足,改变程序执行的次序。序执行的次序。特点特点:先用比较指令、数据操作、位测指令等改:先用比较指令、数据操作、位测指令等改变标志寄存器各个标志位,然后用条件转移指变标志寄存器各个标志位,然后用条件转移指令进行分支。令进行分支。例:例:求求AX累加器和累加器和BX寄存器中两个无符号数之寄存器中两个无符号数之差的绝对值,结果放在内存差的绝对值,结果放在内存2800H单元中。单元中。 2、分支程序设计、分支程序设计2014/07开始初始化:清除CFAX-BXAXAX-BX0?AX内存(28

34、00H)和(2801H)单元BX-AXBXBX内存(2800H)和(2801H)单元暂停是否流程图流程图:2014/07CODE SEGMENT ASSUME CS:CODE, DS:DATA MOV AX, DATA MOV DS, AXCODE ENDS END CLC MOV CX, AX SUBAX, BX JCAA MOV DI, 2800H MOV DI, AXLP: JMPLPAA: SUBBX, CX MOVDI, 2800H MOVDI, BX;清除;清除CF;AX(AXBX),影响影响CF;CF=1转转AA去执行(去执行(AXBX);结果指针;结果指针DI2800H;结果送

35、到;结果送到2800H和和2801H单元单元;暂停;暂停;BX(BXCX) 2014/07例例:编制程序编制程序 从外设从外设71H端口端口中取一中取一个数个数M,判断其值是否,判断其值是否在在10和和20之间,即之间,即10M20。如果如果M20,则送,则送0FFH给给外设外设73H端口端口;如果如果M10,则送,则送00H给给外外设设73H;如果如果10M20,则送,则送88H给给外设外设73H 。开始开始暂停暂停输出输出BL值到值到73号外设去号外设去输入输入71号外号外设的值设的值 AL令令BL=88H令令BL=00H令令BL=0FFHAL值值 20AL值值 10是是是是否否否否LP1

36、LP22014/07START: IN AL,71H;将;将71H端口的字节读入端口的字节读入AL CLC;清除;清除CF CMP AL,10;ALAL10 JC Lw10;小于;小于10转转LP1 CMP AL,20;ALAL20 JC L10to20 ;10AL1,并,并且放在内存且放在内存2001H单元中,单元中,而数据块本身是从而数据块本身是从2002H单单元开始存放的,最后,把找元开始存放的,最后,把找出的最大值放出的最大值放到到2000H单元单元中,假设这段数据块中的数中,假设这段数据块中的数都是无符号的都是无符号的8位数。位数。开始开始暂停暂停SI=2001H,CL=SI00 A

37、L , SI SI+1修改指针修改指针SI SI+1是是否否CX CX-1CX=0AL SIAL值值 SIAL 2000H是是否否LP程序程序:ST : MOV SI,2001HMOV CX,SIINC SIMOV AL,00HLP:CLCCMP AL,SIJNCAAMOV AL,SIAA:INC SILOOPLPMOV 2000H,AL2014/07CALLRET4、子程序设计、子程序设计 1)子程序调用与返回)子程序调用与返回2014/072)子程序设计注意问题)子程序设计注意问题(1 1)现场保护和恢复)现场保护和恢复 为避免冲突,应在进入过程时,将该过程所用到的寄存器内为避免冲突,应在

38、进入过程时,将该过程所用到的寄存器内容保护起来,称为保护现场。而从过程返回主程序前,再将这些容保护起来,称为保护现场。而从过程返回主程序前,再将这些寄存器的内容恢复,称为恢复现场。寄存器的内容恢复,称为恢复现场。 保护现场和恢复现场通常分别用堆栈压入指令和弹出指令来保护现场和恢复现场通常分别用堆栈压入指令和弹出指令来实现。例如:实现。例如:2014/07(2 2)参数传递:)参数传递:寄存器传递寄存器传递存储单元(参数表)传递存储单元(参数表)传递堆栈传递堆栈传递2014/07 例:例:AX寄存器中存放着寄存器中存放着4位十六进制数,将这位十六进制数,将这4位十六进制数位十六进制数分别转换为相

39、应的分别转换为相应的ASCII码,并依次存放到码,并依次存放到RESULT数组的数组的4个字节中,要求子程序方法实现。个字节中,要求子程序方法实现。DATA SEGMENT DA1 DW 3D7EH RESULT DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX, DATAMOV DS, AX2014/07MOV CX, 4LEA SI, DA1LEA DI, RESULTMOV BX, SINEXT:MOV AX, BXAND AL, 0FHCALL ASCMOV DI, ALINC DIPUSH CXMOV CX, 4SHR BX, CLPOP CXLOOP NEXT十六进制转换成十六进制转换成ASCII码子程序码子程序 ASC PROC CMP AL, 0AHJB PL30ADD AL, 07HPL30: ADD AL,

温馨提示

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

评论

0/150

提交评论