汇编语言程序设计经典课件

上传人:花****园 文档编号:243662710 上传时间:2024-09-28 格式:PPT 页数:64 大小:207KB
返回 下载 相关 举报
汇编语言程序设计经典课件_第1页
第1页 / 共64页
汇编语言程序设计经典课件_第2页
第2页 / 共64页
汇编语言程序设计经典课件_第3页
第3页 / 共64页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第四章 汇编语言程序设计,4.1,程序格式和表达式,程序格式,MASM,中的语句分为指令性语句和伪指令语句,指令性语句与机器指令相对应,汇编程序将它们翻译成目标代码。语句格式为:,标号,:,指令助记符 操作数,操作数,;,注释,伪指令语句没有对应的机器指令,可完成数据定义,存储区分配,段定义,段分配,指示程序结束等功能。,名字 伪指令指示符 操作数,操作数,;,注释,汇编语言中常数,变量和标号是三种基本数据项,4.1,程序格式和表达式,MASM,中的表达式,算术运算符,逻辑运算符,关系运算符,数值返回,修改属性,其他运算符,运算符优先级,算术运算符,符号,名称,运算结果,加法,和,减法,差,*,乘法,积,/,除法,商,MOD,模除,余数,SHL,左移,左移后的二进制数,SHR,右移,右移后的二进制数,例:,ARRAY DB 1,2,3,4,5,TRY DB 20,MOV AX, 30 * 5,MOV CX, (TRY ARRAY),DA EQU 300,MOV CX, DA/100,逻辑运算符,符号,名称,运算结果,AND,与运算,逻辑与结果,OR,或运算,逻辑或结果,XOR,异或运算,逻辑异或结果,NOT,非运算,逻辑非结果,例:,MOV AL, NOT OFFH,MOV BL, 8CH AND 73H,MOV AH, 8CH OR 73H,MOV CH, 8CH XOR 73H,关系运算符,符号,名称,运算结果为真输出全,1,,为假输出全,0,EQ,相等,NE,不等,LT,小于,LE,小于等于,GT,大于,GE,大于等于,例:,MOV AX, 10H GT 16,ADD BL, 6 EQ 0110B,MOV CX, (PORT LT 5) AND 100) OR,(PORT GE 5) AND 200),数值返回,符号,名称,运算结果,OFFSET,返回偏移地址,偏移地址,SEG,返回段地址,段地址,TYPE,返回元素字节数,字节数,LENGTH,返回变量单元数,单元数,SIZE,返回变量总字节数,总字节数,例:,MOV BX, OFFSET DA1,MOV AX, SEG M1,MOV DS, AX,A1 DB 20H, 30H,MOV AH, TYPE A1,MOV CX, LENGTH A1,MOV BL, SIZE A1,修改属性,符号,名称,运算结果,段寄存器名,段前缀,修改段,PTR,修改类型属性,修改后类型,THIS,指定类型,/,距离属性,指定后类型,HIGH,分离高字节,高字节,LOW,分离低字节,低字节,SHORT,短转移说明,-128127,字节间转移,例:,N1 DB 15H, 36H,N2 DW 1122H, 3344H,LO: MOV AX, WORD PTR N1,MOV BL, BYTE PTR N2,FIRST EQU THIS BYTE,TABLE DW 200 DUP(?),L1: JMP SHORT L2,K1 EQU 0ABCDH,MOV AH, HIGH K1,MOV BL, LOW K1,其他运算符,符号,名称,运算结果,( ),圆括号,改变运算符优先级, ,方括号,下表或间接地址,点运算符,连接结构与变量,尖括号,修改变量,MASK,记录位图,位图形,WIDTH,记录宽度,记录,/,字段位数,运算符优先级,优先级,运算符,1,( ) , , , , LENGTN , WIDTH , SIZE , MASK,2,PTR , OFFEST , SEG , TYPE , THIS , CS: , DS: , ES: , SS:,3,HIGH , LOW,4,*, / , MOD , SHL , SHR,5,6,EQ , NE , LT , LE , GT , GE,7,NOT,8,AND,9,OR , XOR,10,SHORT,4.2,伪指令,1,数据定义语句和存储指令,2,表达式赋值语句,3,段定义语句,4,过程定义语句,5,程序开始和结束语句,6,结构和宏定义语句,7,外部伪指令及对准伪指令,1,数据定义语句,DB,定义字节(,8,位),DW,定义字(,16,位),DD,定义双字(,32,位),DQ,定义四字(,64,位),DT,定义,10,个字节(,80,位),DUP,产生重复的字符或数字,存储段中数据存储指令,PTR,指示存储器指针,BYTE,指示字节的长度的操作数,如同,BYTE PTR,WORD,指示字操作数的作用,如,WORD PTR,DWORD,指示双字长度的操作数,如,DWORD PTR,NEAR,定义近指针,FAR,定义远指针,格式,1,:变量名 助记符 操作数,操作数,格式,2,:变量名 助记符,n DUP,(操作数,操作数,.,),N,必须是正整数,表示括号内操作数的重复次数,例如:,DA1 DB 10H, 23H ;,变量,DA1,装入,10H , 23H,DA2 DW OK ;,字符串,OK,的,ASCII,码装入,DA2,开始的存 储单元中,DA3 DB ? ;,变量,DA3,为不确定字节,保留,1,字节空间,DA4 DB 5 DUP(0) ;,重复,5,个,0,存入,DA4,开始的存储单元中,2,表达式赋值语句,1,)赋值语句,EQU,格式: 符号名,EQU,表达式,;,一个符号名只能定义一次,例:,COUNT EQU 100;,常数赋给符号名,COUNT,DATA EQU COUNT+2;,表达式赋给符号名,DATA,A1 EQU BX+SI;,B1 EQU ORRSET A1;,C1 EQU ADD;,加法指令赋给符号名,C1,2,)等号语句 ,与,EQU,功能相同,可以重复定义,例如:,COUNT,100,COUNT,COUNT + 10,3,段定义语句,段定义语句,SEGMENT,ENDS,定义段,段名,segment,定义类型 组合类型 分类名,段名,ends ;,指示段或者结构结束,功能:将一个逻辑段定义成一个整体,ASSUME,规定段所属的段寄存器,assume cs:,段名, ds:,段名, ss:,段名,ES:,段名,功能:定义,4,个逻辑段,指明段和段寄存器的关系,3,段定义语句,定义类型是对该段起始位置的定义。参数有:,PARA,BYTE,WORD,PAGE,组合类型提出各个逻辑段之间的组合方式,参数包括:,NONE,PUBLIC,COMMON,AT,表达式,STACK, MEMORY,分类名的主要作用式汇编程序连接时将所有同名的逻辑段组成一个段组。,例:,DATA SEGMENT,DI DW 1234H,P1 DD ?,DATA ENDS,STACK SEGMENT STACK STACK,DW 100 DUP(?),STACK ENDS,CODE SEGMENT,ASSUME CS:CODE, DS:DATA, SS:STACK,.,CODE ENDS,4,过程定义语句,格式:过程名,PROC,属性,;,过程内容,RET N,过程名,ENDP,功能:定义一个过程,主程序可以用,CALL,指令调用。,过程名的三种属性:,段属性:该过程所在段的基址,偏移地址属性:该过程第一字节与段首之间距离字节,距离属性:,NEAR,或,FAR,。,例:,MCODE SEGMENT,MAIN,SPD PROC FAR, ,RET,SPD ENDP, ,CALL SPD, ,MCODE ENDS,5,程序开始和结束语句,NAME,格式,: NAME,程序名,功能,:,为源程序目标模块赋名字,ORG,格式,: ORG,表达式,功能,:,给汇编程序设置位置指针,指定下面,语句的起始偏移地址。,表达式,:,给定的偏移地址值,结果是正整数,END,格式,: END,标号名,功能,:,标记汇编源程序结束,标号名,:,该程序第一条可执行语句的标号名,6,结构和宏定义语句,结构的定义,格式,:,结构名,STRUC,(用,DB,DW,DD,等语句定义数据变量),结构名,ENDS,功能,:,把各种不同类型的数据放在同一数据结构中,结构付本预置,必须先预置结构付本,汇编程序给每个结构付本分配存储空间。,格式,1:,结构付本名 结构名,格式,2:,结构付本名 结构名,N DUP( ),例:,TABSTRUC,T1 DB ABCD,T2 DW ?,T3 DW 2 DUP(0),TABENDS, ,TWO TAB , ,MOV TWO T2, AX,6,结构和宏定义语句,宏定义语句,MACRO,定义宏的名字、参数和开始,格式,:,宏名,macro,ENDM,指示宏序列结束,7,外部伪指令及对准伪指令,外部伪指令,PUBLIC,名称,名称,,. ;,注释,EXTRN,名称,类型,名称,类型,,. ;,注释,对准伪指令,格式,: EVEN,功能,:,使下一语句的地址调整为偶地址,LABEL,格式,:,名称,LABEL,类型属性,功能,:,为,LABEL,下一行语句中的变量或标号取别名,例:,DATA SEGMENT,A1 DW 4 DUP(?),DATA ENDS,CODE1 SEGMENT, ,PUBLIC A1,CODE1 ENDS,PCODE SEGMENT,EXTRN A1: WORD,MIAN: ,MOV AX, OFFSET A1,PCDOE ENDS,END MAIN,例:,DATASEGMENT,X1 DB 0DH,EVEN,X2 DW 100 DUP(?),DATAENDS,DATBLABEL BYTE,DATW DW 3031H, 3233H,MOV AL, DATB0,MOV BX, DATW1,4.3 DOS,系统功能调用,1. DOS,键盘功能调用,2. DOS,显示功能调用,3. DOS,打印功能调用,4.,日期与时间设置,5.,异步通讯,6.,返回操作系统,DOS,常用的软中断命令,软中断指令,功 能,入口参数,出口参数,INT 20H,程序正常退出,无,无,INT 21H,系统功能调用,AH,功能号,相应入口号,相应出口号,INT 22H,结束退出,INT 23H,Ctrl-Break,处理,INT 24H,出错退出,INT 25H,读磁盘,AL,驱动器号,CX,读入扇区数,DX,起始逻辑扇区号,DS:BX,内存缓冲区地址,CF,0,成功,CF,1,出错,INT 26H,写磁盘,同上,,CX,写入扇区数,同上,INT 27H,驻留退出,DS:DX,程序长度,1. DOS,键盘功能调用,AH,功 能,入口参数,出口参数,1,从键盘输入一个字符,并在屏幕上显示,检查,Ctrl-Break,键,AL,字符,8,键盘输入一个字符,无回显,6,直接键盘输入,/,输出字符,不检查,Ctrl-Break,键,DL,0FFH,AL,字符,7,直接键盘输入,/,输出字符,无回显,不检查,Ctrl-Break,键,AL,字符,0AH,输入字符串到内存缓冲区,DS:DX=,缓冲区首址,0BH,检查键盘输入状态,AL,FFH,有键入,0,无键入,0CH,清键盘缓冲区,调用键盘输入功能,AL,键盘功能号,2. DOS,显示功能调用,AH,功 能,入口参数,说明,2,显示一个字符,,检查,Ctrl-Break,键,DL,字符,光标跟踪字符移动,6,显示一个字符,,不检查,Ctrl-Break,键,DL,字符,光标跟踪字符移动,9,显示字符串,DS:DX,串地址,串以,$,结束,光标跟随移动,3. DOS,打印功能调用,字符码,功 能,字符码,功 能,08H,空 格,0FH,设置紧缩方式,09H,水平,TAB,(横表),0EH,设置扩展方式,0AH,换 行,12H,取消紧缩方式,0BH,垂直,TAB,(纵表),14H,取消扩展方式,0CH,换 页,1BH 30H,设置每英寸,8,行,0DH,回 车,1BH 32H,设置每英寸,16,行,1BH 45H,设置加重打印方式,1BH 46H,取消加重打印方式,4.,日期与时间设置,功能号,功 能,入口参数,出口参数,2BH,设置日期,CX:,年号;,DH:,月号,DL:,日号,AL=0,成功,AL=0FFH,无效,2AH,取消日期,CX:,年号;,DH:,月号,DL:,日号,2DH,设置时间,CH:,小时;,CL:,分,DH:,秒;,DL:,百分之一秒,AL=0,成功,AL=0FFH,无效,2CH,取消时间,CH:,小时;,CL:,分,DH:,秒;,DL:,百分之一秒,5.,异步通讯,MOV AH, 4CH,INT 21H,6.,返回操作系统,功能号,功能,入口参数,出口参数,3,异步通讯口输入,AL=,输入,8,位数据,4,异步通讯口输入,DL=,输出,8,位数据,4.4,汇编程序格式,1,高档微机新增伪指令,2,完整的段定义,3,模型方式格式,1,高档微机增加的伪指令,.286,选择,80286,指令系统,.286P,选择,80286,保护模式指令系统,.386,选择,80386,指令系统,.386P,选择,80386,保护模式指令系统,.486,选择,80486,指令系统,.486P,选择,80486,保护模式的指令系统,.586,选择,Pentium,指令系统,.586P,选择,Pentium,保护模式指令系统,.287,选择,80287,数字协处理器,.387,选择,80387,数字协处理器,1,高档微机增加的伪指令,.EXIT,用来使程序设计模型退回到,DOS,.MODEL,选择编程模型,.STARTUP,在编程模型中指示程序的开始,ALIGN2,按字或双字分界的段中数据的开始,USES,自动保存过程使用的寄存器,USE16,386,以上处理器使用,16,位指令模式和数据长度,USE32,386,以上处理器使用,32,位指令模式和数据长度,.STACK,堆栈段,定义,.CODE,代码段,定义,.DATA,数据段,定义,2,完整的程序格式(推荐使用),stacksegment stack stack ;,定义堆栈段,dw 512 dup(?) ;,堆栈段有,512,字空间,stackends ;,堆栈段结束,Data segment ;,定义数据段,. ;,在数据段定义数据,data ends,Code segment ;,定义代码段,assume cs:code,ds:data,ss:stack,start: mov ax, stack ;,建立,SS,段地址,mov ss, ax,mov ax,data ;,建立,DS,段地址,mov ds,ax,. ;,在代码段填入指令序列,mov ax,4c00h,int 21h ;,利用功能调用返回,DOS,Code ends ;,代码段结束,end start ;,汇编结束,同时指明程序起始点,实模式程序举例,Stack segment stack ;,定义堆栈段,dw 512 dup(?) ;,堆栈段有,512,字空间,stack ends ;,堆栈段结束,Datasegment ;,定义数据段,String db Hello, Everybody !,0dh,0ah,$,dataends,codesegment ;,定义代码段,assume cs:code, ds:data, ss:stack,start: mov ax, stack ;,建立,SS,段地址,mov ss, ax,mov ax,data ;,建立,DS,段地址,mov ds,ax,mov dx,offset string,mov ah,9,int 21h,mov ax,4c00h,int 21h ;,利用功能调用返回,DOS,Code ends ;,代码段结束,end start ;,汇编结束,同时指明程序起始点,结果:屏幕上显示,Hello, Everybody !,3,模型方式格式,.model small ;,定义程序的存储模式,.386 ;80386,伪指令,;,.386,指令不要,就是实模式下的简化程序格式,.stack ;,定义堆栈段(缺省,1K,),.data ;,定义数据段,. ;,定义数据,.code ;,定义代码段,.startup ;,程序起始点,建立,DS,、,SS,内容,. ;,程序代码,.exit 0 ;,程序结束点,返回,DOS, ;,子程序,end ;,汇编结束,保护模式下程序举例,.model small ;,定义程序的存储模式,.386 ;80386,伪指令,.stack ;,定义堆栈段,.data ;,定义数据段,num db 4 dup (0),db 0dh, 0ah, $,.code ;,定义代码段,.startup ;,程序起始点,建立,DS,、,SS,内容,mov ebx, 1020304h,add ebx, 30303030h,mov dword ptr num, ebx,mov dx, offset num ;,指定字符串的偏移地址,mov ah, 9,int 21h ;,利用功能调用显示信息,.exit 0 ;,程序结束点,返回,DOS,end ;,汇编结束,结果:屏幕上显示,4321,.STACK,大小,;堆栈段开始,.DATA,;数据段开始,.CODE,段名,;代码段开始,简化段定义伪指令指明一个逻辑段的开始,同时自动结束前面的一个段。,采用简化段定义伪指令前,需有,.model,存储模式语句。,使用简化段定义,各段名称和其他用户所需的信息可以使用,MASM,预定义符号,,例如:,data,表示由,.data,等定义的数据段的段名。,堆栈段伪指令,.STACK,大小,堆栈段伪指令,.STACK,创建一个堆栈段,段名是:,stack,。,它的参数指定堆栈段所占存储区的字节数,默认是,1KB,(,= 1024 = 400h,字节)。,数据段伪指令,.DATA,数据段伪指令,.data,创建一个数据段,段名是:,_DATA,。它用于定义具有初值的变量,当然也允许定义无初值的变量。,无初值变量可以安排在另一个段中,它用,.data?,伪指令创建,数据段名是:,_BSS,。,. const,伪指令用于建立只读的常量数据段(段名:,CONST,)。,代码段伪指令,.CODE,段名,代码段伪指令,.code,创建一个代码段,它的参数指定该代码段的段名。,如果没有给出段名,则采用默认段名:,在,TINY,、,SMALL,、,COMPACT,和,FLAT,模式下,默认的代码段名是:,_TEXT,;,在,MEDIUM,、,LARGE,和,HUGE,模式下,默认的代码段名是:模块名,_TEXT,。,程序开始伪指令,.STARTUP,按照,CPU,类型、存储模式、操作系统和堆栈类型,产生程序开始执行的代码;同时还指定程序开始执行的起始点。,在,DOS,下,还将设置,DS,值,调整,SS,和,SP,值。,程序终止伪指令,.EXIT,返回参数,产生终止程序执行返回操作系统的指令代码。,它的可选参数是一个返回的数码,通常用,0,表示没有错误。例如,.exit 0,对应的代码是:,mov ax,4c00h,int 21h,DOS,功能调用的,4ch,子功能(返回,DOS,):,入口参数:,AH,4ch,,,AL,返回数码,汇编结束伪指令,END,标号,指示汇编程序,MASM,到此结束汇编过程。,源程序的最后必须有一条,END,语句。,可选的标号用于指定程序开始执行点,连接程序将据此设置,CS : IP,值。,注意,采用了,.startup,伪指令就不需要再用“,end,标号”指明开始执行点,但“,end”,伪指令还要有。,存储模型,汇编语言的存储模型有:,TINY,SMALL,MEDIUN,COMPACT,LARGE,HUGE,FLAT,TINY,模式产生,COM,程序,其他模式产生,EXE,程序,,FLAT,模式只能用于,32,位程序。,TINY,微型模式,微型模式是,MASM 6.0,才引入的,,用于创建,COM,类型程序,。,用微型模式编写汇编语言程序时,所有的段地址寄存器都被设置为同一个值。,这意味着代码段、数据段、堆栈段都在同,一个段,内,,不大于,64KB,;访问操作数或指令都只需要使用,16,位偏移地址。,SMALL,小型模式,一般的程序,都可用这种模式。,在小型模式下,一个程序,有一个代码段和一个数据段,,每段不大于,64KB,。,这里的数据段是指数据段、堆栈段和附加段的总和,它们共用同一个段基址,总长度不可超过,64KB,;因此小模式下程序的最大长度为,128KB,。,访问操作数或指令都只需要使用,16,位偏移地址;这意味着诸如指令转移、程序调用以及数据访问等都是,近属性(,NEAR,),,即小型模式下的调用类型和数据指针缺省分别为近调用和近指针。,COMPACT,紧凑模式,适合于数据量大但代码量小的程序,。,紧凑模式下,,代码段,被限制在,一个,不大于,64KB,的段内;而,数据段则可以有多个,,超过,64KB,。,这种模式下的调用类型缺省仍为近调用;而数据指针缺省为远(,FAR,)指针,这是因为必须用段地址来区别多个数据段。,MEDIUM,中型模式,中型模式是与紧凑模式互补的模式,,适合于数据量小但代码量大的程序,。,中型模式的,代码段可以,超过,64KB,,,有多个,;但,数据段只能有一个,不大于,64KB,的段。,这种模式下的数据指针缺省为近指针;但调用类型缺省是远(,FAR,)调用,因为要利用段地址区别多个代码段。,LARGE,大型模式,较大型程序通常采用的存储模式。,大型模式,允许的代码段和数据段都有多个,,都可以超过,64KB,;但全部的静态数据(不能改变的数据)仍限制在,64K,字节内。,大型模式下的调用类型和数据指针缺省分别为远调用和远指针。,HUGE,(巨型模式),与大型模式基本相同,只是静态数据不再被限制在,64K,字节之内。,FLAT,平展模式,平展模式用于,创建一个,32,位的程序,,它只能运行在,32,位,x86 CPU,上。,DOS,下不能使用,FLAT,模式,而编写,32,位,Windows 9.x,或,Windows-NT,的程序时,必须采用,FLAT,模式。,汇编语言程序的开发过程,1.,源程序的编辑,EDIT,源文件名 ,扩展名必须是 .,asm。,2,.,源程序的汇编,MASM 6.x,版本:,ml.exe,如,ml /c lt301a.asm,MASM 5.x,版本:,masm.exe,如,masm lt301a.asm,3.,目标文件的连接,将一个或多个目标文件与库文件合并成一个可执行文件(.,exe,.com),:,LINK lt301a.obj,LINK,的一般格式:,LINK /,参数选项,obj,文件列表 ,exe,文件名,,map,文件名,库文件名,4.,ML.EXE,的用法,ML.EXE,可以自动调用,LINK,程序,实现汇编和连接自动地依次进行。其一般格式如下:,常用参数选项如下(参数大小写敏感):,/,c(,小写):只汇编,不连接。,/,Fl,文件名:创建一个汇编列表文件(.,lst)。,/Fr,文件名:创建一个可在,PWB,下浏览的.,SBR,文件。,/,Fo,文件名:生成指定的.,OBJ,文件,不用缺省名。,/,Fe,文件名:生成指定的.,EXE,文件,不用缺省名。,/,Fm,文件名:创建一个连接映象文件(.,MAP)。,/Sg,在列表文件中,列出由汇编程序产生的指令。,ML /,参数选项 文件列表 ,LINK,连接参数选项,5. 两个文件的介绍(.,lst.map),要生成列表文件和连接映象文件,可以输入如下形式的命令:,ML /Fl /Fm /Sg lt301a.asm,注释:,注意大小写;,参数/,Sg,将.,startup,.exit,等伪指令转换成硬指令,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业管理 > 商业计划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!