汇编语言和汇编程序.ppt

上传人:公**** 文档编号:570986813 上传时间:2024-08-07 格式:PPT 页数:107 大小:804KB
返回 下载 相关 举报
汇编语言和汇编程序.ppt_第1页
第1页 / 共107页
汇编语言和汇编程序.ppt_第2页
第2页 / 共107页
汇编语言和汇编程序.ppt_第3页
第3页 / 共107页
汇编语言和汇编程序.ppt_第4页
第4页 / 共107页
汇编语言和汇编程序.ppt_第5页
第5页 / 共107页
点击查看更多>>
资源描述

《汇编语言和汇编程序.ppt》由会员分享,可在线阅读,更多相关《汇编语言和汇编程序.ppt(107页珍藏版)》请在金锄头文库上搜索。

1、第二章第二章 汇编语言与汇编程序汇编语言与汇编程序 2.1 机器语言与汇编语言机器语言与汇编语言一一. .机器语言机器语言机器只能识别二进制编码机器只能识别二进制编码 机器指令机器指令机器能直接执行的一组二进制代码(命令)该二进制代码称为机器码机器码(Machine Code).如: 40H40HINC AX 01D8HINC AX 01D8HADD AX,BXADD AX,BX指令通常由两部分组成:指令通常由两部分组成:操作码和操作数 操作码操作码该指令的功能,即执行什么操作。 操作数操作数指令指令操作对象,指明参加操作的数或操作数的地址。机器指令的集合机器语言用机器语言编写的程序 机器语言

2、程序二、二、汇编语言机器语言编写程序烦琐,难记忆,不易理解,易出错。用一些助记符来表示指令的操作码,操作数亦用一些符号来表示符号指令。如上:40HINC AX 01D8HADD AX, BX符号指令与机器指令一一对应。符号指令与机器指令一一对应。符号指令的集合符号指令的集合符号语言符号语言,又称,又称汇编语言汇编语言用汇编语用汇编语言编写的程序言编写的程序汇编语言程序汇编语言程序不能由计算机直接执行,不能由计算机直接执行,必须将它翻译成机器语言程序必须将它翻译成机器语言程序翻译过程称翻译过程称汇编汇编翻译翻译程序为程序为汇编程序汇编程序。 汇编语言源汇编语言源程序程序 汇编汇编 目标程序目标程

3、序三、宏三、宏汇编汇编程序程序MASM 允许把一串指令定义为一条宏指令,有宏汇编功能。如MASM系统程序系统程序。宏汇编语言有三类基本指令:符号指令,伪指令,宏指令。2.2 常用伪指令与常用算符常用伪指令与常用算符 每一种计算机语言都规定了自己的符号系统及语法规则。汇编语言也是如此,除符号指令外,还必须正确使用各种符号。汇编中的各种符号由伪指令定义,或为汇编的保留字。一、汇编语言源程序结构单模块程序结构 参见教材P、60 一般 程序由三个段组成。教材中程序的小写字母部分均为程序结构。STACK SEGMENT STACK DW 32 DUP(?)(?)STACK ENDSDATA SEGMEN

4、T :DATA ENDSCODE SEGMENTBEGIN PROC FAR ASSUME CS:CODE,SS:STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX : RETBEGIN ENDPCODE ENDS END BEGIN定义堆栈段及堆栈长度定义数据段定义代码段将汇编源程序视为DOS下的子程序将程序段前缀PSP进栈设置用户数据段返回到PSP,执行PSP中的第一条指令 INT 20H,结束程序返回调用程序 因为连接程序为每一个用户程序建立了一个 程序段前缀PSP,在PSP的开始处安排了一条 INT 20H指令,执

5、行该指令结束当前程序返回 调用程序。而PSP的地址,其段地址寄存在DS和ES中; 偏移地址为0,将DS:0000地址进栈,即PSP地址进栈。 PSP的长度为256个字节,即100H个单元,主要存放了装入程序与DOS连接的信息。结束用户程序返回DOS有两种方法: 其一:MOV AH ,4CH ;返回DOS INT 21H 其二:INT 20H ;返回调用程序,便于调试它的机器码是CD20H,当用DEBUG调用EXE文件时,在DS:0000单元中便可看到该指令。 DOS在转移控制权时,将CS指向EXE程序的代码段,SS指向堆栈段,但DS和ES并不指向用户程序的数据段和附加数据段,而是指向PSP。二

6、二 、 常用伪指令常用伪指令(P58) 伪指令不产生机器代码,CPU也不会产生某种操作,它主要告诉汇编程序哪些是数据,哪些是指令,符号约定,程序从何处开始,何处结束,即为汇编控制命令。 伪指令很多,下面主要介绍段定义,过程定义。 1、段定义伪指令、段定义伪指令定义一个存储段,一个程序模块可由若干段组成。格式:段名 SEGMENT 定位方式组合方 式类别名 伪指令或指令段名 ENDS功能: 定义一个以“段名”为名称的存储段。定位方式,组合方式,类别名赋给段名的属性,三个可选项主要用于多模块化程序设计,以告诉LINK程序各模块间段如何定位,段与段如何组合,还可连接在一起。一般单模块程序可省略。 段

7、名给段取名,用来指出汇编程序为该段分配的存储区的起始地址,即段地址,为一常数,用SEG运算符取得。 定位方式相邻两段间应如何衔接,即对该段的起始地址所提出的要求。定位方式有四种选择: (1)PARA(节)规定段的起始地址总是16的整数倍,即低四位为零,省略时,系统隐含为此方式,教材中均默认为PARA方式。 (2)WORD (字)规定段的起始地址总是2的整数倍,即低1位为零。 (3) Byte(字节)规定段的起始地址总是1的 整数倍,即能被1整除,任何地址可为段地址, 不留空隙。(4)Page( 页)规定段的起始地址总是256的整数倍,即低8位为零。组合方式提供本段同其他段的组合关提供本段同其他

8、段的组合关系系,有6种选择方式。(1)NONE不选择表示本段与其他逻辑上不发生关系,尽管物理上可能相邻,但每段都有自己的段首址。系统隐含该组合方式,单模块程序,各段之间不发生关系,采用不选择方式,教材中多数例题的数据段,代码段均为不选择方式。(2)PUBLIC公共将同段名,同类别名的段顺序相拼,是否留有空隙取决与定位方式。(3)STACK堆栈将同段名,同类名的段顺序相拼,不留空隙,长度相加,构成堆栈段。一个程序模块中至少有一个段为STACK组合方式的段。(4)COMMON公用将同名段,同类别名的段相互覆盖,长度取决于最长的段。(5)AT表达式段地址为表达式的值。(6)MEMORY表示将本段定位

9、在其他段的上面(即最高地址)。类别名用单引号括起来的字符串,连接时将同类别名的所有段(段名可不同)存放在连续的存储区。单模块程序可省略类别名。2 2、假定伪指令假定伪指令 格式:ASSUME段寄存器:段名, 功能:告诉汇编程序各段名与段寄存器的对应关系,一般在代码段中。因为,存储器分段管理,程序中的存储单元用逻辑地址的偏移地址来寻址,而段地址一般默认,所以,代码段一开始就要对段 寄存器与段之间的关系做假定。3、源程序结束伪指令格式:END 表达式功能:源程序的最后一个语句,标志整个程序结束,即告诉汇编程序,汇编到此结束。表达式为可选项,必须是存储器地址,即程序的启动地址,常为标号。不带表达式的

10、END结束的模块不能单独运行,为子模快。4 4、子程序定义伪指令、子程序定义伪指令格式:子程序名PROC NEAR或FAR : RET 子程序名ENDPPROCENDP必须配对使用。子程序名有标号属性,一般段内调用为NEAR或省略,段间调用为FAR。RET为子程序返回指令,返回调用主程序: 段内:SP IP,SP+2 SP 段间:SP IP,SP+2 cs,SP+4SPSTACK SEGMENT STACK DW 32 DUP(?)(?)STACK ENDSDATA SEGMENT :DATA ENDSCODE SEGMENTBEGIN PROC FAR ASSUME CS:CODE,SS:S

11、TACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX : RETBEGIN ENDPCODE ENDS END BEGIN定义堆栈段及堆栈长度定义数据段定义代码段将汇编源程序视为DOS下的子程序将程序段前缀PSP进栈设置用户数据段返回到PSP,执行PSP中的第一条指令 INT 20H,结束程序返回调用程序STACK SEGMENT STACK DW 32 DUP(?)(?)STACK ENDSDATA SEGMENT :DATA ENDSCODE SEGMENTBEGIN PROC FAR ASSUME CS:CODE,SS:

12、STACK,DS:DATA PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX : RETBEGIN ENDPCODE ENDS END BEGIN例、两个数据交换。DT1 DB 11HDT2 DB 22HMOV AL,DT1MOV AH,DT2MOV DT1,AHMOV DT2, ALSTACK SEGMENT STACK DW 32 DUP(?)(?)STACK ENDSDATA SEGMENT DATA ENDSCODE SEGMENTBEGIN PROC FAR ASSUME CS:CODE,SS:STACK,DS:DATA PUSH DS

13、SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX : RETBEGIN ENDPCODE ENDS END BEGIN上机调试作业,如:P32、17.MOV AX,1122HMOV BX,3344HMOV CX,5566HPUSH AXPUSH BXPUSH CXPOP BXPOP AXPOP DX三、常量(三、常量(P34)1、常量 常数和符号常量主要给变量赋初值或指令中立即数等。常数汇编中允许的常数有二进制,十进制,十六进制,字符串(ASCII码字符,用单引号表示,如: ABC)。 符号常量程序中可以给常数取名。用EQU或“伪指令定义。格式:标识符EQU表达式

14、数值表达式 标识符表达式例: AA EQU 10 BB EQU 2*AA+3 CC = 66 MOV AX,AA ;AX=10 MOV AX, BB ;AX=23 MOV AX, CC ;AX=66注:AA,BB,CC为立即数。2、 数值表达式由常量与运算符组成的有意义的式子,结果为数值。在MASM中允许对常量进行三种类型的运算:(1)算术运算+,*,/,MOD(求余),SHR(右移),SHL(左移) 如:AA EQU 10, 则表达式AA 32 32,可以作为操作数。 (2)逻辑运算AND,OR,XOR,NOT,按位运算。 注意:将运算符与指令相区别。例:X EQU 0FFFFH MOV A

15、X,5555H AND AX,X AND 0FFH; AX=0055H (3)关系运算EQ(),NE(),LT(),GT(),LE(),GE() 关系运算的结果为两个特殊常量0FFFFH(TURE),0(FALSE)。四四 、变量(、变量(P34)变量是存储器中的数据或数据区的符号地址表示,即给存储单元取名。1、变量的三个属性存储器分段,变量有三个属性。 (1)段属性定义变量所在段的段首地址(一般为DS)。 (2)偏移地址变量偏离段首址的字节数,即段首址到变量定义语句的字节距离。 (3)类型属性存取该变量中的数据所需要的字节数。 类型:字节,字,双字,四字,十字节类型,一个数据分别占1,2,4

16、,8,10个单元,其类型由定义的伪指令确定。2 、变量的定义、变量的定义一般在数据段或附加数据段中用伪指令定义。格式: 变量名DB表达式;定义BYTE字节变量 变量名DW表达式;定义WORD字变量 变量名DD表达式;定义DWORD双字变量 变量名DQ表达式;定义QWORD四字变量 变量名DT表达式;定义TBYTE十字节变量 EQU伪指令不分配存储单元,但变量定义伪指令要分配存储单元。表达式确定了变量的初值。 表达式可以有以下几种形式: (1)常量或数值表达式存入数值。 (2)ASCII字符串(若串长 2,只能用DB定义,)存入ASCII码值。 (3)?分配一个空单元,无确定值。 (4)重复子句

17、,格式:N DUP(表达式)重复N次,其值由表达式确定。 (5)地址表达式由常量,变量,标号,间址寄存器(BP,BX,SI,DI)的内容和运算符等组成有意义的式子。如一个变量名就是一个地址表达式。可用DW或DD定义,若用DW则取它的偏移地址来初始化变量;若用DD则其偏移地址和段地址来初始化其变量。若有多个表达式,用逗号分隔。例:DATA SEGMENT ;段定义 DT1 DB 10,3*20 DT2 DB ABC,44H,45H DT3 DW 100H,5 DT4 DD 0FFFFH DT5 DB 0,?,?,?,0 AA EQU $DT1; $汇编地址计数器, 记录当前汇编地址为14H。 D

18、T6 DB 2 DUP(0,2 DUP(2,3) DT7 DW DT2 DT8 DD DT4 DATA ENDS存放示意:存放示意:DT1 DT2 DT3 DT4 0A 3C 41 42 43 44 45 00 01 FB FF FF FF 00 00DT5 DT6 00 XX XX XX 00 00 02 03 02 03 00 02 03 02 03DT7 DT8 02 00 0B 00 DATAL DATAH从变量中取数据属于直接寻址方式,注意与符号常量区别。例:MOV AX,AA ;立即寻址,AX=0014H MOV AX,DT3 ;直接寻址,AX=0100H MOV AL,DT2+2

19、 ;AL=43H变量一旦定义,则有类型,指令中类型一致例:MOV AX,DT1 MOV BL,DT3 注意区分变量的值与偏移地址: 变量名 偏移地址 变量的值 DT1 0000H 0AH DT2 0002H 41H DT3 0007H 0100H DT4 000BH 0000FFFFH偏移地址是16位无符号数在符号指令中的基址,变址,基址加变址三种寻址中,其偏移量可以是常数,或符号常量,还可以是变量名。若是变量名,它给出变量所在段的偏移地址,其意义是取变量单元中的数据,所以其类型要与另一操作的类型一致。例: MOV BX,0 MOV AX,DT3BX ;AX=0100H MOV AL,DT3B

20、X 常以间址、基址、变址访问一片连续的单元。例:LEA BX, DT2 ;BX0002H MOV AL, BX ;AL41H MOV AL, BX1 ; AL42H五、五、 标号标号存放某指令的符号地址,也可以是过程名(过程地址入口)注:变量是存放数据的符号地址。1、 标号的标号的三个属性三个属性 (1)段属性定义该标号所在段的段首址。 (2)偏移地址标号偏离段首址的字节数。 (3)类型两种:NEAR段内,FAR跨段2 、标号的定义、标号的定义 (1)书写在指令前,用:定义,只能为NEAR NEXT:MOV AL,SI ;定义近标 号NEXT (2)用PROCENDP伪指令定义过程名例:ABC

21、 PROC FAR;定义过程名ABC为远标号 DEF PROC NEAR;定义过程名DEF为近标号六、六、 变量,标号属性运算符变量,标号属性运算符前面已知由变量,标号,常量,寄存器内容和运算符组成的式子地址表达式,它们的结果是地址,所以仍有属性,运算符除可以使用数值表达式的运算符外,还有一些特别的(最常用)符号。1、 类型运算符类型运算符PTR(P36) 格式:类型PTR地址表达式 类型BYTE,WORD,DWORD,NEAR,FAR五种。 作用指明表达式的类型,不管他原来有无类型,均以PTR前的类型为准。 只改变类型属性,不改变段属性和偏移地址属性。 例1:DTA DB 33H,44H M

22、OV AX,DTA MOV AX,WORD PTR DTA 表示临时改变DTA为字类型。例2:MOV 4SI,55H MOV BYTE PTR 4SI,55H INC BX INC WORD PTR BX 明确操作数类型。例3:A DW 1122H,3344H ; 变量A为字类型 B EQU BYTE PTR A ; 变量B字节单元将同一存储单元用不同类型的变量(或标号)来表示。如: MOV AX, A MOV AL,B 执行结果均是:AL22H例4:NEXT:MOV AX,0 ;定义NEXT近标号 JMP FAR PTR NEXT 临时改变标号的类型为FAR。2、 跨段前缀符跨段前缀符 :

23、即跨段或段超越 格式:段寄存器名:地址表达式 作用用来临时改变变量,标号,地址表达式或指定的段属性,且只在所出现的语句中有效,不改变偏移地址和类型。例:MOV AX, BP ;(SS:BP)AX MOV AX, DS:BP ;(DS:BP)AX 3、 取段地址算取段地址算符符SEG取变量或标号的段地址。 例:MOV AX,SEG DT1 ;取DT1的段首址AX,段首址为常数,因此立即寻址。4、 取偏移地址算符取偏移地址算符OFFSET取变量或标号的偏移地址。 例:MOV BX,OFFSET DT1 ;取变量DT1的偏移地址BX, 立即寻址。 等效:LEA BX, DT1 ;但为直接寻址。 作业

24、: P72、10. 2.3 符号指令的寻址方式符号指令的寻址方式 一条符号指令,由操作码(助记符)指明进行什么样的操作,操作数告之操作的对象,操作数可以放在寄存器或存储单元中,寻找操作数(地址)的方式寻址方式。一、立即寻址一、立即寻址操作数直接放在符号指令中操作数直接放在符号指令中。 例:MOV AX, 2000H ; AX=2000H 助记符 目的 源操作数 注:立即数可以是8位或16位,负数用补码表示。 例:MOV BL, 1; BL=0FFH MOV CX, 5; CX=0FFFBH 立即寻址方式主要用来给寄存器或存储单元赋初 值,也可以与寄存器或单元进行算术逻辑运算。 因为直接书写在指

25、令中,操作对象直观,清晰,所以常用。二二.寄存器寻址寄存器寻址操作数在指定的寄存器中操作数在指定的寄存器中例例: MOV CX, BX ; CX=BX 寄存器可以是8位或16位的寄存器。例例: MOV CL, BH ; CL=BH 因为寄存器在CPU内部,所以采用寄存器寻址可提高运行效率,特别是AX,用它存放运算结果,则执行指令的时间短些,所以最常用。三三.直接寻址直接寻址操作数在内存中,其偏移地址由操作数在内存中,其偏移地址由 指令直接给出。指令直接给出。 而操作数一般在DS段(默认)。例:MOV AX, DS:2000H 或 MOV AX,2000H; (DS:2000H)AX偏移地址,又

26、称有效地址,此处源操作的EA=2000H 若偏移地址是数值常量,则应在偏移地址前加段名。 区分立即数与直接寻址。 直接寻址常用已定义的变量表示。 例:VARX DW 1122H,4455H VARY DB 33H MOV AX, VARX; AX=1122H MOV BX,VARX2 ; BX4455H MOV BL, VARY; BL=33H MOV VARY+1, AL; (VARY+1)=22H四四. 寄存器间接寻址寄存器间接寻址操作数在内存中,而操作操作数在内存中,而操作 数的地址的数的地址的16位偏移量包含位偏移量包含在在SI, DI, BX, BP 之一中,即寄存器的内容为操作数之

27、一中,即寄存器的内容为操作数的的EA. SI DI EA= BX BP 1. 若以SI, DI, BX 间址,操作数在DS段。 例:MOV AX, SI ; (DS:SI)AX, 即(DS:SI)AL, (DS:SI+1)AH 2.若以BP间址,操作数在SS段。 例:MOV AX, BP ; (SS:BP)AL, (SS:BP+1)AH 只有只有SI,DI,BX,BP 可作为间址寄存器,如可作为间址寄存器,如 MOV AX,CX 间址时,寄存器的内容是有效地址,所以称为间址时,寄存器的内容是有效地址,所以称为地址地址指针指针,主要用于存取存储单元中的数据,只要修改,主要用于存取存储单元中的数据

28、,只要修改寄存器内容,用一条指令便可访问一片连续单元。寄存器内容,用一条指令便可访问一片连续单元。如:如:INC SI五五.基址寻址基址寻址操作数在存储器中,操作数在存储器中,但操作数的但操作数的地址地址的偏移地址的偏移地址在在BX或或BP中的内容与指令中给出的中的内容与指令中给出的8位位或或16位位移量之和。位位移量之和。 BX 8位或16位 EA= BP + 位移量 1.若以BX为基址,操作数在DS段 例: MOV BL,2BX 或 MOV BL,BX+2 ;(DS:BX+2)BL2. 若以若以BP为基址,操作数在为基址,操作数在SS段段 例:MOV BX,6BP 或 MOV BX,BP+

29、6 ;(SS:BP+6)BL, (SS:BP+7)BH 所以所以BX,BP 称为基址寄存器。称为基址寄存器。 六六. 变址寻址变址寻址操作数在存储器中,但操作数在存储器中,但操作数的偏移操作数的偏移地址地址为为SI或或DI的内容与指令中给定的的内容与指令中给定的8位或位或16位位移量位位移量之和,与基址寻址类似。之和,与基址寻址类似。 SI 8位或16位 EA= DI + 位移量 例:MOV AX,2SI 或 MOV AX,SI2 ;(DS:SI2) AL, (DS:SI1) AH 操作数在操作数在DS段,可用于变址的寄存器只能是段,可用于变址的寄存器只能是SI,DI,所以称变址寄存器。所以称

30、变址寄存器。七七.基址加变址寻址基址加变址寻址操作数在存储器中,但操作操作数在存储器中,但操作数的偏移地址数的偏移地址是指令中指定的基址寄存器的内容,是指令中指定的基址寄存器的内容,变址变址寄存器内容及位移量之和,即前两种方式的组寄存器内容及位移量之和,即前两种方式的组合。合。八八. BX DI 8位或16九. EA= BP + SI + 位移量 例: MOV AX, 4BXDI 或MOV AX,BX+DI+4 ;(DS:BX+DI+4) AL (DS:BX+DI+5) AH 以BX为基址寻址,操作数在DS段,以BP为基址寻址,操作数在SS段。 小结:小结: 1.以上寻址方式,除立即寻址外,亦

31、可用于目的操作数的寻址。 如:MOV 2BX,AX; AX(DS:BX+2) 即源操作数7种方式,目的操作数6种寻址方式2.除以上7种寻址方式,还有一种隐含寻址(implied addressing), 即操作数在符号指令中不显示出来,而隐含某寄存器为操作数。如: PUSHF 仅有助记符, 操作数隐含: 源F, 目的SP POPF 源SP, 目的F八、存储器寻址中段寄存器的指定存储器寻址中段寄存器的指定1. 因为存储器分段管理,在内存中寻找操作数除因为存储器分段管理,在内存中寻找操作数除了偏移地址外,指令中若没有特别声明,则段了偏移地址外,指令中若没有特别声明,则段有一个有一个基本约定基本约定

32、默认状态,约定关系:默认状态,约定关系:P、41、表表21 访问存储器访问存储器 约定约定 可更可更 偏移偏移 的方式的方式 段段 换段换段 地址地址 取指令 CS 无 IP 堆栈操作(PUSH, POP,CALL,RET 等) SS 无 SP 数 通用数据存取 据 (直接寻址, BX, DS CS,SS,ES EA 存 SI,DI,间址) 取 以BP间址,基址 SS CS,DS,ES EA 字符串源地址 DS CS,SS,ES SI 字符串目的地址 ES 无 DI 2. 跨段或段超越跨段或段超越 当要否认以上默认状态,到其他段寻找操作数时,必须用跨段前缀指明操作数所在段的段寄存器名。 例:

33、MOV AX, ES:SI;(ES:SI) AL,(ES:SI+1) AH MOV AX, DS:BP; (DS:BP) AL, (DS:BP+1) AH MOV AX, CS:BX; (CS:BX) AL, (CS:BX+1) AH 注意:显示说明高于默认状态。 注:实际上,不管是跨段或默认段,操作数的PA由系统 自动计算,程序中表示都使用逻辑地址,而不使用物理地址。作业: P71、 3. 2.4 常用符号(机器)指令常用符号(机器)指令8088系统有庞大的指令系统,形式多样,功能极强,用115个指令助记符代表91种操作,可分六大类: 数据传送指令 算术运算指令 位操作(逻辑运算)指令 串操

34、作指令 控制转移指令 处理机控制指令。注:学习时注意指令格式及功能。 在此先介绍:传送,算术,位操作指令。一一.数据传送指令数据传送指令最基本、大量、主要操作最基本、大量、主要操作 1.数据传送指令数据传送指令 格式: MOV DST, SRC 目的操作数 源操作数 功能:将源操作数传送至目的地址中,源保持不变。 (SRC)DST传送指令的特点是:把数据从计算机的一个部位传送传送指令的特点是:把数据从计算机的一个部位传送到另一个部位,把发送部位源,接收部位目的;源SegReg,Reg,Mem,Imm;目的SegReg,Reg,Mem.两操作数类型相同,即同为字节或字类型的数据。类型明确,不能出

35、现二义性(即不能模糊)。CS任何时候都不能为目的操作数,立即数亦不能为目的操作数。 源和目的不能同时为存储器操作数。 不影响任何标志位(所有传送)。能实现的传送示意如下: 段寄存器SegReg 通用寄存器Reg CS, DS, ES,SS AX,BX,CX,DX 立即数Imm 存储器 Mem BP,SP,DI,SI 由上表可由上表可总结出九种形式:总结出九种形式: P、42、例:判断下列指令正确与否: MOV AL, BL MOV CX, BX MOV BX, DL 类型不一致 MOV DX, 34H MOV DS, 1234H 立即数不能送段寄存器 MOV ES, AX MOV CS, BX

36、 CS不能作目的操作数 MOV SI, CX MOV DI, 10 源为立即数,无类型, 目的类型模糊, 二义性 MOV DI, SI 不能同时为存储器 MOV 2000H, AX 目的不能为立即数 MOV DS:2000H, AX 2. 数据交换指令数据交换指令 格式:XCHG DST, SRC 操作: (DST) (SRC) 即源地址与目的地址中的内容互换 交换只能在通用寄存器Reg之间,存储器Mem与通用寄存器Reg之间进行。至少一方为Reg.例:XCHG AX, BX XCHG BH, BL XCHG AX, 1122H XCHG DS, AX XCHG SI, BP XCHG SI,

37、 DI 3. 地址传送指令地址传送指令 将地址传送至目的将地址传送至目的 传送偏移地址 格式:LEA Reg16, Mem 操作:将源操作数提供的寻址方式计算的有效地址 EA Reg16 例:例:LEA SI, DS:2000H ; SI=2000H ,即即 EASI LEA DI, SI+2 ; DI=2002H 区分区分 MOV SI, DS:2000H; (DS:2000H) SI 传送偏移地址及数据段首地址 格式:LDS Reg16, Mem32表示双字类型 操作:(Mem32) Reg16, (Mem32+2) DS 或(EA) Reg16 , (EA+2) DS 亦即源地址指针的第

38、一亦即源地址指针的第一个字个字Reg16,第二个字第二个字DS。 用来传送一个目标地址用来传送一个目标地址(段地址和偏移地址段地址和偏移地址),常用来为存常用来为存取非当前数据段中的数据作地址准备。取非当前数据段中的数据作地址准备。 例:设 DS:1002 33 执行 MOV BX, 1000H 1003 44 LDS SI, 2BX; SI=4433H 1004 55 DS=6655H 1005 66 传送偏移地址及附加数据段首地址指令 格式:格式:LES Reg16, Mem32 操作:操作:(EA) Reg16, (EA+2) ES 除把目标段地址送ES外,其它同LDS。4. 查表转换指

39、令查表转换指令 格式格式:XLAT 或 XLAT SRCTAB 操作:操作:(BX+AL) AL, 即将BX为首址,AL为位移量的字节单元的内容AL 该指令常用于进行代码转换,转换时先建立相应表。表首址BX,与表有关的某个偏移值 (一般为被传送的字节到表头地址的字节数) AL 。 该指令的操作数是隐含寻址,不带操作数或带表头地址. 例: 利用查表指令,求某数(09)的平方值。如查7的平方。 先建09平方表,首址BX, 待查值AL TAB DB 00H,01H,04H,09H,16H,25H,36H,49H,64H,81H LEA BX, TAB MOV AL, 7 XLAT ; AL=49BC

40、D 注:以上传送类指令均不影响标志。BCD数二二.算术运算指令算术运算指令 8088提供了加、减、乘、除四种基本算术操作的提供了加、减、乘、除四种基本算术操作的20种指种指令,可进行字节或字运算,也可用于带符号或无符号数的令,可进行字节或字运算,也可用于带符号或无符号数的运算。运算。1.加法运算加法运算 加法指令加法指令 格式:ADD DST, SRC 操作:(DST)+(SRC) DST 即将目的操作数与源操作数相加,结果存入目的地址中,而源地址内容不变。 目的Reg, Mem 源Reg, Mem, Imm 只有5种形式,P46。 两操作数的类型相同,类型明确,不能同为存储器。 例:判断正确

41、与否:例:判断正确与否: ADD AL, BX ADD CL, CH ADD AX, BX ADD BX, 28 ADD BX, SI ADD 1000H, AX ADD SI, BX ADD DS, BX 加法指令执行后的结果将影响状态标志。 例例:MOV BL, 97H ADD BL, 85H ; BL=1CH 1001 0111 + 1000 0101 1 0001 1100 CF=1 OF=1 0=1 SF=0 ZF=0 一般算术运算关心四个算术标志,填入F中,其余位填0,F结构:F的格式:D15 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0 0 0 0

42、0 OF 0 0 0 SF ZF 0 0 0 0 0 CF 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 得 F=0801H 带进位加法指令带进位加法指令格式:ADC DST, SRC操作:(DST)+(SRC)+CFDST 该指令主要用于多字节运算,多字节运算时低位字节产生的进位应加到高位。单字节表示一个数的范围小,精度低,为提高精度,可用多个字表示一个数。 如:一个字表示一个数单精度数(16位), 两个字表示一个数双精度(32位),多个字多倍精度等。 例: 两个双精度数(32位)相加 0123FAB5H+0ABC212AH=0BE01BDFH 0123 FAB5 MOV

43、DX,0123H + 0ABC 21 2A MOV AX,0FAB5H 0BE0 1BDF ADD AX, 212AH ; 先加低字 CF=1 AX=1BDFH ADC DX, 0ABCH ; 高字带进位加 CF=0 DX=0BE0H CF为前面指令产生的CF 增量(加增量(加1) 指令指令 格式: INC DST 操作: (DST)+1DST 例: MOV BX, 1 INC BX; BX=0002H 该指令不影响CF,而影响其它标志,规律同ADD。 单操作数指令,只能为Reg,Mem,类型明确,不能出现二义性。 例:INC CL INC DI INC BYTE PTRDI INC 2000

44、H 该指令常用于修改偏移地址和计数次数。2. 减法指令减法指令 减法指令减法指令 格式:SUB DST, SRC 操作:(DST) (SRC) DST 带借位减指令带借位减指令 格式:SBB DST, SRC 操作:(DST) (SRC) CF DST 除两操作数相减以外,再减去前面指令的进位(借位)。例:双精度数相减例:双精度数相减 5321A678H1234F000H=40ECB678H MOV AX, 0A678H MOV DX, 5321H 5321 A678 SUB AX, 0F000H ; CF=1 1234 F000 SBB DX, 1234H ; CF=0 30EC B678

45、减量(减减量(减 1)指令)指令 格式: DEC DST 操作: (DST) 1DST DEC不影响CF,其余标志均受影响,影响关系同ADD指令。3. 比较指令比较指令 格式:CMP DST, SRC 操作: (DST) (SRC) 比较后影响标志,不回送结果。源、目的不变。该指令主要用来判断比较两数的大小,与是否相等。作业: P71、 4. 6. 7. (2). (3). 9.(3). (4).三三. 位操作指令位操作指令包括逻辑运算与包括逻辑运算与 移位类指令移位类指令 1.逻辑运算逻辑运算 求补指令求补指令 格式:NEG DST操作: (DST)+1DST 即将操作数单元的内容求反加1后

46、(包括符号位)又送入原单元中.例: MOV AX,1 ; AX=0001H (前1) NEG AX ; AX=0FFFFH (后1)例:MOV BL,0FFH ; BL=0FFH (前1) NEG BL ; BL=01H (后1)区分,它是进行求补操作,而不是求补码指令。它不管操作数是否带符号,是正是负,也不管是原码补码。若将执行求码指令前后的数均视为补码形式的符号数,求补指令则将该数变为绝对值相等符号相反的另一个数。若已知AX中的一负数的补码,则只要NEG AX,则求其绝对值。单操作数指令,操作数只能是Reg,Mem,且类型明确。影响标志,影响规律同减法类指令。因为求补等效 0 (DST)D

47、ST(2)求反指令格式:NOT DST操作:(DST)DST,即将操作数的内容逐 位取反后再送入。例: MOV AX,1 NOT AX ;AX=0FFFEH该指令只是执行求反操作,而不是求反码指令,对符号位也求反。该指令不影响标志位。(3)逻辑与指令(乘)逻辑与指令(乘)格式:AND DST,SRC操作: (DST)(SRC)DST,两操作数按 位逻辑与运算例:MOV AX,5555H AND AX,0FFH ;AX=0055H屏蔽高位(高位清零) ,取出低位;即对应位为0则清0,对应位为1则不变称这种数为逻辑尺。(4)逻辑或指令)逻辑或指令 格式:OR DST,SRC 操作: (DST)(S

48、RC)DST 即两操作数按位逻辑“或”运算 例:MOV AX,8888H; OR AX,0FFH ;AX=88FFH对应1位置1,对应0位则不变。(5)逻辑异或指令)逻辑异或指令 格式:XOR DST,SRC 操作: (DST)(SRC) DST, 即两操作数按位异或例: MOV AX, 3333H; XOR AX,0FFH ; AX=33CCH对应0不变,对应1求反例: XOR AX,AX ; AX=0 清零有4条指令可达到AX清0目的: MOV AX,0 SUB AX,AX AND AX,0三条逻辑指令均为双操作数指令,对源,目的要求同ADD,SUB指令. 三条逻辑指令均影响标志:使CF=

49、0,OF=0,而PF,SF,ZF由结果而定,AF无意义,所以此类指令可用来清CF,常用于拆字,拼字.例:将BX的高四位与CX的低四位,AX的中间8位反码,拼成新字送至AX如:AX=AAAAH BX=BBBBH CX=CCCCH AX=B55CHAND BH,0F0H ; 取BX高四位,BH=B0HAND CL,0FH ; 取CL低四位, CL=0CHAND AX,0FF0H ; 取AX中间八位,AX=0AA0HXOR AX,0FF0H ;求反 AX=0550HOR AH,BH OR AL,CL ; 拼字 AX=B55CH(6) 测试指令测试指令格式: TEST DST, SRC操作: (DST

50、) (SRC) 根据测试结果影响标志(规律同AND),不回送结果。该指令主要用来检测目的操作数的某些位是1或0,根据测试结果,决定转向.2.移位类指令移位类指令(1)逻辑右移逻辑右移(2) 格式: SHR DST, CNT(移位位数为1或CL)(3) 操作: 0 CF (4) (5)例: MOV AL,0CH ; AL=12(6) SHR AL,1 ; AL=6 该指令右移一次,等于对无符号数除2运算,右移N次,等于除2N。例:对AX中的无符号数进行除8运算(不考虑余数) MOV CL,3 SHR AX,CL(2)算术右移)算术右移格式: SAR DST, CNT(移位位数为1或CL) 操作:

51、 CF 例: MOV AX, 8 ;AX=0FFF8H8 SAR AX, 1 ; AX=0FFFCH4 算术右移一位,等于对带符号数进行2运算,右移N次,等于2N。(3) 逻辑左移逻辑左移格式: SHL DST, CNT 操作: CF 0(4) 算术左移算术左移格式: SAL DST, CNT 操作: CF 0 注:SAL指令与SHL指令操作一样,即机器码一样。例: MOV BL,0CH ;BL=12 SHL BL, 1 ; BL=24 左移一位,等于对操作数(带符号或无符号)乘2运算,左移N次, 则乘2N,但防止溢出.例:对AX内容进行乘10运算(设无溢出,乘10后仍为一个字).AX 10=

52、AX (23+2)=AX 2+AX 23MOV BX, AXSAL BX, 1 ; 2BXMOV CL, 3SAL AX, CL ; 23AXADD AX, BX ; 10AX以上四条移位指令均影响F标志,CF为最后输入值。 (5) 循环右移循环右移格式: ROR DST, CNT操作: CF (6) 循环左移循环左移格式: ROL DST, CNT操作: CF 例: MOV AL,45H MOV CL,4 ROL AL,CL ; AL=54H,高四位与低四位互换,使用ROR也一样。 (7) 带进位循环右移带进位循环右移格式: RCR DST, CNT操作: CF (8) 带进位循环左移带进位

53、循环左移格式: RCL DST, CNT操作: CF 此四条循环移位指令只影响CF,不影响其它标志。 当想把一个寄存器或单元的内容,移至另一个单元时,常用带进位移.前面指令产生的CF移至最高位前面指令产生的CF移至最低位例: 将AX中的无符号数乘以10(AX=F0F0H)。 结果可能大于2161=65535要用两个寄存器存放,即积DL:AX10=(23+2)可用移位和加法实现 XOR DL,DL ;积高位清零 SAL AX,1 ; 2 RCL DL,1 MOV DH,DL ;2DH:BX MOV BX,AX SAL AX,1 ;4 RCL DL,1 SAL AX,1 ;8DL:AX RCL D

54、L,1 ADD AX,BX ; 10 ADC DL, DH另解:使用移位3次的方法(AX=F0F0H):MOV BX,AX ;*2DH:BXROL BX,1 ;BX=1110 0001 1110 0001BMOV DH,BL ;DH=1110 0001BAND DH,01H ;DH=0000 0001BAND BX,0FFFEH ;BX=1110 0001 1110 0000BMOV CL,3 ;8DL:AXROL AX,CL ;AX1000 0111 1000 0111BMOV DL,AL ;DL1000 0111BAND DL,07H ;DL0000 0111BAND AX,0FFF8H

55、;AX1000 0111 1000 0000BADD AX,BXADC DL,DH作业:P72、 5. 8. (课本) 9.(2).(5).(6).2.5 2.5 常用常用DOSDOS系统功能调用和系统功能调用和 ROM BIOSROM BIOS中断服务子程序调用中断服务子程序调用 为使结果直观的显示在输出设备上,最简单的方法就是调用DOS中的输入/输出子程序。实际上PC系统为方便汇编用户提供了两个程序接口,一个是DOS系统功能调用,另一个是ROM中的BIOS(Basic Input /OutpuT System)。它们由一系列中断服务子程序构成,由软中断指令 INT N 来调用。 一、一、D

56、OSDOS系统功能调用系统功能调用1、调用过程是:置入口参数功能调用号AH执行INT 21H分析出口参数视具体情况而定2 2、常用功能调用、常用功能调用键入,输出,打印键入,输出,打印。 参见参见P63P63、表示表示2 23 3。1号 键入一个字符无入口参数 出口:键入字 符ASCII码值在AL中,回显。2号显示一个字符入口:将显示的字符ASCII 送 DL 无出口参数。5号打印一个字符入口:将打印的字符ASCII 送DL 无出口参数。8号键入一个字符无入口参数出口: 键入字符ASCII值在AL中,不回显,便于保密。9号显示一串字符入口:DX指字符串首地 址,字符串以结束无出口参数。10号键

57、入一串字符入口:DX指向输入缓冲区首址出口:字符串个数在“首址+1“单元,字符串在“首址+2“单元。11号检查键盘有无键入无入口参数出口:有键入AL=0FFH,无键入AL=0。例: MOV AH , 1 INT 21H 等待键入一个字符ASCII码值AL例: MOV AH , 2 MOV DL , B 显示字符 B INT 21H例: BUF DB HELLO,0DH,0AH, LEA DX ,BUF MOV AH,9 INT 21H例: IBUF DB 4 ,? , 4 DUP(?) MOV DX , 0FFSET IBUF MOV AH,10 INT 21H显示:HELLO等待输入3个字符

58、缓冲区最大长度实际输入个数存放输入的字符和回车符例:例: “ “镜子镜子”程序程序从键盘输入一串字符,在从键盘输入一串字符,在下一行照原样显示下一行照原样显示(P67)(P67)。 STACK SEGMENT STACKSTACK SEGMENT STACK DW 32 DUP DW 32 DUP(?)(?) STAC ENDSSTAC ENDS DATA SEGMENT DATA SEGMENT OBUF DB OBUF DB ,0DH0DH,0AH0AH, IBUF DB 0FFHIBUF DB 0FFH,?,?,0FFH DUP0FFH DUP(?)(?) DATA ENDSDATA E

59、NDS CODE SEGMENT BEGIN PROC FAR ASSUME SS:STACK, CS: CODE,DS:DATA PUSH DS PSP首址进栈,为返回DOS设置 SUB AX , AX 返回地址 PUSH AX MOV AX , DATA 设置用户数据段 MOV DS , AX MOV DX,OFFSET OBUFMOV AH , 9 显示输入提示INT 21H 并,换行LEA DX , IBUF 键入字符串MOV AH , 10 串长在IBUF+1 INT 21H 串首址IBUF+2 MOV BL ,IBUF+1 MOV BH , 0 长度BX MOV IBUFBX+2,

60、 串尾存 MOV DL , 0AH 因为输入已有 MOV AH , 2 所有只需换行 INT 21H MOV DX ,OFFSET IBUF+2 MOV AH ,9 显示键入的串 INT 21H RET PSP首址出栈CS:IPBEGIN ENDP CODE ENDS ; 结束用户程序 END BEGIN FF IBUF 如输入:ABCDE内存分配 05 +1 41 +2 42 43 44 45 0D (24H) 例(P65)、键入4位十进制数,以压缩BCD形式存入字变量SW单元中。IBUF DB 5,?,5 DUP(?)SW DW ?MOV DX,OFFSET IBUFMOV AH,10IN

61、T 21HMOV AX,WORD PTR IBUF+4AND AX,0F0FHMOV CL,4SHL AL,CLOR AL,AHMOV BYTE PTR SW,ALMOV AX,WORD PTR IBUF2AND AX,0F0FHSHL AL,CLOR AL,AHMOV BYTE PTR SW1,AL作业:P73. 11. 12. 13.(作业本) 14.(课本)二、BIOSBIOS基本输入基本输入/ /输出系统功能调用输出系统功能调用 BIOS系统由一系列的服务程序构成,也是通过执行软中断指令INT N 来调用。BIOS包括系统服务程序和设备驱动程序。其驱动程序和DOS驱动程序相似,主要功能

62、是驱动系统中所配置的常用设备,如显示器,键盘,打印机,磁盘驱动器以及异步通讯接口等。用户可方便的控制外设操作,和DOS相比,它能完成更复杂的、更细微的I/O操作。在此仅介绍键盘、打印机、显示器的服务程序。1、调用方法和、调用方法和DOSDOS功能调用相同功能调用相同 置入口参数功能号送AH 执行INT N 分析出口参数2、键盘输入子程序键盘输入子程序 调用指令:INT 16H 有三个功能,功能号为:02 (P68表24) 例: MOV AH , 0 INT 16H 3、打印机服务子程序打印机服务子程序 调用指令: INT 17H 有三个功能,功能号为:02 读一个字符AL AH=0 功能:打印

63、一个字符入口:将打印字符AL , 打印机号02 DX 注:BIOS可支持三个打印机,一般为0号。 AH=1 功能:初始化打印机 AH=2 功能:读打印机状态例: MOV AL , B MOV DX , 0 打印B字符 MOV AH , 0 INT 17H4、显示子程序显示子程序 调用指令:INT 10H 有16种功能,功能号为:015 参见P、69表25例、 在屏幕的5行、10列位置显示闪烁的高亮度的。MOV AH , 0 设显示方式为80列25行的黑白MOV AL , 2 文本方式 INT 10HMOV AH ,15 读当前显示页号BH INT 10H 因为下面2号和9号需设页号MOV AH

64、 ,2 MOV DX , 050AH 设光标位置在5行、10列 INT 10HMOV AH ,9 在当前光标位置写字 符和属性MOV AL , 设写字符MOV BL , 8FH 字符显示属性1000 1111MOV CX ,1 写一次 INT 10H 写高亮度闪烁的例、 在320200彩色图形方式下,在白色背景下, 在(10,10)的位置写一个绿色点。MOV AH , 15 INT 10H 读显示器状态,暂存 PUSH AX MOV AX ,0600H 6号功能,AL=0 清屏MOV CX , 0 左上角坐标(0,0) MOV DX , 184FH 右下角坐标(24,79)MOV BH , 7

65、 常规属性黑底白字 INT 10H 清屏 MOV AH ,0 MOV AL , 5 置320200彩色图形方式 INT 10H55FH,则设为102476855BH,则设为800600MOV AH ,11MOV BH ,0 设背景色MOV BL ,7 白色背景INT 10HMOV AH,11MOV BH, 1 设彩色组MOV BL,0 彩色组0INT 10HMOV AH ,12MOV DX ,10 MOV CX ,10 MOV AL ,1 INT 10H 在(10,10)处写绿色点 象点颜色由彩色组和彩色值共同决定WAT : MOV AH ,1 无键入则等待 INT 16H 有键入则顺序执行

66、JZ WAT POP AX MOV AH ,0 恢复原显示器状态 INT 10H 第二章结束例: 在800600的图形方式下,设白色背景,画一条品红色线,从(0,0)(599,599)。注:修改画点颜色,可画其他颜色的线,如AL=0,则画青色线,AL=4则画棕红色线。设置图形方式,与显示器适配卡有关。 INT 10H与BIOS版本有关。利用循环可画各种图形。 MOV AH,15 INT 10H 读显示器状态,暂存 PUSH AX MOV AH,0 MOV AL,6AH 设显示器方式为800600 INT 10H MOV AH,11 MOV BH,0 MOV BL,7 设白色背景 INT 10HMOV AH,11 MOV BH,1 MOV BL,1 设彩色组1INT 10H MOV DX,0 设初始点为(0,0) MOV CX,0 LOP: MOV AH,12 MOV AL,2 INT 10H 画线 INC DX INC CX CMP DX,599 JNE LOPWAT: MOV AH,1 INT 16H 等待按键 JZ WAT POP AX MOV AH,0 恢复显示器状态 INT 10H

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号