CH汇编语言与其程序设计实用.pptx
《CH汇编语言与其程序设计实用.pptx》由会员分享,可在线阅读,更多相关《CH汇编语言与其程序设计实用.pptx(85页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1主要内容主要内容几个概念8086汇编语言的语句8086汇编中的伪指令8086汇编中的运算符汇编语言程序设计系统调用汇编语言的程序结构汇编语言的程序结构常用的伪指令常用的伪指令三种程序结构的设计三种程序结构的设计 顺序结构 分支结构 循环结构 子程序结构重难点重难点第第4 4章章 汇编语言程序设计汇编语言程序设计第1页/共85页2几个概念汇编语言、汇编语言源程序、汇编、汇编程序源程序.asm汇编masm目标程序 .obj连接link结果debugDOS下执行执行可执行程序 .exe第2页/共85页34.1 8086汇编语言的语句 1.指令性语句指令性语句指令性语句用于表达处理器指令,汇指令性语
2、句用于表达处理器指令,汇编后对应一条指令代码(目标代码)编后对应一条指令代码(目标代码),因而是可执行语句因而是可执行语句 标号标号标号标号:操作数操作数操作数操作数 ;注释注释注释注释 2.指示性语句指示性语句指示性语句指示源程序如何汇编、指示性语句指示源程序如何汇编、变量怎样定义、过程怎么设置,也称为伪指令,汇编时不变量怎样定义、过程怎么设置,也称为伪指令,汇编时不产生目标代码,是不可执行语句产生目标代码,是不可执行语句 名字名字名字名字 参数参数参数参数 ;注释注释注释注释 第3页/共85页4指令与伪指令指令与伪指令vv指令指令(Instruction)让让CPUCPU产生动作,在程序执
3、行时才处理。产生动作,在程序执行时才处理。指令就是第指令就是第3 3章学习的处理器指令,与具体的处理器有关、章学习的处理器指令,与具体的处理器有关、与汇编程序无关。与汇编程序无关。vv伪指令伪指令(Directive)不产生不产生CPUCPU动作,在程序执行前由汇编程序处理。动作,在程序执行前由汇编程序处理。伪指令与具体的处理器类型无关,但与汇编程序有关。不同伪指令与具体的处理器类型无关,但与汇编程序有关。不同版本的汇编程序支持不同的伪指令版本的汇编程序支持不同的伪指令。指令和伪指令采用易于记忆的符合表达,这就是助记符 第4页/共85页5保留字保留字vv保留字保留字(Reserved Word
4、)是汇编程序已经使用的标识符(也称为关键字关键字关键字关键字),主要有:指令助记符指令助记符指令助记符指令助记符例如:例如:MOVMOV、ADD ADD 伪指令助记符伪指令助记符伪指令助记符伪指令助记符例如:例如:DBDB、DW DW 操作符操作符操作符操作符例如:例如:OFFSETOFFSET、PTR PTR 寄存器名寄存器名寄存器名寄存器名例如:例如:AXAX、CSCS 汇编语言大小写不敏感 第5页/共85页6常量常量常量表示一个固定的数值,它又分成多种形式 1.1.常数常数常数常数 2.2.字符串字符串字符串字符串 3.3.符号常量符号常量符号常量符号常量 4.4.数值表达式数值表达式数
5、值表达式数值表达式第6页/共85页7(1)常数常数 由由1010、1616、2 2和和8 8进制形式表达的数值,各种进制的数据进制形式表达的数值,各种进制的数据以后缀字母区分,默认不加后缀字母的是十进制数。以后缀字母区分,默认不加后缀字母的是十进制数。十进制十进制由由0 90 9数字组成,以字母数字组成,以字母DD(d d)结)结尾(缺省情况可以省略)尾(缺省情况可以省略)100100,255D255D十六进制十六进制由由0 90 9、A FA F数字组成,以字母数字组成,以字母HH(h h)结尾,以字母开头的常数需)结尾,以字母开头的常数需要加一个前导要加一个前导0 064H64H,0FFH
6、 0FFH 0B800H0B800H二进制二进制由由0 0和和1 1两个数字组成,以字母两个数字组成,以字母B(b)B(b)结尾结尾01100100B01100100B第7页/共85页8(2)字符串字符串字符串常量是用单引号括起来的单个字符或多个字符。其数值是每个字符对应的数值是每个字符对应的ASCII码值码值。例如:d(等于64H)AB(等于4142H)Hello,Assembly!第8页/共85页9(3)符号常量符号常量vv符号常量使用标识符表达一个数值符号常量使用标识符表达一个数值 vv用来为常量定义符号名用来为常量定义符号名 vv符号定义伪指令有符号定义伪指令有“等价等价EQU”和和“
7、等号等号”:符号名符号名 EQU 数值表达式数值表达式 符号名符号名 数值表达式数值表达式 vvEQU不能重复定义符号名,但“”允许重复定义。例如:X=7;等效于:;等效于:X equ 7 X equ 7 X=X+5;“X EQU X+5X EQU X+5”是错误的是错误的第9页/共85页10(4)表达式表达式vv表达式一般是由表达式一般是由运算符运算符连接的各种常量所构成。连接的各种常量所构成。vv汇编程序在汇编过程中计算表达式,最终得到一个确定汇编程序在汇编过程中计算表达式,最终得到一个确定的数值,所以也是常量。的数值,所以也是常量。vv表达式的数值在程序运行前的汇编阶段计算,所以组成表达
8、式的数值在程序运行前的汇编阶段计算,所以组成表达式的各部分必须在汇编时就能确定。表达式的各部分必须在汇编时就能确定。vv经常使用的是加减乘除经常使用的是加减乘除(*/)。)。vv例如:例如:mov ax,3*4+5;等价于:;等价于:mov ax,17 mov ax,17 and ax,3 and 5 ;等价于:;等价于:and ax,1and ax,1第10页/共85页114.2 80864.2 8086汇编中的伪指令4.2.1符号定义语句 等值语句格式:符号名EQU表达式PORTEQU1234BUFF EQUPORT58MEMEQUDS:BP20HCOUNTEQUCXABC EQUAAA第
9、11页/共85页124.2.2 变量定义语句变量定义语句 vv变量变量实质上是指内存单元的数据,虽然内存单元实质上是指内存单元的数据,虽然内存单元地址不变,但其中存放的数据可以改变。地址不变,但其中存放的数据可以改变。vv变量需要事先定义才能使用。变量需要事先定义才能使用。vv变量定义(变量定义(DefineDefine)伪指令为变量申请固定长度为)伪指令为变量申请固定长度为单位的存储空间,并可以同时将相应的存储单元单位的存储空间,并可以同时将相应的存储单元初始化。初始化。vv定义后的变量可以利用定义后的变量可以利用变量名变量名等方法引用其中的等方法引用其中的数据,即变量的数值。数据,即变量的
10、数值。第12页/共85页13(1)变量的定义变量的定义 vv变量定义的汇编语言格式为:变量定义的汇编语言格式为:变量名变量名 伪指令伪指令 初值表初值表 vv变量名变量名为用户自定义标识符,表示初值表首元素的为用户自定义标识符,表示初值表首元素的逻辑地址,常称为符号地址。变量名也可以没有逻辑地址,常称为符号地址。变量名也可以没有 vv初值表初值表是用逗号分隔的参数是用逗号分隔的参数,主要由常量、数值表达主要由常量、数值表达式或式或“?”组成。其中组成。其中“?”表示未赋初值表示未赋初值 vv多个存储单元如果初值相同,可以用复制操作符多个存储单元如果初值相同,可以用复制操作符DUP进行定义进行定
11、义:重复次数重复次数 DUP(重复参数重复参数)vv变量定义伪指令有变量定义伪指令有DBDB、DWDW、DDDD等等第13页/共85页14字节变量的定义字节变量的定义DBvvDB伪指令用于分配一个或多个字节单元,并可以将它们初始化为指定值。vv初值表中每个数据一定是字节量,存放一个8位数据:可以是0255的无符号数 或是128127带符号数 也可以是字符串常数第14页/共85页15字节变量字节变量定义实例定义实例;数据段;数据段 X Xdb a,-5 db a,-5 db 2 dup(100),?db 2 dup(100),?Y Ydb ABCdb ABC第15页/共85页16字变量的定义字变
12、量的定义DWvvDW伪指令用于分配伪指令用于分配一个或多个字单元一个或多个字单元,并可以,并可以将它们初始化为指定值。将它们初始化为指定值。vv初值表中每个数据是字,一个字单元可用于存放初值表中每个数据是字,一个字单元可用于存放任何任何1616位数据:位数据:一个段地址一个段地址 一个偏移地址一个偏移地址 两个字符两个字符 065535065535之间的无符号数之间的无符号数 32768327683276732767之间的带符号数之间的带符号数第16页/共85页17字变量字变量定义实例定义实例;数据段;数据段 countcountdw8000h,?,ABdw8000h,?,ABmaxintma
13、xintequ64hequ64hnumbernumberdwmaxintdwmaxintarrayarraydwmaxintdup(0)dwmaxintdup(0)第17页/共85页18双字变量的定义双字变量的定义DDvvDD伪指令用于分配一个或多个双字单元,并可以将它们初始化为指定值。vv初值表中每个数据是一个32位的双字量:可以是有符号或无符号的可以是有符号或无符号的3232位整数位整数 也可以用来表达也可以用来表达1616位段地址(高位字)和位段地址(高位字)和1616位的偏移地址(低位字)的远指针位的偏移地址(低位字)的远指针 vardd DD 0,?,12345678h farpoi
14、nt DD 00400078h第18页/共85页19(2)变量的应用变量的应用vv变量变量具有存储单元的逻辑地址。vv程序代码中:通过通过变量名变量名引用其指向的首个数据。引用其指向的首个数据。通过通过变量名加减位移量变量名加减位移量存取以首个数据为基地存取以首个数据为基地址的前后数据址的前后数据。第19页/共85页20变量的定义变量的定义 bv1db 100,01100100b,64h,d ;字节变量:不同进制表达同一个数值,内存中有;字节变量:不同进制表达同一个数值,内存中有4 4个个64H 64H minint=5 ;符号常量:;符号常量:minintminint数值为数值为5 5,不占
15、内存空间,不占内存空间 bv2db-1,minint,minint+5 ;内存中数值依次为;内存中数值依次为FFH,5,0AH FFH,5,0AH db?,2 dup(20h);预留一个字节空间,重复定义了;预留一个字节空间,重复定义了2 2个数值个数值20H 20H wv1dw 2010h,4*4 ;字变量:两个数据是;字变量:两个数据是2010H2010H、0010H0010H,共占,共占4 4个字节个字节 wv2dw?;wvar2wvar2是没有初值的字变量是没有初值的字变量第20页/共85页21变量的定义(续)变量的定义(续)dvardvardd 12347777h,87651111h
16、,?dd 12347777h,87651111h,?;双字变量:;双字变量:2 2个双字数据,一个双字空间个双字数据,一个双字空间 abcabcdb a,b,c,?db a,b,c,?;定义字符,实际是字节变量定义字符,实际是字节变量 maxintmaxint equ 0ahequ 0ah;符号常量:符号常量:maxintmaxint10 10 stringstring db ABCDEFGHIJdb ABCDEFGHIJ ;定义字符串:使用字节定义;定义字符串:使用字节定义DBDB伪指令伪指令 crlfsdb 13,10,$;回车符;回车符0DH0DH、换行符、换行符0AH0AH和字符和字符
17、$24H 24H array1dw maxint dup(0);1010个初值为个初值为0 0的字量,可以认为是数组的字量,可以认为是数组 array db 2 dup(2,3,2 dup(4);6 6个字节内容依次为:个字节内容依次为:02 03 04 04 02 03 04 0402 03 04 04 02 03 04 04第21页/共85页22(3)变量的定位变量的定位vv汇编程序按照指令的先后顺序一个接着一个分配存汇编程序按照指令的先后顺序一个接着一个分配存储空间。储空间。vv定位伪指令定位伪指令ORGORG控制数据或代码所在的偏移地址。控制数据或代码所在的偏移地址。ORG ORG 参
18、数参数参数参数 vvORGORG伪指令是将当前偏移地址指针指向参数表达的伪指令是将当前偏移地址指针指向参数表达的偏移地址。例如:偏移地址。例如:ORG 100hORG 100h ;从从100H100H处安排数据或程序处安排数据或程序 ORG$+10ORG$+10 ;偏移地址加偏移地址加1010,即跳过,即跳过1010个字节空间个字节空间 vv汇编语言程序中,符号汇编语言程序中,符号汇编语言程序中,符号汇编语言程序中,符号“$”$”表示当前偏移地址值。表示当前偏移地址值。表示当前偏移地址值。表示当前偏移地址值。第22页/共85页23程序计数器程序计数器$vv 汇编程序有一个当前位置计数器当前位置
19、计数器,用来记录正在汇编的数据或指令目标代码存放在当前段内的偏移量。vv$表示位置计数器的当前值。例如:BLOCK DB Hello NUM EQU$-BLOCK ;NUM=5;NUM=548H65H6AH6AH6FHBLOCK$第23页/共85页24习题习题1:下列语句在存储器中各分配多少字节?:下列语句在存储器中各分配多少字节?(1)VR1DW9(2)VR2DW 4 DUP(?),2(3)CONT EQU 10(4)VR3 DD CONT DUP(?)(5)VR4 DB 2 DUP(?,CONT DUP(0)(6)VR5 DB How are you?第24页/共85页25(4)名字和标号
20、的属性)名字和标号的属性vv名字和标号是用户自定义的标识符。名字和标号是用户自定义的标识符。名字名字名字名字指向一条伪指令,指向一条伪指令,标号标号标号标号指向一条指令。指向一条指令。名字和标号一经使用便具有两类属性:名字和标号一经使用便具有两类属性:逻辑地址逻辑地址逻辑地址逻辑地址名字和标号对应存储单元的逻辑地址,含名字和标号对应存储单元的逻辑地址,含有段地址和偏移地址;有段地址和偏移地址;类型类型类型类型变量名的类型可以是变量名的类型可以是BYTEBYTE、WORDWORD和和DWORDDWORD等;标号、段名、子程序名的类型可以是等;标号、段名、子程序名的类型可以是NEARNEAR和和F
21、ARFAR,分,分别表示段内或段间调用别表示段内或段间调用 vv汇编程序提供操作符汇编程序提供操作符TYPETYPE,以便获取这些属性值,以便获取这些属性值第25页/共85页261)、)、地址操作符地址操作符vv地址操作符地址操作符地址操作符地址操作符取得名字或标号的段地址和偏移地址取得名字或标号的段地址和偏移地址 将括起的表达式作为存储器地址指针将括起的表达式作为存储器地址指针$当前偏移地址当前偏移地址:段前缀,采用指定的段地址寄存器段前缀,采用指定的段地址寄存器OFFSET OFFSET 名字名字名字名字/标号标号标号标号返回名字或标号的偏移地址返回名字或标号的偏移地址返回名字或标号的偏移
22、地址返回名字或标号的偏移地址SEG SEG 名字名字/标号标号返回名字或标号的段地址返回名字或标号的段地址第26页/共85页27举例举例;数据段数据段 BUFFER DB?BUFFER DB?;代码段代码段 MOV BX,MOV BX,OFFSETOFFSET BUFFER BUFFER MOV BX,MOV BX,SEGSEG BUFFER BUFFER LEA BX,BUFFER第27页/共85页282)类型操作符类型操作符vv类型操作符类型操作符类型操作符类型操作符对名字或标号的类型属性进行设置对名字或标号的类型属性进行设置 类型名类型名类型名类型名 PTR PTR 名字名字名字名字/标
23、号标号标号标号 vv其中类型名可以是其中类型名可以是BYTEBYTE、WORDWORD、DWORD,DWORD,或或者是者是NEARNEAR、FAR FAR vv对变量:对变量:l lLENGTHLENGTH 操作符获知某变量名指向多少个数据项操作符获知某变量名指向多少个数据项 l lSIZESIZE 操作符获知某变量共占用多少字节空间操作符获知某变量共占用多少字节空间 l lTYPETYPE 操作符获取变量类型值操作符获取变量类型值第28页/共85页29举例举例;数据段;数据段 STUFF DD 12345678H STUFF DD 12345678H;代码段;代码段 MOV CL,BYTE
24、 PTR STUFF MOV CL,BYTE PTR STUFF MOV CH,BYTE PTR STUFF+1 MOV CH,BYTE PTR STUFF+1 MOV AX,WORD PTR STUFF MOV AX,WORD PTR STUFF MOV DX,WORD PTR STUFF+2 MOV DX,WORD PTR STUFF+2 ;(CL)=78H;(CH)=56H;(AX)=5678H;(DX)=1234H第29页/共85页30段名段名 SEGMENT 段名段名 ENDS三、段定义语句三、段定义语句(1)SEGMENT定义一个逻辑段,并给逻辑段定义一个逻辑段,并给逻辑段赋予一个
25、段名。赋予一个段名。(2)常见的段名如常见的段名如:CODE,DATA,STACK第30页/共85页312、段假设语句ASSUME段寄存器名:段名,3、ORG伪指令、地址计数器$ORG伪指令格式:ORG4、END表示源代码结束格式为:END常数或表达式.第31页/共85页32n四、过程定义语句过程名PROCNEAR/FARRET过程名ENDP第32页/共85页33伪指令小结伪指令小结vv 符号定义语句符号定义语句符号定义语句符号定义语句 EQU =EQU =vv 数据定义语句数据定义语句数据定义语句数据定义语句 DB DW DD DUP DB DW DD DUP vv 段定义语句段定义语句 S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CH 汇编语言 与其 程序设计 实用
限制150内