《微机原理与接口技术第4章.ppt》由会员分享,可在线阅读,更多相关《微机原理与接口技术第4章.ppt(97页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4 4章章汇编语言程序设计汇编语言程序设计1主要内容主要内容n n汇编语言源程序的结构汇编语言源程序的结构n n汇编语言语句格式汇编语言语句格式n n伪指令伪指令n n功能调用功能调用n n汇编语言程序设计汇编语言程序设计24.1 汇编语言源程序汇编语言源程序n n汇编语言源程序汇编语言源程序n n汇编程序汇编程序用助记符编写用助记符编写汇编程序汇编程序汇编语言汇编语言源程序源程序机器语言机器语言目标程序目标程序源程序的编译程序源程序的编译程序31、汇编语言程序执行过程、汇编语言程序执行过程n n输入汇编语言源程序(输入汇编语言源程序(输入汇编语言源程序(输入汇编语言源程序(EDITEDI
2、T)n n汇编(汇编(汇编(汇编(MASMMASM)n n链接(链接(链接(链接(LINKLINK)n n调试(调试(调试(调试(TDTD)源文件源文件.ASM目标文件目标文件.OBJ可执行文件可执行文件.EXE最终程序最终程序42.汇编语言源程序结构汇编语言源程序结构数据段名数据段名 SEGMENTSEGMENT 数据段名数据段名 ENDSENDS附加段名附加段名 SEGMENTSEGMENT 附加段名附加段名 ENDSENDS堆栈段名堆栈段名 SEGMENTSEGMENT 堆栈段名堆栈段名 ENDSENDS代码段名代码段名 SEGMENTSEGMENT 代码段名代码段名 ENDSENDS
3、ENDEND 53.汇编语言语句类型汇编语言语句类型指令性语句指令性语句指示性语句指示性语句CPU执行的语句,执行的语句,能够生成目标代码能够生成目标代码CPU不执行,而由汇不执行,而由汇编程序执行的语句,编程序执行的语句,不生成目标代码不生成目标代码64.汇编语言语句格式汇编语言语句格式 指令性语句:指令性语句:标号:标号:标号:标号:前缀前缀前缀前缀 助记符助记符助记符助记符 操作数操作数操作数操作数,操作数操作数操作数操作数 ;注释;注释;注释;注释 指令的符号地址指令的符号地址标号后要有冒号标号后要有冒号操作码操作码注释前加分号注释前加分号7指示性语句格式指示性语句格式 名字名字名字名
4、字 伪指令助记符伪指令助记符伪指令助记符伪指令助记符 操作数操作数操作数操作数 ,操作数,操作数,操作数,操作数,;注;注;注;注释释释释 变量的符号地址变量的符号地址其后不加冒号其后不加冒号8(1)标号、名字标号、名字n n标号后有冒号,在指令性语句前;名字后不标号后有冒号,在指令性语句前;名字后不标号后有冒号,在指令性语句前;名字后不标号后有冒号,在指令性语句前;名字后不加冒号,在指示性语句前。加冒号,在指示性语句前。加冒号,在指示性语句前。加冒号,在指示性语句前。n n标号标号标号标号符号地址符号地址符号地址符号地址 名字名字名字名字变量名、段名和过程名等变量名、段名和过程名等变量名、段
5、名和过程名等变量名、段名和过程名等n n英文字母、数字及专用字符组成英文字母、数字及专用字符组成英文字母、数字及专用字符组成英文字母、数字及专用字符组成,最大长度最大长度最大长度最大长度不能超过不能超过不能超过不能超过31313131个个个个,且不能由数字打头且不能由数字打头且不能由数字打头且不能由数字打头,不能用不能用不能用不能用保留字保留字保留字保留字(如寄存器名如寄存器名如寄存器名如寄存器名,指令助记符指令助记符指令助记符指令助记符,伪指令伪指令伪指令伪指令)。9(2)操作码操作码n n指令码指令码指令码指令码n n伪指令助记符伪指令助记符伪指令助记符伪指令助记符n n指示汇编程序要完成
6、的操作。指示汇编程序要完成的操作。指示汇编程序要完成的操作。指示汇编程序要完成的操作。n n作用:作用:作用:作用:n n定义变量定义变量定义变量定义变量n n分配存储单元分配存储单元分配存储单元分配存储单元n n指示程序开始和结束等指示程序开始和结束等指示程序开始和结束等指示程序开始和结束等命令命令CPU要完成的操作要完成的操作10(3)注注 释释n n用分号作为注释的开始;用分号作为注释的开始;n n用于说明程序或语句的功能,以用于说明程序或语句的功能,以便于阅读和理解便于阅读和理解11(4)操作数操作数 寄存器寄存器存储器单元存储器单元 常量常量 数据项数据项 标号标号 变量变量 表达式
7、表达式12常常 量量n n数字常量(二、十、十六进制)数字常量(二、十、十六进制)n n字符串常量字符串常量 例:例:A n nMOV ALMOV AL,AA 例:例:ABCD汇编时被译成对应的汇编时被译成对应的ASCII码码41414141H H H H,42424242H H H H,43H43H43H43H,44H44H44H44H用单引号引起的字符或字符串用单引号引起的字符或字符串13标号标号n n用符号表示的地址,称为符号地址用符号表示的地址,称为符号地址n n标号的三个属性:标号的三个属性:段地址段地址标号对应指令首字节所在段标号对应指令首字节所在段 的段地址的段地址 偏移地址偏移
8、地址段内的偏移地址。段内的偏移地址。类型类型NEARNEAR和和FARFAR14变变 量量n n代表内存中的数据区,程序中视为存储器操作数代表内存中的数据区,程序中视为存储器操作数代表内存中的数据区,程序中视为存储器操作数代表内存中的数据区,程序中视为存储器操作数n n变量的属性:变量的属性:变量的属性:变量的属性:段地址段地址段地址段地址变量所在段的段地址,变量在哪个段内定变量所在段的段地址,变量在哪个段内定变量所在段的段地址,变量在哪个段内定变量所在段的段地址,变量在哪个段内定 义,其段属性就是哪个段的段基址。义,其段属性就是哪个段的段基址。义,其段属性就是哪个段的段基址。义,其段属性就是
9、哪个段的段基址。偏移地址偏移地址偏移地址偏移地址变量所在段内的偏移地址,即从段的起变量所在段内的偏移地址,即从段的起变量所在段内的偏移地址,即从段的起变量所在段内的偏移地址,即从段的起 始地址开始到变量对应数据区的第一个存始地址开始到变量对应数据区的第一个存始地址开始到变量对应数据区的第一个存始地址开始到变量对应数据区的第一个存 储单元之间的字节数储单元之间的字节数储单元之间的字节数储单元之间的字节数 变量的段属性与偏移属性构成了变量的逻辑地址。变量的段属性与偏移属性构成了变量的逻辑地址。变量的段属性与偏移属性构成了变量的逻辑地址。变量的段属性与偏移属性构成了变量的逻辑地址。类型类型类型类型字
10、节型、字型和双字型字节型、字型和双字型字节型、字型和双字型字节型、字型和双字型15变变 量量注:注:n n变量类型与指令的要求必须相同变量类型与指令的要求必须相同n n定义变量时,变量名对应的是数据定义变量时,变量名对应的是数据区的首地址区的首地址16表达式表达式算术运算算术运算逻辑运算逻辑运算关系运算关系运算取值运算和属性运算取值运算和属性运算其它运算其它运算由操作数和运算符组成由操作数和运算符组成17算术运算和逻辑运算符算术运算和逻辑运算符n n算术运算符算术运算符n n+,-,*,/,MODMODn n逻辑运算符逻辑运算符n nANDAND,OROR,NOTNOT,XORXORn n例:
11、例:n nMOV ALMOV AL,8 AND 48 AND 4n nMOV ALMOV AL,8+4-18+4-118关系运算符关系运算符n n表示关系是否成立的运算符表示关系是否成立的运算符n n参与关系运算的必须是两个数值参与关系运算的必须是两个数值n n关系成立,结果关系成立,结果=FFFFHn n关系不成立,结果关系不成立,结果=0。n n运算符:运算符:n nEQEQ,NENE,LTLT,GTGT,LELE,GEGE例:例:例:例:MOV DL,16 LT 10MOV DL,16 LT 10 MOV DL,0 MOV DL,0 AND AX,555 GT 222 AND AX,55
12、5 GT 222 AND AX,0FFFFH AND AX,0FFFFH19取值运算符取值运算符取得其后变量或标号的偏移地址取得其后变量或标号的偏移地址取得其后变量或标号的段地址取得其后变量或标号的段地址TYPE 取取变量或标号的类型变量或标号的类型变量或标号的类型变量或标号的类型LENGTH 取所定义存储区的长度取所定义存储区的长度SIZE 取所定义存储区的字节数取所定义存储区的字节数n 用于分析存储器操作数的属性用于分析存储器操作数的属性OFFSETSEG20取值运算符例取值运算符例 MOV AX,SEG DATA MOV DS,AX MOV BX,OFFSET DATA LEA BX,D
13、ATA等价于等价于21取值运算符例取值运算符例n n若若若若BUFFERBUFFER存储区用如下伪指令定义:存储区用如下伪指令定义:存储区用如下伪指令定义:存储区用如下伪指令定义:BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0)BUFFER DW 200 DUP(0)则:则:则:则:TYPE BUFFERTYPE BUFFERTYPE BUFFERTYPE BUFFER 等于等于等于等于2 2 2 2 LENGTH BUFFER LENGTH BUFFER LENGTH BUFFER LENGTH BUFFER 等于等于等
14、于等于200200200200 SIZE BUFFERSIZE BUFFERSIZE BUFFERSIZE BUFFER 等于等于等于等于400400400400 对于变量有对于变量有对于变量有对于变量有3 3种:种:种:种:1 1 字节型;字节型;字节型;字节型;2 2 字型;字型;字型;字型;4 4 双字型双字型双字型双字型;对于标号有对于标号有对于标号有对于标号有2 2种:种:种:种:1 1 NEARNEAR(段内)段内)段内)段内)2 2 FARFAR(段间)段间)段间)段间)22属性运算符属性运算符n 用于指定存储器操作数的类型用于指定存储器操作数的类型n格式:格式:类型类型 PTR
15、 表达式表达式n 例:例:MOV BYTE PTR1000,0 MOV WORD PTR1000,0234.2 伪指令伪指令掌握:掌握:n n伪指令的格式及实现的操作伪指令的格式及实现的操作n n伪指令的应用伪指令的应用244.2 伪指令伪指令n n由汇编程序执行的由汇编程序执行的“指令系统指令系统”n n作用:作用:n n定义变量;定义变量;定义变量;定义变量;n n分配存储区分配存储区分配存储区分配存储区n n定义逻辑段;定义逻辑段;定义逻辑段;定义逻辑段;n n指示程序开始和结束;指示程序开始和结束;指示程序开始和结束;指示程序开始和结束;n n定义过程等。定义过程等。定义过程等。定义过
16、程等。25常用伪指令常用伪指令数据定义伪指令数据定义伪指令符号定义伪指令符号定义伪指令段定义伪指令段定义伪指令结束伪指令结束伪指令过程定义伪指令过程定义伪指令宏命令伪指令宏命令伪指令26一、数据定义伪指令一、数据定义伪指令n n用于定义数据区中变量的类型及大小用于定义数据区中变量的类型及大小n n格式格式:变量名变量名 DB 初值表达式初值表达式 变量名变量名 DW 初值表达式初值表达式变量名变量名 DD 初值表达式初值表达式 变量名变量名 DQ 初值表达式初值表达式变量名变量名 DT 初值表达式初值表达式271.数据定义伪指令助记符数据定义伪指令助记符n nDB DB 定义的变量为字节型定义
17、的变量为字节型定义的变量为字节型定义的变量为字节型n nDW DW 定义的变量为字类型(双字节)定义的变量为字类型(双字节)定义的变量为字类型(双字节)定义的变量为字类型(双字节)n nDD DD 定义的变量为双字型(定义的变量为双字型(定义的变量为双字型(定义的变量为双字型(4 4字节)字节)字节)字节)n nDQ DQ 定义的变量为定义的变量为定义的变量为定义的变量为4 4字型(字型(字型(字型(8 8字节)字节)字节)字节)n nDT DT 定义的变量为定义的变量为定义的变量为定义的变量为1010字节型字节型字节型字节型功能:功能:功能:功能:让汇编程序在内存中划出指定个数的存储让汇编程
18、序在内存中划出指定个数的存储让汇编程序在内存中划出指定个数的存储让汇编程序在内存中划出指定个数的存储单元,然后将这些存储单元与变量名联系起来,单元,然后将这些存储单元与变量名联系起来,单元,然后将这些存储单元与变量名联系起来,单元,然后将这些存储单元与变量名联系起来,并在存储单元中预置初值。并在存储单元中预置初值。并在存储单元中预置初值。并在存储单元中预置初值。28n n2、定义一组数据、定义一组数据 例例1:BUFF DW 1234H,56Hn n3、定义一串字符,定义字符串必须用、定义一串字符,定义字符串必须用 DB伪指令伪指令例例2:DATA1 DB ABCD,66H AB CD41H4
19、2H43H44H66H294.重复操作符重复操作符n n复制操作符复制操作符DUP可为一个数据区的各单元可为一个数据区的各单元预置重复的数值预置重复的数值 例:例:ALL_ZERO DB 0,0,0,0,0用复制操作:用复制操作:ALL_ZERO DB 5 DUP(0)305.“?”的作用的作用n n表示随机值,用于预留存储空间表示随机值,用于预留存储空间n nMEM1 DB 34H,A,?,?DW 20 DUP(?)(?)预留预留40个字节单元,每单元为随机值个字节单元,每单元为随机值随机数随机数占占1个字节单元个字节单元31数据定义伪指令例数据定义伪指令例n n例如:例如:例如:例如:B0
20、 DB 2B0 DB 2B0 DB 2B0 DB 2 B1 B1 B1 B1 DB 3 DB 3 DB 3 DB 3,5 5 5 5,?,?,?,?,9 9 9 9 B2 B2 B2 B2 DW 10H DW 10H DW 10H DW 10H,2 2 2 2DUPDUPDUPDUP(1234H1234H1234H1234H,?),?),?),?)B3B3B3B3 DD 1 DD 1 DD 1 DD 1,2 2 2 2 B4 B4 B4 B4 DB 0 DB 0 DB 0 DB 0,2 2 2 2DUPDUPDUPDUP(?,(?,(?,(?,1 1 1 1,2 2 2 2DUPDUPDUPD
21、UP(7 7 7 7))以上变量在内存以上变量在内存中的存放形式中的存放形式3233数据定义伪指令例数据定义伪指令例n nM1 DB How are you?M1 DB How are you?n nM2 DW 3 DUP(11H)M2 DW 3 DUP(11H),3344H3344H DB 4 DUPDB 4 DUP(?)(?)(?)(?)n nM3 DB 3 DUPM3 DB 3 DUP(22H22H,11H11H,?),?),?),?)以上变量在内存以上变量在内存中的存放形式中的存放形式34数据定义伪指令例数据定义伪指令例M1How aM211H11H00H44H33H r e you?
22、11H00H00H随机数随机数M311H22H11H22H11H22H?35二、符号定义伪指令二、符号定义伪指令1 1 1 1、等值语句、等值语句、等值语句、等值语句n n格式:格式:格式:格式:符号名符号名符号名符号名 EQU EQU EQU EQU 表达式表达式表达式表达式n n操作:操作:操作:操作:名称代替表达式,不可重新定义名称代替表达式,不可重新定义名称代替表达式,不可重新定义名称代替表达式,不可重新定义n n例:例:例:例:CONSTANTCONSTANTCONSTANTCONSTANTEQUEQUEQUEQU100100100100 VAR EQU 30H+99HVAR EQU
23、 30H+99HVAR EQU 30H+99HVAR EQU 30H+99H MEM EQU DS:BP MEM EQU DS:BP MEM EQU DS:BP MEM EQU DS:BP20H20H20H20H36二、符号定义伪指令二、符号定义伪指令2|2|2|2|等号语句等号语句等号语句等号语句n n格式:变量名表达式格式:变量名表达式格式:变量名表达式格式:变量名表达式n n说明:说明:说明:说明:“”伪指令用来为右边的表达式伪指令用来为右边的表达式伪指令用来为右边的表达式伪指令用来为右边的表达式 定义一个替代符号,且只能是数值定义一个替代符号,且只能是数值定义一个替代符号,且只能是数值
24、定义一个替代符号,且只能是数值 表达式,不能为字符串或地址表达表达式,不能为字符串或地址表达表达式,不能为字符串或地址表达表达式,不能为字符串或地址表达 式;式;式;式;“”伪指令定义的符号允许重复伪指令定义的符号允许重复伪指令定义的符号允许重复伪指令定义的符号允许重复 定义。定义。定义。定义。37三、段定义伪指令三、段定义伪指令格式:格式:格式:格式:段名段名段名段名 SEGMENT SEGMENT SEGMENT SEGMENT 定位类型定位类型定位类型定位类型 组合类型组合类型组合类型组合类型 类别类别类别类别 段名段名段名段名 ENDSENDSENDSENDS38定位类型定位类型n n
25、PARA:段的起点从节边界开始段的起点从节边界开始 (16个字节为个字节为1节)节)n nBYTE:段的起点从存储器任何地址开始段的起点从存储器任何地址开始n nWORD:段的起点从偶地址开始段的起点从偶地址开始n nPAGE:段的起点从页边界开始段的起点从页边界开始 (256个字节为个字节为1页)页)39组合类型组合类型n n与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提与其它模块中的同名段在满足定位类型的前提 下具有的组合方式:下具有的组合方式:下具有的组合方式:下具有的组合方式:n nNONENONE:不组合不组合
26、不组合不组合n nPUBLICPUBLIC:依次连接(顺序由依次连接(顺序由依次连接(顺序由依次连接(顺序由LINKLINK程序确定)程序确定)程序确定)程序确定)n nCOMMONCOMMON:覆盖连接覆盖连接覆盖连接覆盖连接n nSTACKSTACK:堆栈段的依次连接堆栈段的依次连接堆栈段的依次连接堆栈段的依次连接n nAT AT 表达式:表达式:表达式:表达式:段定位在表达式求值得到的节边界上段定位在表达式求值得到的节边界上段定位在表达式求值得到的节边界上段定位在表达式求值得到的节边界上n nMEMORYMEMORY:相应段在同名段的最高地址处。相应段在同名段的最高地址处。相应段在同名段
27、的最高地址处。相应段在同名段的最高地址处。40类别类别n n不同模块连接时将相同类别的段放在不同模块连接时将相同类别的段放在连续的内存区域中连续的内存区域中41四、设定段寄存器伪指令四、设定段寄存器伪指令n n说明所定义逻辑段的性质说明所定义逻辑段的性质说明所定义逻辑段的性质说明所定义逻辑段的性质n n格式:格式:格式:格式:ASSUME ASSUME 段寄存器名:段名段寄存器名:段名段寄存器名:段名段寄存器名:段名 ,段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,段寄存器名:段名,n n功能:功能:功能:功能:ASSUME ASSUME ASSUME ASSUME伪指令设定段和段寄存
28、器的关系伪指令设定段和段寄存器的关系伪指令设定段和段寄存器的关系伪指令设定段和段寄存器的关系 在程序的代码段中可以多次使用在程序的代码段中可以多次使用在程序的代码段中可以多次使用在程序的代码段中可以多次使用ASSUMEASSUMEASSUMEASSUME伪指令伪指令伪指令伪指令 42五、结束伪指令五、结束伪指令n n表示源程序结束表示源程序结束n n格式:格式:END 标号标号43一个完整源程序结构例一个完整源程序结构例DSEG SEGMENTDSEG SEGMENT DATA1 DB 1 DATA1 DB 1,2 2,DATA2 DW 1234H DATA2 DW 1234HDSEG END
29、SDSEG ENDSESEG SEGMENTESEG SEGMENT DB 20 DUP DB 20 DUP(?)(?)(?)(?)ESEG ENDSESEG ENDSSSEG SEGMENT STACK STACKSSEG SEGMENT STACK STACK DB 200 DUP DB 200 DUP(?)(?)(?)(?)SSEG ENDS SSEG ENDS 44一个完整源程序结构例一个完整源程序结构例 CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG,ES:ESEG,SS:SSEG START:MOV AX,DSEG MOV DS,AX ;数据段段地址送入;数
30、据段段地址送入DS MOV AX,ESEG MOV ES,AX ;附加段段地址送入;附加段段地址送入ES MOV AX,SSEG MOV SS,AX ;堆栈段段地址送入;堆栈段段地址送入SS CSEG ENDS END START源程序源程序 代码代码45六、过程定义伪指令六、过程定义伪指令n n用于定义一个过程体用于定义一个过程体n n格式:格式:过程名过程名过程名过程名 PROC NEAR/FAR PROC NEAR/FAR RET RET 过程名过程名过程名过程名 ENDPENDP过程入口的过程入口的符号地址符号地址46过程定义伪指令例过程定义伪指令例编写一个编写一个编写一个编写一个AX
31、AX乘乘乘乘1010子程序子程序子程序子程序mul10mul10PROC FARPROC FARPUSH BXPUSH BX;保护现场保护现场保护现场保护现场PUSHFPUSHFadd ax,axadd ax,ax;2ax;2axmov bx,axmov bx,ax;2ax;2axbxbxadd ax,axadd ax,ax;4ax;4axadd ax,axadd ax,ax;8ax;8axadd ax,bxadd ax,bx;10ax;10axPOPFPOPF;恢复现场恢复现场恢复现场恢复现场POP BXPOP BXRETRETmul10mul10ENDPENDP47七、宏命令伪指令七、宏命
32、令伪指令n n 源程序中由汇编程序识别的具源程序中由汇编程序识别的具有独立功能的一段程序代码有独立功能的一段程序代码n n格式:格式:宏命令名宏命令名宏命令名宏命令名 MACRO MACRO ENDM ENDM宏体宏体宏宏48n n宏调用宏调用宏调用宏调用经宏定义后的宏在源程序中的调用称为宏调用。经宏定义后的宏在源程序中的调用称为宏调用。经宏定义后的宏在源程序中的调用称为宏调用。经宏定义后的宏在源程序中的调用称为宏调用。格式:宏名格式:宏名格式:宏名格式:宏名 实参数表实参数表实参数表实参数表 1 1 1 1无参数宏无参数宏无参数宏无参数宏 例:宏定义:例:宏定义:例:宏定义:例:宏定义:SA
33、VEREGSAVEREGSAVEREGSAVEREGMACROMACROMACROMACRO PUSH AX PUSH AX PUSH AX PUSH AX PUSH BX PUSH BX PUSH BX PUSH BX PUSH CX PUSH CX PUSH CX PUSH CX ENDM ENDM ENDM ENDM 宏调用:宏调用:宏调用:宏调用:SAVEREGSAVEREGSAVEREGSAVEREG 宏定义宏定义宏调用宏调用宏展开宏展开49n n2 2 2 2带参数宏例:宏定义:带参数宏例:宏定义:带参数宏例:宏定义:带参数宏例:宏定义:ASASASASMACROMACROMACR
34、OMACRO P1 P1 P1 P1,P2P2P2P2,P3P3P3P3 MOV MOV MOV MOVAXAXAXAX,P1P1P1P1 P2 P2 P2 P2P3P3P3P3 ENDM ENDM ENDM ENDM 宏调用:宏调用:宏调用:宏调用:ASASASASNUMNUMNUMNUM,INCINCINCINC,AXAXAXAX 这条指令在宏展开后变为:这条指令在宏展开后变为:这条指令在宏展开后变为:这条指令在宏展开后变为:MOVMOVMOVMOVAXAXAXAX,NUMNUMNUMNUM INC INC INC INCAX AX AX AX n n宏展开时将宏定义中的实参按位置对应关系
35、宏展开时将宏定义中的实参按位置对应关系宏展开时将宏定义中的实参按位置对应关系宏展开时将宏定义中的实参按位置对应关系 替换宏定义形参。替换宏定义形参。替换宏定义形参。替换宏定义形参。50n n例:宏定义:例:宏定义:例:宏定义:例:宏定义:LEAPLEAPLEAPLEAPMACROMACROMACROMACRO COND COND COND COND,LABLABLABLAB J&COND LAB J&COND LAB J&COND LAB J&COND LAB ENDM ENDM ENDM ENDM 宏调用:宏调用:宏调用:宏调用:LEAPLEAPLEAPLEAP Z Z Z Z,L1L1L1
36、L1 LEAP LEAP LEAP LEAP NZNZNZNZ,L2L2L2L2 这二条宏指令展开后为:这二条宏指令展开后为:这二条宏指令展开后为:这二条宏指令展开后为:JZJZJZJZL1L1L1L1 JNZ JNZ JNZ JNZL2L2L2L251八、其它伪指令八、其它伪指令 规定目标程序存放单元的偏移量规定目标程序存放单元的偏移量n n格式:格式:ORG 表达式表达式n n例:例:ORG 2000H计算值为计算值为非负常数非负常数ORG52程序模块的连接伪指令程序模块的连接伪指令n nNAME-为目标程序设定一个名字为目标程序设定一个名字n n格式:格式:NAME NAME 模块名模块
37、名模块名模块名n nTITLE-为程序清单指定打印标题为程序清单指定打印标题n n格式:格式:TITLE TITLE 标题名标题名标题名标题名534.3 DOS功能调用功能调用DOS 功能调用功能调用 BIOS功能调用功能调用设备设备管理管理目录目录管理管理文件管理文件管理其它其它54DOS 功能调用功能调用n n包含多个子功能的功能包,用软中断包含多个子功能的功能包,用软中断指令调用,中断类型码固定为指令调用,中断类型码固定为21H;n n各子功能采用功能号来区分。各子功能采用功能号来区分。附录附录D55DOS 功能调用功能调用n n调用格式:调用格式:MOV AH,功能号功能号 指定寄存器
38、放入指定寄存器放入 该功能所要求的该功能所要求的 入口参数入口参数 INT 21H56一、单字符输入一、单字符输入n n调用方法:调用方法:调用方法:调用方法:MOV AHMOV AH,01H01H INT 21H INT 21Hn n输入的字符以对应的输入的字符以对应的输入的字符以对应的输入的字符以对应的ASCIIASCII码存放在码存放在码存放在码存放在ALAL中中中中57单字符输入例单字符输入例GET_KEY:MOVGET_KEY:MOV AH,01HAH,01H INTINT 21H21H CMPCMP AL,Y AL,Y JZ JZ YESYES CMP CMP AL,N AL,N
39、JZ JZ NONO JNZ JNZ GET_KEYGET_KEY YES:YES:NO:NO:交互式应交互式应 答程序答程序58二、字符串输入二、字符串输入n n功能要求用户指定一个键入缓冲区来功能要求用户指定一个键入缓冲区来存放输入的字符串存放输入的字符串n n注意问题:注意问题:n n调用格式调用格式调用格式调用格式n n字符输入缓冲区的定义字符输入缓冲区的定义字符输入缓冲区的定义字符输入缓冲区的定义591.调用格式调用格式 功能号功能号0AH 字符串在内存中的存放地字符串在内存中的存放地址址n AHn DS:DX602.定义字符缓冲区定义字符缓冲区n n用户自定义缓冲区格式:用户自定义
40、缓冲区格式:N1N2整个缓冲区整个缓冲区最大可键入字符数最大可键入字符数缓冲区长度缓冲区长度实际键入字符数实际键入字符数存放键入的字符存放键入的字符存放字符个数:存放字符个数:655330DH61输入字符串程序例输入字符串程序例n n DAT1 DB 20,?,?,20 DUP(?)(?)n n LEA DX,DAT1 MOV AH,0AH INT 21H在数据段在数据段中定义中定义62输入缓冲区输入缓冲区14H?20个字节个字节定义后的输入缓定义后的输入缓冲区初始状态:冲区初始状态:63三、单字符显示输出三、单字符显示输出 功能号功能号02H 待显示字符待显示字符n AHn DL64单字符显
41、示输出例单字符显示输出例n nMOVAH,02Hn nMOVDL,41Hn nINT21H执行结果:执行结果:屏幕显示屏幕显示A65四、字符串输出显示四、字符串输出显示 功能号功能号09H 待输出字符串的偏移地待输出字符串的偏移地址址n AHn DS:DX被显示的字符串必须以被显示的字符串必须以被显示的字符串必须以被显示的字符串必须以$结束结束结束结束,且所显示的内容不应出现非可见的且所显示的内容不应出现非可见的且所显示的内容不应出现非可见的且所显示的内容不应出现非可见的ASCIIASCII码码码码66DATA SEGMENT DATA SEGMENT BUFF DB I AM A STUDE
42、NT!$BUFF DB I AM A STUDENT!$DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME CS:CODE,DS:DATASTART:MOV AX,DATASTART:MOV AX,DATA MOV DS,AX MOV DS,AX LEA DX,BUFF LEA DX,BUFF MOV AH,09H MOV AH,09H INT 21H INT 21H MOV 4CH MOV 4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END STA
43、RT 字符串输出显示例字符串输出显示例674.4 汇编语言程序设计汇编语言程序设计设计步骤:设计步骤:n n根据实际问题抽象出数学模型根据实际问题抽象出数学模型n n确定算法确定算法n n画程序流程图画程序流程图 n n分配内存工作单元和寄存器分配内存工作单元和寄存器n n程序编码程序编码n n调试调试68程序流程图符号程序流程图符号起始:起始:功能:功能:判断:判断:子过程:子过程:69汇编语言程序结构汇编语言程序结构n n顺序结构顺序结构n n循环结构循环结构n n先判定型先判定型先判定型先判定型n n后判定型后判定型后判定型后判定型n n分支结构分支结构n n单分支单分支单分支单分支n
44、n多分支多分支多分支多分支n n子程序结构子程序结构70顺序结构顺序结构 顺序程序设计即程序内指令顺序执行顺序程序设计即程序内指令顺序执行,无分支无分支和循环和循环,这是最简单的一类程序这是最简单的一类程序71顺序结构例顺序结构例n n在以在以NUMBER为首地址的字节单元中,存为首地址的字节单元中,存放了一个年级学生的学生证号码,每个学放了一个年级学生的学生证号码,每个学生证号码占用生证号码占用4个字节,按序号排列在表中,个字节,按序号排列在表中,试编写一个程序,根据学生的序号来查表试编写一个程序,根据学生的序号来查表得到该生的学生证号码。得到该生的学生证号码。72DATA SEGMENTD
45、ATA SEGMENT NUMBER DD 01024056H,19004278H,.,19004269H NUMBER DD 01024056H,19004278H,.,19004269H XX DB n XX DB n RESULT DD?RESULT DD?DATA ENDSDATA ENDSCSOG SEGMENTCSOG SEGMENT ASSUME CS:CSOG,DS:DATA ASSUME CS:CSOG,DS:DATA START:MOV AX,DATA START:MOV AX,DATA MOV DS,AX MOV DS,AX LEA BX,NUMBER LEA BX,NU
46、MBER MOV SI,XX MOV SI,XX SHL SI,1 SHL SI,1 SHL SI,1 SHL SI,1 MOV AX,BX+SI MOV AX,BX+SI MOV DX,BX+SI+2 MOV DX,BX+SI+2 MOV WORD PTR RESULT,AX MOV WORD PTR RESULT,AX MOV WORD PTR RESULT+2,DX MOV WORD PTR RESULT+2,DX MOV AH,4CH MOV AH,4CH INT 21H INT 21H CSOG ENDSCSOG ENDS END START END START73分支结构分支结构n
47、 n在分支结构中,如果条件成立则完成某项操作,否则在分支结构中,如果条件成立则完成某项操作,否则在分支结构中,如果条件成立则完成某项操作,否则在分支结构中,如果条件成立则完成某项操作,否则执行其它操作或后续指令,其结构如图所示执行其它操作或后续指令,其结构如图所示执行其它操作或后续指令,其结构如图所示执行其它操作或后续指令,其结构如图所示:74分支结构例分支结构例1n n符号函数符号函数 1 X0 Y=0 X=0 (128X127)1 X0n n假设任意给定的假设任意给定的X值存放在值存放在XX单元,函数单元,函数Y的值存放在的值存放在YY单元。单元。75流程图流程图X=?Y -1-1Y 0Y
48、 0 Y 1 Y 1X0X=076DATASEGMENT XXDBX ;X存储单元存储单元 YY DB?;Y存储单元存储单元DATAENDSCODESEGMENT ASSUMECS:CODE,DS:DATASTART:MOVAX,DATA MOVDS,AX MOV AL,XX ;ALX CMPAL,0 ;X和和0相比较相比较 JGEBIGPR ;X0,转,转BIGPR MOVYY,0FFH ;X0,(,(YY)1 HLTEUQPR:MOVYY,0 ;X=0,(,(YY)0 HLTCODEENDSEND START77分支结构例分支结构例2已知两个整数变量已知两个整数变量已知两个整数变量已知两个
49、整数变量A A和和和和B B,试编写完成下述,试编写完成下述,试编写完成下述,试编写完成下述操作的程序:操作的程序:操作的程序:操作的程序:若两个数中有一个是奇数,则将奇数存入若两个数中有一个是奇数,则将奇数存入若两个数中有一个是奇数,则将奇数存入若两个数中有一个是奇数,则将奇数存入 ABUF ABUF单元,偶数存入单元,偶数存入单元,偶数存入单元,偶数存入BBUFBBUF单元中。单元中。单元中。单元中。若两个数均为奇数,则两数分别加若两个数均为奇数,则两数分别加若两个数均为奇数,则两数分别加若两个数均为奇数,则两数分别加1 1,并存,并存,并存,并存 回原变量处。回原变量处。回原变量处。回原
50、变量处。若两个数均为偶数,则两变量不变。若两个数均为偶数,则两变量不变。若两个数均为偶数,则两变量不变。若两个数均为偶数,则两变量不变。A A、B B两变量预先放在数据段中的两变量预先放在数据段中的两变量预先放在数据段中的两变量预先放在数据段中的ABUFABUF和和和和BBUFBBUF的字节单元中,其值分别为的字节单元中,其值分别为的字节单元中,其值分别为的字节单元中,其值分别为X1X1、X2X2。78DATASEGMENT ABUFDBX1 BBUFDBX2 DATAENDS CODESEGMENT ASSUMECS:CODE,DS:DATA START:MOV AX,DATA ;数据段地址