版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、钱晓捷,微机原理与接口技术钱晓捷,微机原理与接口技术第第4 4版版基于基于IA-32IA-32处理器和处理器和3232位汇编语言位汇编语言第第 4 4 章章汇编语言程序设计汇编语言程序设计4.1 4.1 分支程序结构分支程序结构4.2 4.2 循环程序结构循环程序结构4.3 4.3 子程序结构子程序结构4.4 Windows4.4 Windows应用程序编程应用程序编程4.5 4.5 与与C+C+语言的混合编程语言的混合编程微机原理与接口技术第4版机械工业出版社2教学重点教学重点三种结构程序设计三种结构程序设计 顺序结构顺序结构 分支结构分支结构 循环结构循环结构 微机原理与接口技术第4版机械
2、工业出版社知识点知识点4.1 4.1 汇编语言的格式汇编语言的格式4.2 4.2 语句行的构成语句行的构成4.3 4.3 指示性语句指示性语句4.4 4.4 指令语句指令语句4.5 4.5 汇编语言程序设计及举例汇编语言程序设计及举例微机原理与接口技术第4版机械工业出版社汇编是把汇编语言程序翻译成机器语言描述的汇编是把汇编语言程序翻译成机器语言描述的目标程序的过程。目标程序的过程。汇编程序是完成汇编任务的程序。汇编程序是完成汇编任务的程序。用汇编语言编写的程序。用汇编语言编写的程序。2 2汇编程序汇编程序连接程序的主要功能是把多个目标文件及库文件连连接程序的主要功能是把多个目标文件及库文件连接
3、在一起形成可执行文件。接在一起形成可执行文件。3 3连接程序连接程序 1.汇编语言源程序汇编语言源程序微机原理与接口技术第4版机械工业出版社汇编语言源程序汇编语言源程序汇编汇编目标程序目标程序连接连接可执行程序可执行程序从汇编语言源程序到可执行程序的生成过从汇编语言源程序到可执行程序的生成过程如图所示。程如图所示。微机原理与接口技术第4版机械工业出版社4.1汇编语言源程序格式汇编语言源程序格式下面是一个示范性的完整的汇编语言源程下面是一个示范性的完整的汇编语言源程序。序。微机原理与接口技术第4版机械工业出版社; ;lt301b.asmlt301b.asm(文件名)(文件名)stackstack
4、segment stacksegment stack; ;定义堆栈段定义堆栈段dw 512 dup(?)dw 512 dup(?); ;堆栈段有堆栈段有512512字(字(10241024字节)空间字节)空间stackstackendsends; ;堆栈段结束堆栈段结束datadatasegmentsegment; ;定义数据段定义数据段stringstring db db Hello, Everybody !Hello, Everybody !,0dh,0ah,0dh,0ah,$ $datadataendsendscodecodesegment segment codecode ; ;定义代
5、码段定义代码段assume cs:code,ds:data,ss:stackassume cs:code,ds:data,ss:stackstart:start: mov ax,datamov ax,data; ;建立建立DSDS段地址段地址mov ds,axmov ds,ax微机原理与接口技术第4版机械工业出版社mov dx,offset stringmov dx,offset stringmov ah,9mov ah,9int 21hint 21hmov ax,4c00hmov ax,4c00hint 21hint 21h; ;利用功能调用返回利用功能调用返回DOSDOScodecodee
6、ndsends; ;代码段结束代码段结束end start end start ; ;汇编结束汇编结束微机原理与接口技术第4版机械工业出版社汇编语言源程序格式汇编语言源程序格式完整的汇编语言源程序由若干个段组完整的汇编语言源程序由若干个段组成成源程序中段的数目可以根据实际需要源程序中段的数目可以根据实际需要而定,但其中必不可少的是而定,但其中必不可少的是每个段由若干个语句行构成每个段由若干个语句行构成微机原理与接口技术第4版机械工业出版社汇编语言源程序格式汇编语言源程序格式NAME1 SEGMENT 语句语句 语句语句NAME1 ENDSNAME2 SEGMENT 语句语句 语句语句NAME2
7、 ENDS END .微机原理与接口技术第4版机械工业出版社汇编语言源程序语句行的格式汇编语言源程序语句行的格式 汇编语言源程序中的每个语句行可以由四项组成,汇编语言源程序中的每个语句行可以由四项组成,格式如下:格式如下: 若操作数项有多个操作数,则操作数之间使用若操作数项有多个操作数,则操作数之间使用逗号分隔逗号分隔各部分之间至少用一个空格作为间隔各部分之间至少用一个空格作为间隔名字名字 操作码操作码 操作数操作数 ;注释注释 带方括号的项是带方括号的项是可选项可选项 微机原理与接口技术第4版机械工业出版社名字项名字项名字项是指一个标号、变量、段名或过程名等。名字项是指一个标号、变量、段名或
8、过程名等。 微机原理与接口技术第4版机械工业出版社操作码项操作码项操作码项是一个操作码的助记符,它可以是操作码项是一个操作码的助记符,它可以是指令指令、伪指令伪指令或或宏指令名宏指令名。 微机原理与接口技术第4版机械工业出版社操作数项操作数项操作数项提供为执行所要求的操作而需要的信息。操作数项提供为执行所要求的操作而需要的信息。操作数项可以是常数、寄存器、标号、变量或由表操作数项可以是常数、寄存器、标号、变量或由表达式组成。达式组成。 微机原理与接口技术第4版机械工业出版社注释项注释项注释项用来说明程序或语句的功能。注释项用来说明程序或语句的功能。;为识别为识别注释项的开始。注释项的开始。;也
9、可以从一行的第一个字符也可以从一行的第一个字符开始,此时整行都是注释,常用来说明下面一段开始,此时整行都是注释,常用来说明下面一段程序的功能。程序的功能。 在调试程序过程中可适当使用在调试程序过程中可适当使用“;”微机原理与接口技术第4版机械工业出版社4.2 4.2 语句行的构成语句行的构成4.2.1 标记标记1、IBM宏汇编的字符集宏汇编的字符集(1)字母)字母大写字母大写字母小写字母小写字母(2)数字)数字0、1 9(3)特殊字符)特殊字符 图图4-12、界符、界符 图图4-2语句中有了界符,可以不用分隔符。语句中有了界符,可以不用分隔符。微机原理与接口技术第4版机械工业出版社3、常量、常
10、量常量是指常量是指汇编时已经有确定数值的量汇编时已经有确定数值的量它又分成多种形式:它又分成多种形式:(1)十进制常十进制常量量(2)十六进制十六进制常常量量(3)二进制常二进制常量量(4)八进制常八进制常量量(5)字符串常字符串常量量微机原理与接口技术第4版机械工业出版社用单引号或双引号括起来的单个字符或用单引号或双引号括起来的单个字符或多个字符,其数值是每个字符对应的多个字符,其数值是每个字符对应的ASCII码的值码的值例如:例如:d ABHello, Everybody !字符串常量字符串常量 微机原理与接口技术第4版机械工业出版社标识符标识符(Identifier)一般最多由)一般最多
11、由个字母、个字母、数字及规定的特殊符号(如数字及规定的特殊符号(如 _、$、?、)组)组成,成,。一个程序中,每个标识符的定义是一个程序中,每个标识符的定义是的,的,还不能是汇编语言采用的保留字还不能是汇编语言采用的保留字4、标识符、标识符由由的、的、的字符序列。的字符序列。微机原理与接口技术第4版机械工业出版社5、保留字保留字(保留字(Reserved Word)是汇编程序已)是汇编程序已经利用的标识符,主要有:经利用的标识符,主要有:o 指令语句助记符指令语句助记符例如:例如:MOV、ADDo 伪指令语句助记符伪指令语句助记符例如:例如:DB、EQUo 操作符操作符例如:例如:OFFSET
12、、PTRo 寄存器名寄存器名例如:例如:AX、CS第3章IBM宏汇编中的保留字见宏汇编中的保留字见P86表表41微机原理与接口技术第4版机械工业出版社6 6、注释、注释以以“;”打头。打头。微机原理与接口技术第4版机械工业出版社4.2.2 4.2.2 符号符号1 1、寄存器、寄存器微机原理与接口技术第4版机械工业出版社2 2、变量、变量存放在存储单元中的操作数是变量。在程存放在存储单元中的操作数是变量。在程序中出现的是存储单元地址的符号。序中出现的是存储单元地址的符号。微机原理与接口技术第4版机械工业出版社变量名变量名是变量名是存储单元存储单元的的命名规则:命名规则: 遵守标识符的命名规则遵守
13、标识符的命名规则微机原理与接口技术第4版机械工业出版社变量的属性变量具有以下三种属性:变量具有以下三种属性: 段值段值名字对应存储单元的段地址名字对应存储单元的段地址 偏移值偏移值名字对应存储单元的偏移地址名字对应存储单元的偏移地址 类型类型变量名的类型可以是变量名的类型可以是BYTE(字节)、(字节)、WORD(字)和(字)和DWORD(双字)等(双字)等微机原理与接口技术第4版机械工业出版社变量的定义变量的定义变量一般在除代码段以外的其他段定义。变量一般在除代码段以外的其他段定义。变量需定义才能被引用变量需定义才能被引用变量用数据定义语句变量用数据定义语句等定义等定义微机原理与接口技术第4
14、版机械工业出版社3、标号标号是标号是存储单元存储单元的的命名规则:命名规则: 遵守标识符的命名规则遵守标识符的命名规则微机原理与接口技术第4版机械工业出版社标号的属性标号具有以下三种属性:标号具有以下三种属性: 段值段值标号对应存储单元的段地址标号对应存储单元的段地址 偏移值偏移值标号对应存储单元的偏移地址标号对应存储单元的偏移地址 类型类型标号类型可以是标号类型可以是NEAR(近)和(近)和FAR(远)(远),分别表示段内或段间,分别表示段内或段间微机原理与接口技术第4版机械工业出版社标号的定义和引用标号在标号在定义和引用定义和引用LOOP1: MOV AL,SI . . . JMP LOO
15、P1标号定义标号定义标号引用标号引用微机原理与接口技术第4版机械工业出版社变量和标号的区别不同:标号对应的存储单元中存放的是不同:标号对应的存储单元中存放的是指令,后面跟冒号;变量对应的存储单指令,后面跟冒号;变量对应的存储单元中存放的是数据,后面不跟冒号。元中存放的是数据,后面不跟冒号。相同:都是存储单元的符号地址。相同:都是存储单元的符号地址。微机原理与接口技术第4版机械工业出版社4 4、数、数利用一个标识符表达的一个数值利用一个标识符表达的一个数值常数若使用有意义的符号名来表示,可以常数若使用有意义的符号名来表示,可以提高程序的可读性,同时更具有通用性提高程序的可读性,同时更具有通用性微
16、机原理与接口技术第4版机械工业出版社符号常量实例符号常量实例符号定义符号定义DosWriteChar = 2CarriageReturn = 13符号应用(右边程序段等价左侧的符号形式)符号应用(右边程序段等价左侧的符号形式)mov ah,DosWriteChar ; mov ah,2mov dl,CarriageReturn ; mov dl,13微机原理与接口技术第4版机械工业出版社5 5、其他符号、其他符号指示性语句(伪指令)的操作码、宏指指示性语句(伪指令)的操作码、宏指令等令等 汇编语言大小写不敏感微机原理与接口技术第4版机械工业出版社4.2.3 4.2.3 表达式表达式后面介绍后面
17、介绍微机原理与接口技术第4版机械工业出版社4.2.4 4.2.4 语句语句汇编语言源程序中的语句有两种:指令语句汇编语言源程序中的语句有两种:指令语句和指示性语句(伪指令)。和指示性语句(伪指令)。指令语句指令语句使使CPUCPU产生动作、并在产生动作、并在的语句,就是第的语句,就是第3 3章学章学习的指令习的指令(DirectiveDirective)不产生不产生CPUCPU动作、在动作、在程序执行前由汇编程序处理程序执行前由汇编程序处理的说明性语句,例如,数据说明、变的说明性语句,例如,数据说明、变量定义等等量定义等等微机原理与接口技术第4版机械工业出版社两种语句的格式两种语句的格式标号标
18、号: 指令语句助记符指令语句助记符 操作数操作数,操作数;注释操作数;注释名字名字 伪指令助记符伪指令助记符 参数参数,参数参数,;注释;注释指令语句格式:指令语句格式:伪指令格式:伪指令格式:两种语句在格式两种语句在格式上的主要区别上的主要区别微机原理与接口技术第4版机械工业出版社 4.3 4.3 指示性语句指示性语句( (伪指令语句)伪指令语句)符号定义语句符号定义语句数据定义语句数据定义语句段定义语句段定义语句过程定义语句过程定义语句结束语句结束语句微机原理与接口技术第4版机械工业出版社4.3.1 4.3.1 符号定义语句符号定义语句EQUEQU= =PURGEPURGE微机原理与接口技
19、术第4版机械工业出版社1、等值语句EQU语句格式:语句格式: 符号名符号名 EQU 表达式表达式功能:给符号名定义一个值,或定义为别的符号功能:给符号名定义一个值,或定义为别的符号名,甚至可以定义为一条可执行的指令。名,甚至可以定义为一条可执行的指令。如:如:ABC EQU 220 XYZ EQU ABC COUNT EQU CX CBD EQU ADD EQU语句在未解除之前,不能重新定义。语句在未解除之前,不能重新定义。如:如:ABC EQU 220 ABC EQU 330 错误!错误!微机原理与接口技术第4版机械工业出版社2、解除语句、解除语句PURGE功能:用来解除已用功能:用来解除已
20、用EQU语句定义的符号,解除语句定义的符号,解除后的符号可以重新定义。后的符号可以重新定义。如:如:PURGE ABC ABC EQU 330PURGE的格式为的格式为: PURGE 符号符号1,符号,符号2,.,符号,符号n微机原理与接口技术第4版机械工业出版社3、等号语句语句格式:语句格式: 符号名符号名=表达式表达式功能功能:与与EQU语句类似,但是能对符号进行重新语句类似,但是能对符号进行重新定义。定义。如:如:EMP=6 EMP=7 EMP=EMP+1微机原理与接口技术第4版机械工业出版社4.3.2 4.3.2 数据定义语句数据定义语句格式格式: 变量名变量名 伪操作符伪操作符 操作
21、数操作数1,操作数操作数2, . . . ;注释注释功能:定义一个变量的类型,给存储器赋初值,或功能:定义一个变量的类型,给存储器赋初值,或者仅仅给变量分配存储单元,而不赋予特定的值。者仅仅给变量分配存储单元,而不赋予特定的值。变量名可以没有。这种情况,汇编程序将直接为操作变量名可以没有。这种情况,汇编程序将直接为操作数分配空间,无符号地址。设置变量名是为了方便存数分配空间,无符号地址。设置变量名是为了方便存取它指示的存储单元取它指示的存储单元汇编程序将把所定义的数据按先后次序连续分配存汇编程序将把所定义的数据按先后次序连续分配存储空间,所起的名字也只代表储空间,所起的名字也只代表的偏的偏移地
22、址。移地址。微机原理与接口技术第4版机械工业出版社常用伪操作符DB(Define Byte) 定义字节定义字节 DW (Define Word) 定义字定义字DD (Define Double Word) 定义双字定义双字 DQ (Define Quadword) 定义四个字定义四个字DT (Define Tenbyte) 定义十个字节定义十个字节操作数可以是常数、表达式、字符串或重复操操作数可以是常数、表达式、字符串或重复操作符作符DUP,不能是寄存器名不能是寄存器名.微机原理与接口技术第4版机械工业出版社例例1 DATA SEGMENTDATA _BYTE DB 10, 4, 10H, ?
23、 DATA_WORD DW 100, 100H, -5 DATA_DW DD 3*20, 0FFFDHDATA_ASC DB ABDATA_WORD1 DW ABDATA ENDS说明说明: :(1)(1)操作数操作数?, ?, 不放入任何数不放入任何数, ,仅保留存储空间仅保留存储空间.(2).(2)操作数在内存中所占操作数在内存中所占的字节数与伪操作符所定义的字节数一的字节数与伪操作符所定义的字节数一致致.(3).(3)操作数在汇编后以补码形式存放操作数在汇编后以补码形式存放. .(4 4)只有用)只有用DBDB定义时,才允许字符串的定义时,才允许字符串的长度超过长度超过2 2个字节。个字
24、节。DATA_BYTE0AH04H10H-64HDATA_WORD00H00H01HFBHFFHDATA_DW3CH00H00H00HFDH00HFFH00HDATA_ASC41H42H42H0000H0001H0002H0013H000AH0003H0004H0005H0006H0007H0008H0009H000BH000CH000DH000EH000FH0010H0011H0012H0014H41H0015HDATA_WORD1微机原理与接口技术第4版机械工业出版社例例2 DATA SEGMENT A DW M BUF DW BUF-A M DB 2 DUP(1), 2 DUP (2,
25、2 DUP(1, 2) D DD BUFDATA ENDS说明说明: :(1)(1)操作数为变量时操作数为变量时, ,则存放其地址。则存放其地址。若用若用DWDW定义,则存放其偏移地址;定义,则存放其偏移地址;若用若用DDDD定义,则存放其偏移地址和定义,则存放其偏移地址和段地址,第一个字为偏移地址,段地址,第一个字为偏移地址,第二个字为段地址第二个字为段地址. . (2)(2)重复操作符重复操作符DUPDUP可以嵌套可以嵌套. .重复操作符重复操作符DUP的格式:的格式:n DUP(初值(初值,初值,初值)括号中为重复的内容,括号中为重复的内容,n为重复的次数。为重复的次数。A04H00H0
26、2H00H01HBUF01H02H01H02H01HM02H02H00HDATA低低8位位0000H0001H0002H0013H000AH0003H0004H0005HDDATA高高8位位0006H0007H0008H0009H000BH000CH000DH000EH000FH0010H0011H0012H01H02H01H02H02H用用DW或或DD伪操作可以把变量或标号的偏移地址(伪操作可以把变量或标号的偏移地址(DW)或偏移地址和段地址(或偏移地址和段地址(DD)存入存储器。用)存入存储器。用DD伪操作伪操作存入地址时,第一个字为偏移地址,第二个字为段地址。存入地址时,第一个字为偏移地
27、址,第二个字为段地址。微机原理与接口技术第4版机械工业出版社定位伪指令ORG 语句格式:语句格式:ORG 常数表达式常数表达式功能:使下一个字节地址为成为常数表达式的值。功能:使下一个字节地址为成为常数表达式的值。如如: DSEG SEGMENT ORG 10 VECT1 DW 47A5H ORG 20 VECT2 DW 0C596H DSEG ENDS说明说明: 变量变量VECT1的偏移地址为的偏移地址为10,即即0AH, VECT2的偏移地址为的偏移地址为20,即即14H.微机原理与接口技术第4版机械工业出版社4.3.3 段定义语句语句格式语句格式: 段名段名 SEGMENT.段名段名 E
28、NDS功能:定义了一个以功能:定义了一个以SEGMENT伪指令开始,以伪指令开始,以 ENDS伪指令结束,以段名命名的存储段。伪指令结束,以段名命名的存储段。微机原理与接口技术第4版机械工业出版社假定伪指令语句格式语句格式: ASSUME 段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,. . .其中,段寄存器名必须是其中,段寄存器名必须是CS,DS,ES,SS中的一中的一个个 ,而段名必须是由,而段名必须是由SEGMENT定义的段中的段定义的段中的段名。名。功能:设定段寄存器与段之间的关系。功能:设定段寄存器与段之间的关系。ASSUME语句写语句写在代码段的一开始在代
29、码段的一开始ASSUME语句只是指定某个段由哪一个段寄存器寻址,语句只是指定某个段由哪一个段寄存器寻址,它并不能把段地址装入段寄存器中,所以在代码段的它并不能把段地址装入段寄存器中,所以在代码段的开始开始,还必须把段地址装入相应的段寄存器中。可以,还必须把段地址装入相应的段寄存器中。可以用用MOV指令实现。但是代码段不须这样做。指令实现。但是代码段不须这样做。微机原理与接口技术第4版机械工业出版社DATA SEGMENTDATA ENDSEXTRA SEGMENTEXTRA ENDSSTACK SEGMETSTACK ENDS .CODE SEGMENT.START: MOV SS,AXCOD
30、E ENDS END START.段名也就段名也就是段地址是段地址微机原理与接口技术第4版机械工业出版社4.3.44.3.4过程定义语句过程定义语句过程又称为子程序,是完成特定功能过程又称为子程序,是完成特定功能的一段程序的一段程序微机原理与接口技术第4版机械工业出版社(1)过程定义伪操作)过程定义伪操作功能:定义了一个以功能:定义了一个以PROC伪指令开始,以伪指令开始,以 ENDP伪指令结束,以过程名命名的过程。伪指令结束,以过程名命名的过程。格式:格式:过程名过程名 proc far/near . . .过程名过程名 endp微机原理与接口技术第4版机械工业出版社过程名过程名过程名是子程
31、序入口的符号地址(规定与标号相过程名是子程序入口的符号地址(规定与标号相同,但后面不跟冒号)。同,但后面不跟冒号)。(2)调用程序与子程序不在同一个代码段中调用程序与子程序不在同一个代码段中,用用far属性属性-NEAR,FAR(1)若调用程序与子程序在同一个代码段中若调用程序与子程序在同一个代码段中,用用near注意:过程中若不没有注明属性,则汇编程序注意:过程中若不没有注明属性,则汇编程序将它默认为将它默认为NEAR。微机原理与接口技术第4版机械工业出版社(2)过程的调用与返回过程的调用与返回以后介绍。以后介绍。微机原理与接口技术第4版机械工业出版社4.3.5 结束语句功能:标志着整个源程
32、序的结束,它告诉汇编程功能:标志着整个源程序的结束,它告诉汇编程序,没有更多的指令要汇编了。序,没有更多的指令要汇编了。语句格式:语句格式:END 微机原理与接口技术第4版机械工业出版社结束程序,返回结束程序,返回DOSDOS的方法一的方法一分为三个步骤分为三个步骤(1)(1)将程序开始启动运行的过程定义为一个将程序开始启动运行的过程定义为一个FARFAR过程过程. .(2)(2)在代码段的开始处安放以下三条指令在代码段的开始处安放以下三条指令, ,为程序结为程序结束运行束运行, ,正确返回正确返回DOSDOS做好准备做好准备: : PUSH DSPUSH DS MOV AX,0 MOV AX
33、,0 PUSH AX PUSH AX (3) (3)在程序结束返回在程序结束返回DOSDOS处安放一条处安放一条RETRET指令指令微机原理与接口技术第4版机械工业出版社结束程序,返回结束程序,返回DOS的方法二的方法二调用调用DOS的的4CH系统功能返回的方法系统功能返回的方法在程序结束后插入以下语句:在程序结束后插入以下语句:MOV AH,4CHINT 21H微机原理与接口技术第4版机械工业出版社4.4 4.4 指令语句指令语句留给大家自己看。留给大家自己看。微机原理与接口技术第4版机械工业出版社4.5 4.5 汇编语言程序设计及举例汇编语言程序设计及举例4.5.1直线程序设计直线程序设计
34、例例1 计算(计算(V-(X*Y+Z - 540)/X其中其中X、Y、Z、V均为均为16位带符号数,已分别装入位带符号数,已分别装入X、Y、Z、V单元中,要单元中,要求计算结果的商存入求计算结果的商存入R单元单元,余数存入,余数存入W单元单元。微机原理与接口技术第4版机械工业出版社59DATA SEGMENX DW 1234HR DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATABEGIN:MOV AX,DATAMOV DS,AxY DW 3456HZ DW 5678HV DW 7834HW DW ?微机原理与接口技术第4版机械工业出版社60MOV
35、AX,X ;被乘数存入;被乘数存入AXIMUL Y ;X*Y MOV CX,AX ;乘积的低位字存入;乘积的低位字存入CXMOV BX,DX ;乘积的高位字存入;乘积的高位字存入BXMOV AX,Z ;加数;加数Z存入存入AXCWD ;把;把Z扩展成双字扩展成双字ADD CX,AX ;乘积的低位字与;乘积的低位字与Z的低位字相加的低位字相加ADC BX,DX ;乘积与;乘积与Z的高位字和低位的进位相加的高位字和低位的进位相加SUB CX,540 ;(;(X*Y+Z)的低位字减去)的低位字减去540SBB BX,0 ;(;(X*Y+Z)的高位字减去低位的借位)的高位字减去低位的借位微机原理与接口
36、技术第4版机械工业出版社61MOV AX,V ;被减数;被减数V存入存入AXCWD ;把;把V扩展成双字扩展成双字SUB AX,CX ;V的低位字与(的低位字与(X*Y+Z-540)的低位字相减)的低位字相减SBB DX,BX ;V的高位字与(的高位字与(X*Y+Z-540)的高位字相减)的高位字相减IDIV X ;(;(V-(X*Y+Z-540)/XMOV R,AXMOV W,DXMOV AH,4CHINT 21HCODE ENDSEND BEGIN微机原理与接口技术第4版机械工业出版社4.1 4.1 分支程序结构分支程序结构改变程序执行顺序、形成分支、循环、调用改变程序执行顺序、形成分支、
37、循环、调用等程序结构是很常见的程序设计问题等程序结构是很常见的程序设计问题高级语言采用高级语言采用IFIF等语句表达条件,并根据条等语句表达条件,并根据条件是否成立转向不同的程序分支件是否成立转向不同的程序分支汇编语言需要汇编语言需要首先利用比较首先利用比较CMPCMP、测试、测试TESTTEST、加减、加减运算、逻辑运算等影响状态标志的运算、逻辑运算等影响状态标志的指令形成条件指令形成条件然后利用条件转移指令判断由标志然后利用条件转移指令判断由标志表达的条件表达的条件, ,并根据标志状态控制程序并根据标志状态控制程序转移到不同的程序段转移到不同的程序段微机原理与接口技术第4版机械工业出版社4
38、.1.1 4.1.1 无条件转移指令无条件转移指令程序代码在代码段程序代码在代码段CSCS:指明代码段在主存中的段基地址:指明代码段在主存中的段基地址EIPEIP:给出将要执行指令的偏移地址:给出将要执行指令的偏移地址程序顺序执行,处理器自动增量程序顺序执行,处理器自动增量EIPEIP程序控制转移,程序控制转移,EIPEIP随之改变随之改变程序转移到另外的代码段,程序转移到另外的代码段,EIPEIP和和CSCS都改变都改变控制转移类指令:改变控制转移类指令:改变EIPEIP(有些也改变(有些也改变CSCS),即改变程序执行顺序(实现程序控制),即改变程序执行顺序(实现程序控制转移)的指令转移)
39、的指令微机原理与接口技术第4版机械工业出版社1. 1. 转移范围转移范围段内转移段内转移在当前代码段范围内的程序转移在当前代码段范围内的程序转移不需更改不需更改CSCS,只要改变只要改变EIPEIP(偏移地址)(偏移地址)近转移(近转移(NearNear):3232位近转移位近转移NEAR32NEAR32,1616位近位近转移转移NEAR16NEAR16短转移(短转移(ShortShort):转移范围在:转移范围在127127-128-128字节字节段间转移段间转移从当前代码段跳转到另一个代码段从当前代码段跳转到另一个代码段需要更改需要更改CSCS(段地址)和(段地址)和EIPEIP(偏移地址
40、)(偏移地址)远转移(远转移(FarFar): 4848位远转移位远转移FAR32FAR32,3232位远转位远转移移FAR16FAR16微机原理与接口技术第4版机械工业出版社2. 2. 指令寻址方式指令寻址方式相对寻址方式相对寻址方式提供目标地址相对于当前指令指针提供目标地址相对于当前指令指针EIPEIP的位移量的位移量目标地址(转移后的目标地址(转移后的EIPEIP)当前)当前EIPEIP位移量位移量相对寻址都是段内转移,最常用、最灵活相对寻址都是段内转移,最常用、最灵活直接寻址方式直接寻址方式直接提供目标地址直接提供目标地址目标地址(转移后的目标地址(转移后的CSCS和和EIPEIP)指
41、令操作数)指令操作数间接寻址方式间接寻址方式指示寄存器或存储单元指示寄存器或存储单元目标地址来自寄存器或存储单元、间接获得目标地址来自寄存器或存储单元、间接获得寄存器间接寻址:用寄存器保存目标地址寄存器间接寻址:用寄存器保存目标地址存储器间接寻址:用存储单元保存目标地址存储器间接寻址:用存储单元保存目标地址微机原理与接口技术第4版机械工业出版社3. JMP3. JMP指令指令无条件转移:程序无条件改变执行顺序无条件转移:程序无条件改变执行顺序JMPJMP指令相当于高级语言的指令相当于高级语言的gotogoto语句语句JMP labelJMP label; ;程序转向程序转向labellabel
42、标号指定的地址标号指定的地址; ;段内相对寻址,段间直接寻址段内相对寻址,段间直接寻址JMP reg32/reg16JMP reg32/reg16; ;程序转向寄存器指定的地址程序转向寄存器指定的地址; ;寄存器间接寻址寄存器间接寻址JMP mem32/mem16JMP mem32/mem16; ;程序转向存储单元指定的地址程序转向存储单元指定的地址; ;存储器间接寻址存储器间接寻址微机原理与接口技术第4版机械工业出版社JMPJMP指令的指令的4 4种类型种类型1. 1. 段内转移、相对寻址段内转移、相对寻址标号指明目标地址,指令代码包含位移量标号指明目标地址,指令代码包含位移量2. 2. 段
43、内转移、间接寻址段内转移、间接寻址通用寄存器或主存单元包含目标指令偏移地址通用寄存器或主存单元包含目标指令偏移地址3. 3. 段间转移、直接寻址段间转移、直接寻址标号包含目标指令的段地址和偏移地址标号包含目标指令的段地址和偏移地址4. 4. 段间转移、间接寻址段间转移、间接寻址3232位段用位段用3 3字存储单元包含目标地址字存储单元包含目标地址1616位段用双字存储单元包含目标地址位段用双字存储单元包含目标地址微机原理与接口技术第4版机械工业出版社例例4-14-1无条件转移程序无条件转移程序1 1; ; 数据段数据段00000000000000000000000000000000nvarnv
44、ardword ?dword ? ; ; 代码段代码段0000000000000000EB 01EB 01jmp labl1jmp labl1; ; 相对寻址相对寻址00000002000000029090nopnop0000000300000003E9 00000001E9 00000001labl1:labl1:jmp near ptr labl2jmp near ptr labl2; ; 相对近转移相对近转移00000008000000089090nopnop0000000900000009B8 00000011 RB8 00000011 Rlabl2:labl2:mov eax,off
45、set labl3mov eax,offset labl3 微机原理与接口技术第4版机械工业出版社例例4-14-1无条件转移程序无条件转移程序2 20000000E0000000EFF E0FF E0jmp eaxjmp eax; ; 寄存器间接寻址寄存器间接寻址00000010000000109090nopnop0000001100000011B8 00000022 RB8 00000022 Rlabl3:labl3:mov eax,offset labl4mov eax,offset labl40000001600000016A3 00000000 RA3 00000000 Rmov nv
46、ar,eaxmov nvar,eax0000001B0000001BFF 25 00000000 RFF 25 00000000 Rjmp nvarjmp nvar; ; 存储器间接寻址存储器间接寻址00000021000000219090nopnoplabl4:labl4: mov ebx,offset nvarmov ebx,offset nvarjmp near ptr ebxjmp near ptr ebx; ;数据的寄存器间接寻址数据的寄存器间接寻址数据的存储器直接寻址数据的存储器直接寻址微机原理与接口技术第4版机械工业出版社4.1.2 4.1.2 条件转移指令条件转移指令根据指定的
47、条件确定程序是否发生转移根据指定的条件确定程序是否发生转移Jcc labelJcc label; ;条件满足,发生转移;否则,顺序执行下条指令条件满足,发生转移;否则,顺序执行下条指令LABELLABEL表示目标地址,采用段内相对寻址表示目标地址,采用段内相对寻址3232位位IA-32IA-32处理器:达到处理器:达到3232位的全偏移量位的全偏移量1616位位80 x8680 x86处理器:处理器:-128-128+127+127间的短转移间的短转移条件转移指令不影响标志,但要利用标志条件转移指令不影响标志,但要利用标志cccc表示利用标志判断的条件,表示利用标志判断的条件,1616种、两类
48、种、两类单个标志状态作为条件单个标志状态作为条件两数大小关系作为条件两数大小关系作为条件微机原理与接口技术第4版机械工业出版社转移条件转移条件cccc:单个标志状态:单个标志状态JZ/JEJZ/JEZF=1ZF=1Jump if Zero/EqualJump if Zero/EqualJNZ/JNEJNZ/JNEZF=0ZF=0Jump if Not Zero/Not EqualJump if Not Zero/Not EqualJSJSSF=1SF=1Jump if SignJump if SignJNSJNSSF=0SF=0Jump if Not SignJump if Not SignJ
49、P/JPEJP/JPEPF=1PF=1Jump if Parity/Parity EvenJump if Parity/Parity EvenJNP/JPOJNP/JPOPF=0PF=0Jump if Not Parity/Parity OddJump if Not Parity/Parity OddJOJOOF=1OF=1Jump if OverflowJump if OverflowJNOJNOOF=0OF=0Jump if Not OverflowJump if Not OverflowJCJCCF=1CF=1Jump if CarryJump if CarryJNCJNCCF=0CF=
50、0Jump if Not CarryJump if Not Carry微机原理与接口技术第4版机械工业出版社转移条件转移条件cccc:两数大小关系:两数大小关系JB/JNAEJB/JNAECF=1CF=1Jump if Below/Not Above or EqualJump if Below/Not Above or EqualJNB/JAEJNB/JAECF=0CF=0Jump if Not Below/Above or EqualJump if Not Below/Above or EqualJBE/JNAJBE/JNACF=1CF=1或或ZF=1ZF=1Jump if Below/No
51、t AboveJump if Below/Not AboveJNBE/JAJNBE/JACF=0CF=0且且ZF=0ZF=0Jump if Not Below or Equal/AboveJump if Not Below or Equal/AboveJL/JNGEJL/JNGESFOFSFOFJump if Less/Not Greater or EqualJump if Less/Not Greater or EqualJNL/JGEJNL/JGESF=OFSF=OFJump if Not Less/Greater or EqualJump if Not Less/Greater or E
52、qualJLE/JNGJLE/JNGZFOFZFOF或或ZF=1ZF=1Jump if Less or Equal/Not GreaterJump if Less or Equal/Not GreaterJNLE/JGJNLE/JGSF=OFSF=OF且且ZF=0ZF=0Jump if Not Less or Equal/GreaterJump if Not Less or Equal/Greater微机原理与接口技术第4版机械工业出版社1. 1. 单个标志状态作为条件的条件转移指令单个标志状态作为条件的条件转移指令JZ(JE)JZ(JE)和和JNZ(JNE)JNZ(JNE):利用零位标志:利
53、用零位标志ZFZF判断结果是零(相等)还是非零(不等)判断结果是零(相等)还是非零(不等)JSJS和和JNSJNS:利用符号标志:利用符号标志SFSF判断结果是负还是正判断结果是负还是正JOJO和和JNOJNO:利用溢出标志:利用溢出标志OFOF判断结果是溢出还是没有溢出判断结果是溢出还是没有溢出JP(JPE)JP(JPE)和和JNP(JPO)JNP(JPO):利用奇偶标志:利用奇偶标志PFPF判断结果低字节判断结果低字节“1”1”的个数是偶数还是奇数的个数是偶数还是奇数JCJC和和JNCJNC:利用进位标志:利用进位标志CFCF判断结果是有进位(为判断结果是有进位(为1 1)还是无进位(为)
54、还是无进位(为0 0)微机原理与接口技术第4版机械工业出版社例例4-24-2个数折半程序个数折半程序1 1mov eax,885mov eax,885; ; 假设一个数据假设一个数据shr eax,1shr eax,1; ; 数据右移进行折半数据右移进行折半jncjnc goeven goeven; ; 余数为余数为0 0,即,即CFCF0 0条件成立,转移条件成立,转移add eax,1add eax,1; ; 否则余数为否则余数为1 1,即,即CFCF1 1,进行加,进行加1 1操作操作goeven:goeven: call dispuidcall dispuid; ; 显示结果显示结果
55、443运行结果微机原理与接口技术第4版机械工业出版社例例4-24-2个数折半程序个数折半程序2 2mov eax,886mov eax,886; ; 假设一个数据假设一个数据shr eax,1shr eax,1; ; 数据右移进行折半数据右移进行折半jcjc goodd goodd; ; 余数为余数为1 1,即,即CFCF1 1条件成立,转移到分条件成立,转移到分支体,进行加支体,进行加1 1操作操作jmpjmp goeven goeven; ; 余数为余数为0 0,即,即CFCF0 0,不需要处理,转移,不需要处理,转移到显示!到显示!goodd:goodd:add eax,1add eax
56、,1; ; 进行加进行加1 1操作操作goeven:goeven: call dispuidcall dispuid; ; 显示结果显示结果jnc goeven 何不合二为一?何不合二为一?微机原理与接口技术第4版机械工业出版社例例4-24-2个数折半程序个数折半程序3 3mov eax,887mov eax,887; ; 假设一个数据假设一个数据shr eax,1shr eax,1; ; 数据右移进行折半数据右移进行折半adc eax,0adc eax,0; ; 余数余数CFCF1 1,进行加,进行加1 1操作操作;余数;余数CFCF0 0,没有加,没有加1 1call dispuidcal
57、l dispuid; ; 显示结果显示结果mov eax,888mov eax,888; ; 假设一个数据假设一个数据add eax,1add eax,1; ; 个数加个数加1 1rcr eax,1rcr eax,1; ; 数据右移进行折半数据右移进行折半call dispuidcall dispuid; ; 显示结果显示结果微机原理与接口技术第4版机械工业出版社例例4-34-3位测试程序位测试程序说明说明例如:进行打印前,要测试打印机状态。假例如:进行打印前,要测试打印机状态。假设测试数据已经进入了设测试数据已经进入了EAXEAX,其中,其中D1D1位为位为0 0表表示打印机没有处于联机打印
58、的正常状态,示打印机没有处于联机打印的正常状态,D1D1位为位为1 1表示可以进行打印。编程测试表示可以进行打印。编程测试EAXEAX,若若D1=0D1=0,显示,显示“No Ready!”,No Ready!”,若若D1=1D1=1,显示,显示“Ready to Go!”Ready to Go!”微机原理与接口技术第4版机械工业出版社例例4-34-3位测试程序位测试程序1 1; ; 数据段数据段no_msgno_msgbyte Not Ready!,0byte Not Ready!,0yes_msgyes_msgbyte Ready to Go!,0byte Ready to Go!,0;
59、; 代码段代码段mov eax,56hmov eax,56h; ; 假设一个数据假设一个数据test eax,02htest eax,02h; ; 测试测试D1D1位位(D1(D11 1,其他位为,其他位为0)0)jzjz nom nom; D1; D10 0条件成立,转移条件成立,转移mov eax,offset yes_msgmov eax,offset yes_msg; D1; D11 1,显示准备好,显示准备好jmp jmp donedone; ; 跳转过另一个分支体!跳转过另一个分支体!nom:nom:mov eax,offset no_msgmov eax,offset no_ms
60、g; ; 显示没有准备好显示没有准备好done:done:call dispmsgcall dispmsg微机原理与接口技术第4版机械工业出版社例例4-34-3位测试程序位测试程序2 2; ; 数据段数据段no_msgno_msgbyte Not Ready!,0byte Not Ready!,0yes_msgyes_msgbyte Ready to Go!,0byte Ready to Go!,0; ; 代码段代码段mov eax,56hmov eax,56h; ; 假设一个数据假设一个数据test eax,02htest eax,02h; ; 测试测试D1D1位位(D1(D11 1,其他位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年人教B版七年级科学下册月考试卷含答案
- 2025年人教版选择性必修1生物下册阶段测试试卷含答案
- 2025年人民版七年级生物上册阶段测试试卷含答案
- 2025年沪科版选择性必修2生物下册月考试卷含答案
- 2025年教科新版八年级科学上册月考试卷含答案
- 2025年人教A新版二年级语文上册阶段测试试卷含答案
- 2024年石家庄铁路职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 2025年浙教新版七年级数学上册月考试卷
- 2025年北师大版选择性必修1物理上册月考试卷含答案
- 2025年人教新课标七年级历史上册阶段测试试卷
- 监理从业水平培训课件
- 义务教育(音乐)课程标准(2022年版)解读
- 智慧农业行业营销策略方案
- 市场部整体运营概况
- 数字广告数据要素流通保障技术研究报告(2023年)
- JJF(苏) 283-2024 暂态地电压法局部放电检测仪校准规范
- 某27层高层住宅楼施工组织设计方案
- 2025年中考语文备考之名著导读:《水浒传》主要人物梳理
- 小学科学学情分析报告总结
- 健康中国产业园规划方案
- (2024年)二年级上册音乐
评论
0/150
提交评论