第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt

上传人(卖家):晟晟文业 文档编号:4960191 上传时间:2023-01-28 格式:PPT 页数:125 大小:1.02MB
下载 相关 举报
第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt_第1页
第1页 / 共125页
第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt_第2页
第2页 / 共125页
第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt_第3页
第3页 / 共125页
第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt_第4页
第4页 / 共125页
第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt_第5页
第5页 / 共125页
点击查看更多>>
资源描述

1、1微型计算机原理及应用微型计算机原理及应用2第三章第三章 汇编语言程序设计汇编语言程序设计3.ASM.OBJ.EXE编译编译连接连接编译程序:编译程序:MASM.EXE连接程序:连接程序:LINK.EXE4用户编写程序,程序在计算机中运行,用户编写程序,程序在计算机中运行,计算机的控制计算机的控制由操作系统交给用户程序由操作系统交给用户程序,运行用户程序,当用户程序运行结束后,运行用户程序,当用户程序运行结束后,应再将控制权交回操作系统应再将控制权交回操作系统,所以,在程,所以,在程序中应该有返回序中应该有返回DOS的指令。在计算机的指令。在计算机中,返回中,返回DOS的指令是操作系统中的一的

2、指令是操作系统中的一个子程序,用户使用时应调用这个子程序。个子程序,用户使用时应调用这个子程序。5每当一个用户的可执行文件每当一个用户的可执行文件.EXE装入内存后,存储器的装入内存后,存储器的分配情况如图:分配情况如图:系统占用系统占用程序段前缀程序段前缀用户数据区用户数据区用户堆栈区用户堆栈区用户代码段用户代码段系统和系统和ROM占用占用00000HDS,ES100个字节个字节SS用户程序空间用户程序空间FFFFFHCS6系统占用系统占用INT 20H 程序段前缀程序段前缀用户数据区用户数据区用户堆栈区用户堆栈区用户代码段用户代码段系统和系统和ROM占用占用无论用户程序有几段,也无论这些段

3、无论用户程序有几段,也无论这些段的排列顺序如何,用户程序的代码前的排列顺序如何,用户程序的代码前一定有一定有100个字节的个字节的程序段前缀程序段前缀(Program Segment Prefix,简称简称PSP),PSP给出了用户的可执行文件给出了用户的可执行文件(.EXE)的若干控制信息。其中的若干控制信息。其中PSP的开始处的开始处(第第1,2字节字节)有一条中断指令有一条中断指令INT 20H的代码,这条指令的功能是的代码,这条指令的功能是结束用户结束用户程序,返回操作系统程序,返回操作系统。在用户程序执。在用户程序执行完以后,通过执行该条指令就可以行完以后,通过执行该条指令就可以返回

4、返回DOS。7如何使用户程序执行完后返回来执行这条指令?如何使用户程序执行完后返回来执行这条指令?系统占用系统占用INT 20H 程序段前缀程序段前缀用户数据区用户数据区用户堆栈区用户堆栈区用户代码段用户代码段RET系统和系统和ROM占用占用DS,ESSSCS首先将用户程序定义为一个首先将用户程序定义为一个远过程远过程,当,当可执行文件装入内存后,可执行文件装入内存后,DS,ES两个段两个段寄存器被寄存器被CPU自动设置为指向自动设置为指向PSP的首的首址址,所以一般程序的开始指令为:,所以一般程序的开始指令为:PUSH DS XOR AX,AX PUSH AX即将即将DS的内容和的内容和00

5、00H压入堆栈,程序压入堆栈,程序结束时的最后一条语句为结束时的最后一条语句为RET,就把压就把压入堆栈的入堆栈的PSP段的段基址和偏移量段的段基址和偏移量0000H弹出并送入弹出并送入CS和和IP,转而执行返转而执行返回回DOS的指令的指令INT 20H。00H00HPSPLPSPH堆栈堆栈情况情况CSIP8返回操作系统的另一个办法是用系统调用返回操作系统的另一个办法是用系统调用中断指令:中断指令:INT 21H,在用户程序结束时,在用户程序结束时,用下面两条指令:用下面两条指令:MOV AH,4CH INT 21H这两条指令经常用在短的程序段中,即用这两条指令经常用在短的程序段中,即用户程

6、序并不是一个完整的汇编程序,而只户程序并不是一个完整的汇编程序,而只是由一些指令组成的、没有堆栈区或数据是由一些指令组成的、没有堆栈区或数据区的程序段。区的程序段。9第一节第一节 伪指令伪指令10伪指令:伪指令不是处理器运行的指令,而是程伪指令:伪指令不是处理器运行的指令,而是程序员给汇编序员给汇编编译程序编译程序下达的命令。是在编译源程下达的命令。是在编译源程序期间由汇编序期间由汇编编译程序执行的命令编译程序执行的命令。因为程序要分段放在内存内因为程序要分段放在内存内,编译程序必须要编译程序必须要知道每段的起始位置知道每段的起始位置,为为CPU的段寄存器分配地址;的段寄存器分配地址;如果程序

7、中有变量如果程序中有变量,还要定义变量空间,存放数据、还要定义变量空间,存放数据、结果;知道源程序的开始、结束标志结果;知道源程序的开始、结束标志伪指令语句:在汇编时不产生二进制代码伪指令语句:在汇编时不产生二进制代码,仅为编仅为编译程序提供汇编时所需要的必要信息的语句。译程序提供汇编时所需要的必要信息的语句。11一、段定义一、段定义一般的源程序分为一般的源程序分为4个段:代码段个段:代码段Code、数据段数据段Data、堆堆栈段栈段Stack、附加段附加段Extra。各个段从段定义语句开始,到段结束语句各个段从段定义语句开始,到段结束语句ENDS结束。结束。段名段名 SEGMENT 定位类型

8、定位类型 组合类型组合类型 类别类别段体段体段名段名 ENDS用户指定用户指定可任选定义可任选定义12段名必须是合法是标识符。段名必须是合法是标识符。定位类型:定位类型:内存可以看成是一本书内存可以看成是一本书,将将其分成其分成页页,段段,字字,和字节和字节。每每256个地址为一页个地址为一页(PAGE),每页的起始地每页的起始地址为二进制:址为二进制:xxxx xxxx xxxx 0000 000016进制:进制:xxx00H第一页第一页 (256个地址个地址)第二页第二页 (256个地址个地址)00000H000FFH00100H00200H001FFH13每每16个地址为一段个地址为一段

9、(PARA),每段的起始地址为二进制:每段的起始地址为二进制:xxxx xxxx xxxx xxxx 000016进制:进制:xxxx0H第一段第一段 (16个地址个地址)第二段第二段 (16个地址个地址)xxx00Hxxx0FHxxx10Hxxx1FHxxx20H段段(节节)是默认的定位类型。是默认的定位类型。14每每2个地址为一个字个地址为一个字(WORD),每个字的起始地址每个字的起始地址为为偶数偶数;最基本的类型是字节最基本的类型是字节(BYTE),字节只包含一个地字节只包含一个地址址,可以是内存的任何空间。,可以是内存的任何空间。定位类型表示所定义的段存放在内存空间时,段定位类型表示

10、所定义的段存放在内存空间时,段首地址对内存空间的要求首地址对内存空间的要求,即段起始点是放在一,即段起始点是放在一页的起点上页的起点上(PAGE)还是一段的起点上还是一段的起点上(PARA)等,等,如果不定义定位类型,编译程序将默认其为段类如果不定义定位类型,编译程序将默认其为段类型,即将段首地址放在从型,即将段首地址放在从xxxx0H开始的内存空间。开始的内存空间。15BYTE:表示本段起始单元可以从任一地址开始;表示本段起始单元可以从任一地址开始;WORD:表示本段起始单元从一个偶地址开始表示本段起始单元从一个偶地址开始;PARA:表示本段起始单元从一个段的边界开始表示本段起始单元从一个段

11、的边界开始(默认默认);段寄存器段寄存器:H,第一个偏移地址:,第一个偏移地址:0000H物理地址:物理地址:0HPAGE:表示本段起始单元从一个页的边界开始表示本段起始单元从一个页的边界开始16组合类型组合类型组合类型是告诉编译程序,所定义的段与其他段组合类型是告诉编译程序,所定义的段与其他段的关系,即将该段存放内存时,的关系,即将该段存放内存时,是否将该段与其是否将该段与其他段在物理上或逻辑上放在一起。他段在物理上或逻辑上放在一起。常常一个汇编程序可以有很多代码段、数据段或常常一个汇编程序可以有很多代码段、数据段或堆栈段,这时,就要综合考虑各段的组合类型。堆栈段,这时,就要综合考虑各段的组

12、合类型。NONE:表示本段与其他段不发生任何关系,该表示本段与其他段不发生任何关系,该段有自己的基地址,段有自己的基地址,是默认的组合关系。是默认的组合关系。PUBLIC:在满足定位类型的前提下与其他模块的在满足定位类型的前提下与其他模块的同名段连接在一起,形成一个新的逻辑段,同名段连接在一起,形成一个新的逻辑段,共用共用一个段基址一个段基址。17COMMON:表示产生一个覆盖段。连接时,把本表示产生一个覆盖段。连接时,把本段与其他段与其他也用也用COMMON说明的同名段说明的同名段置成相同的置成相同的起始地址,重叠在一起,共享相同的存储区,其起始地址,重叠在一起,共享相同的存储区,其段长度由

13、最长的段确定。段长度由最长的段确定。STACK:在每个汇编程序中,只能必须有一个堆在每个汇编程序中,只能必须有一个堆栈段,连接时,将本段与其他栈段,连接时,将本段与其他也用也用STACK说明的说明的同名段同名段连接成一个连续的大的连接成一个连续的大的STACK段,段,编译程编译程序自动初始化序自动初始化SS和和SP寄存器寄存器,使,使SS的内容为该连的内容为该连续段的首址,续段的首址,SP指向堆栈底部加指向堆栈底部加1的存储单元。的存储单元。18MEMORY:表示本段在存储器中应定位在所有其表示本段在存储器中应定位在所有其他段的最高地址。他段的最高地址。AT:表示本段从表达式指定的地址处开表示

14、本段从表达式指定的地址处开始装入,这样,在程序中用户就可以直接定义段始装入,这样,在程序中用户就可以直接定义段地址,地址,这种方式不适用于代码段这种方式不适用于代码段。类别:类别:是用单引号括起来的字符串,连接时,是用单引号括起来的字符串,连接时,LINK程序把类别相同的段放在连续的存储区中程序把类别相同的段放在连续的存储区中(可可以不同名以不同名)。类别名可以任意,但一般为。类别名可以任意,但一般为CODE,STACK,DATA等,表明该段的类型等,表明该段的类型19例如:定义堆栈段如下:例如:定义堆栈段如下:ST SEGMENT PARA STACK STACK DB 100 DUP(?)

15、ST ENDS段名段名组合类型组合类型类别类别定位类型定位类型堆栈长度堆栈长度段结束段结束通过定义,自动初通过定义,自动初始化了始化了SS和和SP。SS:0000HSS:0063HSS:0064H100字节字节SP20连接两个汇编语言目标程序时,它们的数据段同连接两个汇编语言目标程序时,它们的数据段同名,组合类型为名,组合类型为PIBLIC,定位类型为定位类型为PARA。连连接后第一个目标程序的数据段的起始物理地址是接后第一个目标程序的数据段的起始物理地址是01010H,长度为长度为17AH,则第二个目标程序数据段则第二个目标程序数据段的起始物理地址为多少?的起始物理地址为多少?01010H+

16、17AH=0118AH 因为第二个数据段的定位类型为因为第二个数据段的定位类型为PARA,故应从节故应从节(段段)的边界开始,的边界开始,01190H因为组合类型为因为组合类型为PUBLIC,所以共用一个段基址,所以共用一个段基址,在内存中顺序存放。在内存中顺序存放。21现有汇编目标程序现有汇编目标程序A和和B,它们的数据段类别名相它们的数据段类别名相同,组合类型皆为同,组合类型皆为COMMON,若若A程序数据段中程序数据段中有字符串有字符串ABC,B程序数据段中有字符程序数据段中有字符DEF,则执行连接操作则执行连接操作 LINK A+B 后,产生目标程序的后,产生目标程序的数据段中偏移地址

17、为数据段中偏移地址为0000H单元的内容是什么单元的内容是什么?43H42H41HDS:0000HA数据段数据段46H45H44HDS:0000HB数据段数据段因为因为COMMON类型为覆盖,所以组合后类型为覆盖,所以组合后B覆盖覆盖A44H22二、过程定义二、过程定义过程的含义和子程序是一样的,一个码段中可以过程的含义和子程序是一样的,一个码段中可以包含一个或许多过程。包含一个或许多过程。码段名码段名 SEGMENT过程名过程名1 PROC FAR RET过程名过程名1 ENDP过程名过程名2 PROC NEAR RET过程名过程名2 ENDP码段名码段名 ENDSFAR:该过程为远过程,调

18、该过程为远过程,调用该过程时为段间调用,用该过程时为段间调用,即即CS和和IP均要重新赋值;均要重新赋值;NEAR:该过程为近过程,该过程为近过程,调用该过程时为段内调用,调用该过程时为段内调用,只赋值只赋值IP。(默认默认)23过程名过程名1 PROC FAR RET过程名过程名1 ENDP过程名是合法的标识符;过程名是合法的标识符;一个程序的主过程一个程序的主过程(起始指令所在的过程起始指令所在的过程)应是应是FAR过程,因为该过程是过程,因为该过程是DOS调用的。过程中应有调用的。过程中应有RET指令,以便返回到调用处。指令,以便返回到调用处。过程可以嵌套调过程可以嵌套调用,但不可以嵌套

19、定义。用,但不可以嵌套定义。过程开始过程开始过程结束过程结束24例:延时例:延时100ms的子程序,编程如下:的子程序,编程如下:DELAY PROC MOV BL,10AGAIN:MOV CX,2801HWAIT:LOOP WAIT DEC BL JNZ AGAIN RETDELAY ENDP25三、段寻址三、段寻址虽然定义了段,但由于段名是任意的,编译程序虽然定义了段,但由于段名是任意的,编译程序仍然不知道哪个段是码段,哪个段是数据段等,仍然不知道哪个段是码段,哪个段是数据段等,所以在码段中要用所以在码段中要用ASSUME伪指令进行说明,伪指令进行说明,告告诉编译器不同的段寄存器分别对应哪

20、个段地址。诉编译器不同的段寄存器分别对应哪个段地址。ASSUME 段寄存器段寄存器:段名,段名,段寄存器段寄存器:段名,段名,当汇编程序遇到一个段名时,就自动地引用给出当汇编程序遇到一个段名时,就自动地引用给出的段寄存器对段名加以汇编。的段寄存器对段名加以汇编。但汇编程序将但汇编程序将DS和和ES的值赋为的值赋为PSP首址的值,在首址的值,在程序中还要由程序中还要由MOV指令重新对指令重新对DS赋值。赋值。26系统和系统和ROM占用占用用户代码段用户代码段用户堆栈区用户堆栈区用户数据区用户数据区程序段前缀程序段前缀系统占用系统占用00000HDS,ES100个字节个字节SS用户程序空间用户程序

21、空间FFFFFHCS正确的正确的DS地址地址MOV AX,数据段名数据段名MOV DS,AX编译程序指定的编译程序指定的DS,ES的地址的地址ASSUME伪伪指令指定指令指定27码段名码段名 SEGMENTASSUME CS:码段名码段名,DS:数据段名数据段名,SS:堆栈段名堆栈段名过程名过程名 PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,数据段名数据段名 MOV DS,AX RET过程名过程名 ENDP 码段名码段名 ENDS设置段寄存器设置段寄存器(除除DS,ES)设置返回设置返回DOS指令位置指令位置设置设置DS执行返回执行返回DOS命令命令过程

22、开始过程开始过程结束过程结束28四、结束语句四、结束语句 ENDENDP:过程结束过程结束ENDS:段结束段结束END:整个汇编源程序结束整个汇编源程序结束(不配对使用不配对使用)汇编程序在编译时遇到汇编程序在编译时遇到END,便得知源程序已经便得知源程序已经结束。结束。END 表达式表达式表达式为可执行程序运行的起始位置表达式为可执行程序运行的起始位置(执行的执行的第第1条语句的开始位置条语句的开始位置),一般为主过程名。,一般为主过程名。29五、五、ORGORG 表达式表达式指定了在其后的指令或数据存放的偏移地址。指定了在其后的指令或数据存放的偏移地址。ORG 0100HMOV AX,0表

23、明该指令放在码段,其偏移地表明该指令放在码段,其偏移地址为址为0100H。码段的首地址从。码段的首地址从CS:0000H处开始。处开始。CS:0000HCS:0100H30六、完整结构六、完整结构DAT1 SEGMENT X DB 3 Y DB 5DAT1 ENDSSTA SEGMENT STACK STACK DB 100 DUP(?)STA ENDSCODE1 SEGMENT ASSUME CS:CODE1,DS:DAT1,SS:STA BEGIN PROC FAR PUSH DS XOR AX,AX PUSH AX MOV AX,DAT1 MOV DS,AX RET BEGIN ENDP

24、CODE1 ENDSEND BEGIN将将PSP首址压栈,首址压栈,以便返回以便返回DOS设置设置DS段寄存器内容段寄存器内容源程序结束,第源程序结束,第一条指令的地址一条指令的地址分配段寄存器分配段寄存器主过程名主过程名数据段数据段堆栈段堆栈段返回返回DOS31 PUSH DS XOR AX,AX PUSH AX MOV AX,数据段名数据段名 MOV DS,AX标准程序前奏,一般写在代码段开始标准程序前奏,一般写在代码段开始32第二节第二节 数据定义数据定义33一、常量、变量及标识符一、常量、变量及标识符常量:常量:二进制二进制(B),八进制八进制(Q),十六进制十六进制(H),十进制十进

25、制(D)(默认默认)100 01100100B 244Q 64H变量:变量:代表存放在某些存储单元的数据,这些数代表存放在某些存储单元的数据,这些数据在程序的运行期间随时可以修改。据在程序的运行期间随时可以修改。在程序中以在程序中以变量名变量名的形式出现。的形式出现。定义变量:定义变量:给变量分配存储单元给变量分配存储单元,为这个单元起名为这个单元起名字字(变量名变量名),可以同时将这些存储单元预置初值。可以同时将这些存储单元预置初值。34每个变量都有三个属性每个变量都有三个属性1)段属性段属性(SEG)变量所在的存储单元的段基址变量所在的存储单元的段基址2)偏移量属性偏移量属性(OFFSET

26、)变量所在的存储单元距段变量所在的存储单元距段起点的字节数起点的字节数3)类型属性类型属性(TYPE)一个单位变量占用存储单元的一个单位变量占用存储单元的字节数,分为:字节数,分为:DB(1个字节个字节)DW(2个字节个字节)DD(4个字节个字节)35DATA SETMENT X DB 5,4 Y DW 40H Z DD 2030HDATA ENDS05H04H40H00H30H20H00H00HDS:0000HXYZX,Y,Z分别都有三个属性:分别都有三个属性:段基址,偏移量,类型值段基址,偏移量,类型值这三个属性都有固定的值这三个属性都有固定的值36标识符:给指令或某一存储单元地址所起的名

27、字标识符:给指令或某一存储单元地址所起的名字标识符由下列字符组成:标识符由下列字符组成:字母字母:AZ,az;数字数字:09;特殊字符特殊字符:?._$数字不能作标识符的第一个字符,数字不能作标识符的第一个字符,.必须作标识符必须作标识符的第一个字符,标识符最长为的第一个字符,标识符最长为31个字符。个字符。标识符后面跟冒号时,表示标号,标识符后面跟冒号时,表示标号,代表该行指令代表该行指令的起始地址的起始地址,标号可以被转移、调用指令直接引用标号可以被转移、调用指令直接引用标识符后面不带冒号时,表示变量。标识符后面不带冒号时,表示变量。37标号:代码段中某一条指令的地址。标号:代码段中某一条

28、指令的地址。标号有标号有3个属性:个属性:1)段属性段属性(SEG)该条指令所在段的段基址该条指令所在段的段基址2)偏移量属性偏移量属性(OFFSET)该指令的偏移地址该指令的偏移地址(距段起点的距段起点的字节数字节数)3)距离属性距离属性 表示该标号是作为表示该标号是作为段内段内还是还是段间段间被调用或转被调用或转移的,该属性有两个值:移的,该属性有两个值:a)NEAR(FFFFH,-1):本标号只能被标号所在段的转移本标号只能被标号所在段的转移或调用指令所访问或调用指令所访问(段内转移段内转移),标号后有冒号;,标号后有冒号;默认默认b)FAR(FFFEH,-2):本标号可被其他段本标号可

29、被其他段(不是标号所在不是标号所在段段)的转移或调用指令访问的转移或调用指令访问(段间转移段间转移)。标号名标号名 LABEL FAR38二、数据定义伪操作二、数据定义伪操作DB:定义字节,其后的每个操作数占有一个字节定义字节,其后的每个操作数占有一个字节单元,连续存放;单元,连续存放;BUFFER DB 2,3,505H03H02HBUFFERDW:定义字,其后的每个操作数占有两个字节;定义字,其后的每个操作数占有两个字节;BUF DW 2,3,505H00H00H03H00H02HBUF39DD:定义双字,其后每个操作数占定义双字,其后每个操作数占4个字节;个字节;若仅保留单元,不初始化,

30、用若仅保留单元,不初始化,用?代替初值;代替初值;若数据重复,用若数据重复,用 n DUP()代替,代替,n为重复次数。为重复次数。STRING DB HELLO!ARRAY DB 100 DUP(?)6个字节的存储单元,内为各字符对应的个字节的存储单元,内为各字符对应的ASCII码码,字符串用单引号标识字符串用单引号标识保留保留100个字节,首地址为个字节,首地址为ARRAY,不初始化,不初始化,即即100个字节内均为随机值个字节内均为随机值40DATA1 DB 100 DUP(AB)初始化初始化200个字节,内有个字节,内有100个个41H,42H使用汇编语言定义的伪操作命令是:使用汇编语

31、言定义的伪操作命令是:VAL DB 93 DUP(5,2 DUP(1,2 DUP(3),4)则在则在VAL存储区前存储区前10个字节单元的数据是:个字节单元的数据是:5,1,3,3,4,1,3,3,4,5若定义若定义 DB 1,2,5 DUP(0,1,2 DUP(3),则在存储则在存储区前区前7个单元的数据是:个单元的数据是:1,2,0,1,3,3,041三、等值伪操作三、等值伪操作名字名字 EQU 表达式表达式名字名字 =表达式表达式给名字定义一个值或其他符号名或一条可执行语句,在汇给名字定义一个值或其他符号名或一条可执行语句,在汇编时,凡是出现该名字的地方就用定义的数据替代。编时,凡是出现

32、该名字的地方就用定义的数据替代。用用EQU赋值的名字不能重新赋值,但可用赋值的名字不能重新赋值,但可用PURGE释放后重新定义。释放后重新定义。TIMES EQU 50BUF DB TIMES DUP(?)等效于:等效于:BUF DB 50 DUP(?)ALPHA EQU 256BETA =ALPHA-242DATA SEGMENT A DW 3 B DW 4 L EQU B-ADATA ENDS03H00H04H00HDS:0000H数据段数据段L为常量,不占空间,值为为常量,不占空间,值为2变量在数据段出现,一般为偏移量,在程序段出变量在数据段出现,一般为偏移量,在程序段出现,为存储空间的

33、内容。现,为存储空间的内容。MOV AX,AMOV BX,BADD AX,BX;AX:3;BX:4;AX:743DATA SEGMENT A DW 3,7 B DW 14 L EQU B X DW B Y EQU B-ADATA ENDS03H00H07H00H0EH00H04H00HDS:0000H数据段数据段;L:B;Y:0004HMOV AX,LMOV AX,XMOV AX,AMOV AX,A+2MOV BX,Y;AX:000EH;AX:0004H;AX:0003H;AX:0007HMOV AX,B;X:0004H;BX:0004H44第三节第三节 汇编语言运算符汇编语言运算符45汇编语

34、言运算符:汇编语言运算符:是编译程序在编译时计算的是编译程序在编译时计算的,与运算指令不同,指令是在程序运行时计算的。与运算指令不同,指令是在程序运行时计算的。一、算术运算符一、算术运算符,*,/,MOD,SHL,SHR MOV AX,A+B二、逻辑运算符二、逻辑运算符AND,OR,XOR,NOT C EQU B-A AND AX,C AND OFH46三、关系运算符三、关系运算符 EQ,NE,LT,GT,LE,GE less than,great than 结果产生一个逻辑值,真为结果产生一个逻辑值,真为0FFFFH,假为假为0000H 206205choicechoiceAXMOV AX,

35、(choice LT 20)AND 5)OR(choice GE 20)AND 6)47注意:注意:算术运算符总可以用于数字操作,其结果也是算术运算符总可以用于数字操作,其结果也是数字的。当应用于存储器操作数时,只有数字的。当应用于存储器操作数时,只有+,-运运算符有意义;算符有意义;逻辑运算符的操作数也必须是数字,存储器操逻辑运算符的操作数也必须是数字,存储器操作数不能进行逻辑运算;作数不能进行逻辑运算;关系运算符连接的两个操作数,必须都是数字关系运算符连接的两个操作数,必须都是数字的或是在同一段内的存储器地址。的或是在同一段内的存储器地址。48四、值返回符四、值返回符1)$运算符运算符$:

36、当前地址偏移量的值:当前地址偏移量的值BLOCK DB HELLO!NUM EQU$-BLOCKBLOCK$;NUM为为 6!ELLOH49STR1 DW ABSTR2 DB 16 DUP(?)CNT EQU$-STR1MOV CX,CNTMOV AX,STR1HLTSTR1STR2BA;CX为为 18;AX为为4142H$ABSTR1 DW 4142HSTR1 DB 41H,42H50DATA SEGMENT NA EQU 15 NB EQU 10 NC DB 2 DUP(4,2 DUP(5,2)CNT DB$-NC CWT DW$-CNT ND DW NCDATA ENDS设数据段定义如下

37、:设数据段定义如下:从从DS:0000H开始至开始至CNT单元之前存放的数据依次为:单元之前存放的数据依次为:_;ND单元中的值为单元中的值为_;CWT单元中的单元中的值为值为_;CNT单元中的值为单元中的值为_。4,5,2,5,2,4,5,2,5,20000H10AH04H05H02H05H02H04H05H02H05H02H0AH01H00H00H00H512)SEG 和和OFFSETSEG:求标号或变量的段基址求标号或变量的段基址OFFSET:求标号或变量的距段首址的偏移量求标号或变量的距段首址的偏移量DATA SEGMENT A DB 12 B DW 23,25DATA ENDSMOV

38、 BX,OFFSET BMOV AX,SEG BLEA BX,B;BX:0001H;AX:DS值值;BX:0001H 与与 MOV BX,OFFSET B52DATA SEGMENT TABLE DW 10,20,30,40,50 ENTRY DW 3DATA ENDSMOV BX,OFFSET TABLEADD BX,ENTRYMOV AX,BX0AH00H14H00H1EH00H28H00H32H00H03H00H;0000H;BX:3;AX:1E00HBX533)TYPE 标号或符号的类型值标号或符号的类型值对变量对变量:表示变量的字节数:表示变量的字节数 DB 1,DW 2,DD 4对

39、标号:表示过程或指令地址的调用类型对标号:表示过程或指令地址的调用类型(NEAR)-1或或(FAR)-2DATA SEGMENT A DB 12 B DW 23,25DATA ENDSMOV AX,TYPE AMOV BX,TYPE B;AX:0001H;BX:0002H544)LENGTH 和和 SIZELENGTH:对对DUP情况下情况下,变量的项数或元素个数变量的项数或元素个数,在其在其他情况下该项属性为他情况下该项属性为1;SIZE:对操作数分配的字节数。对操作数分配的字节数。SIZE=LENGTH TYPE A DB 1234 B DW 5 DUP(2,3 DUP(0)C DW AB

40、,C,DL1:MOV AL,TYPE B MOV BL,LENGTH B MOV AH,SIZE A MOV BH,SIZE C MOV CL,TYPE L1 MOV CH,SIZE B;AL:2;BL:5;AH:1;BH:2;CL:0FFH;CH:0AH55对于下面的数据定义,各条对于下面的数据定义,各条MOV指令单独执行后,指令单独执行后,请填充有关寄存器的内容:请填充有关寄存器的内容:TABLE1 DB?TABLE2 DW 20 DUP(?)TABLE3 DB ABCD MOV AX,TYPE TABLE1 MOV BX,TYPE TABLE2 MOV CX,LENGTH TABLE2

41、MOV DX,SIZE TABLE2 MOV SI,LENGTH TABLE3;AX:1;BX:2;CX:20;DX:40;SI:1565)HIGH 和和LOWHIGH:对操作数取高字节;对操作数取高字节;LOW:对操作数取低字节。对操作数取低字节。NUM EQU 0CDEFHMOV AH,HIGH NUMMOV AL,LOW NUM;AH:0CDH;AL:0EFH57五、属性运算符五、属性运算符用来给指令中的操作数指定一个临时的属性,而用来给指令中的操作数指定一个临时的属性,而暂时暂时忽略操作数定义时的属性。忽略操作数定义时的属性。1)PTR 定义操作数为新的类型定义操作数为新的类型新类型新

42、类型 PTR 操作数操作数操作数可以是存储器的地址或标号名操作数可以是存储器的地址或标号名F1 DW 1234HF2 DB 23H,56H,18HMOV AL,BYTE PTR F1MOV AX,WORD PTR F2;AL:34H;AX:5623H18H56H23H12H34HF2F158 DAT1 DB 12H,34H DAT2 DB 56H,78H MOV AX,WORD PTR DAT1 CMP AX,WORD PTR DAT2 JA L1 MOV BX,WORD PTR DAT2 MOV WORD PTR DAT2,AX MOV WORD PTR DAT1,BXL1:HLTDAT1单

43、元的值是:单元的值是:_;AX:3412H;7856H56H592)THIS 指定新类型指定新类型像像PTR一样可用来建立一个特殊类型的存储器地址操作数,一样可用来建立一个特殊类型的存储器地址操作数,而没有为它分配存储器。新的存储器操作数的段和偏移量而没有为它分配存储器。新的存储器操作数的段和偏移量部分就是部分就是下一个能分配的存储单元的段和偏移量。下一个能分配的存储单元的段和偏移量。F1 EQU THIS BYTEF2 DW 4321H,2255HMOV AL,F1MOV AX,F2THIS 类型名类型名22H55H43H21HF2F1;AL:21H;AX:4321HF1和和F2具有相同的段

44、基地址和偏移地址,但类型不同。具有相同的段基地址和偏移地址,但类型不同。603)段超越段超越强迫当前指令的操作数按指定的段基地址寻址。强迫当前指令的操作数按指定的段基地址寻址。MOV AX,ES:BX4)SHORT用于无条件转移指令用于无条件转移指令JMP,通知编译器,转移的通知编译器,转移的目标地址在目标地址在+127-128之间。之间。JMP 标号标号 ;是三字节指令;是三字节指令JMP SHORT 标号标号;是两字节指令是两字节指令61第四节第四节 汇编语言程序汇编语言程序62汇编语言编写的程序也跟高级语言类似,程序汇编语言编写的程序也跟高级语言类似,程序结构分三种:顺序、分支、循环;较

45、复杂的程结构分三种:顺序、分支、循环;较复杂的程序也应该是由众多子程序组成的,每个子程序序也应该是由众多子程序组成的,每个子程序是一个过程,在程序中被显式地调用。变量等是一个过程,在程序中被显式地调用。变量等数据部分被定义在数据段,所有程序都要显式数据部分被定义在数据段,所有程序都要显式地定义堆栈段。汇编程序的每一条指令都与机地定义堆栈段。汇编程序的每一条指令都与机器语言一一对应,因此,汇编生成的可执行文器语言一一对应,因此,汇编生成的可执行文件代码少,适合于实时控制,但由于语法成分件代码少,适合于实时控制,但由于语法成分很少,不适合于复杂的算法、运算。很少,不适合于复杂的算法、运算。汇编程序

46、汇编程序主要的调试环境是主要的调试环境是DOS系统下的系统下的DEBUG程序。程序。63DATA SEGMENT DB1 DB 12H,34H,0,56H DW1 DW 78H,90H,0AB46H,1234H ADR1 DW DB1 ADR2 DW DW1 BUF DB 5 DUP(0)DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART:PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX XOR CX,CX MOV CL,3 ADD ADR1,CX SUB ADR2,CX M

47、OV BX,ADR1 MOV DI,BX MOV SI,ADR2 MOV AL,DB1BX MOV BUFDI,AL MOV AX,DW1BXSI MOV WORD PTR BUF,AX RETMAIN ENDPCODE ENDS END START;0000H;0003H;ADR1:3;ADR2:1;DI:3;SI:10000H+BXAL;AL:56H0010H0011H0012H0013H0014HBUF 56H0004H+BX+SIAX;AX:AB46HABH46H 00H00H;0004H64DS_SEG SEGMENT COUNT DB 4 BLK1 DB 96H,74H,32H,1

48、6H BLK2 DB 65H,94H,87H,29H BLK3 DB 4 DUP(?)DS_SEG ENDSCS_SEG SEGMENT ASSUME CS:CS_SEG,DS:DS_SEGMAIN PROC FARSTART:PUSH DS XOR AX,AX PUSH AX MOV AX,DS_SEG MOV DS,AX MOV SI,OFFSET BLK1 MOV DI,OFFSET BLK2 MOV BX,OFFSET BLK3 MOV CL,COUNT MOV CH,0 CLCNEXT:MOV AL,SI INC SI ADC AL,DI INC DI DAA MOV BX,AL I

49、NC BX LOOP NEXT RETMAIN ENDPCS_SEG ENDS END START4H96H74H32H16H65H94H87H29HCOUNTBLK1BLK2BLK3SIDIBXBCD码加法码加法16 32 74 9629 87 94 6546 20 69 6161H69H20H46H65DATA SEGMENT TABLE DW 1020H,2030H,3040H,4050H,5060H TEMP DW 5 DUP(0)COUNT DW 5DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATAMAIN PROC FARSTART:MOV A

50、X,DATA MOV DS,AX MOV ES,AX MOV CX,COUNT LEA SI TABLE LEA DI,TEMP CLD REP MOVSW LEA SI,TEMP MOV CX,COUNT MOV DI,OFFSET TABLE MOV BX,CX SHL BX,1LOP1:DEC BX DEC BX MOV AX,SI+BX MOV DI,AX ADD DI,2 LOOP LOP1 MOV AX,4C00H INT 21H RETMAIN ENDPCODE ENDS END STARTREP MOVSW在指令中的功能是:在指令中的功能是:循环程序段循环程序段LOP1的功能是

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(第三章-汇编语言程序设计-微型计算机原理及应用课件.ppt)为本站会员(晟晟文业)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|