《汇编语言第十一次课.ppt》由会员分享,可在线阅读,更多相关《汇编语言第十一次课.ppt(37页珍藏版)》请在三一办公上搜索。
1、,作业指出下列指令的错误原因(1)and ax,dl(2)add cs,dx(3)mov ax,ip(4)mov bpdi,si(5)sub bpsi,es:dx(6)xchg al,sidi(7)jge ax(8)push dl(9)shr cl,4,4.1 汇编程序功能,1.程序运行步骤及生成的文件,myfile.asm,编辑程序,汇编程序,连接程序,myfile.crf,otherfiles.obj,myfile.lst,myfile.obj,myfile.map,myfile.exe,4.1 汇编程序功能,2.汇编程序功能,汇编程序的主要功能:检查源程序,给出出错信息。产生目标文件(.
2、obj)和列表文件(.lst)。展开宏指令。,4.2 汇编语言语句类型及格式,一.语句类型汇编语言源程序由若干条语句组成,语句分为两类:1、指令性语句:由指令组成的由CPU执行的语句,完成一定操作功能,能够翻译成机器代码。2、指示性语句(伪指令语句):指示性语句不由CPU执行,只为汇编程序在翻译汇编语言源程序时提供有关信息,并不翻译成机器代码的语句,4.2 汇编语言语句类型及格式,二、语句格式指令性语句格式如下:名字:操作码 操作数,操作数;注释伪指令语句的格式如下:名字 伪操作 操作数,操作数,;注释1、名字名字也就是有用户按一定规则定义的标示符,可由下列符号组成:英文字母(AZ,az);数
3、字(09);特殊符号(?、等),4.2 汇编语言语句类型及格式,名字的定义要满足如下规则:数字不能作为名字的第一个字符单独的问号“?”不能作为名字一个名字的最大有效长度为31,计算机不能识别超过部分。汇编语言中特有含义的保留字,如操作码、寄存器名等,不能作为名字使用名字的定义应该能见名知义,4.2 汇编语言语句类型及格式,名字有两种形式:标号和变量。指令性语句中的名字通常用标号表示,而伪指令语句中的名字通常用变量名、段名和过程名表示。(1)标号标号用来代表一条指令所在单元的地址,在代码段中使用。标号与其所代表的指令之间用冒号分开。标号有三个属性:段属性、偏移属性和类型属性段属性:标号所代表指令
4、单元的段地址(CS值)偏移属性:标号所代表指令单元的段内偏移地址类型属性:用来表明是段内引用还是段间引用,4.2 汇编语言语句类型及格式,(2)变量变量用来代表数据所在单元的地址,在数据段、附加段和堆栈段中使用。变量有三个属性:段属性、偏移属性和类型属性段属性:变量所代表数据单元的段地址(DS、ES、SS)偏移属性:变量所代表数据单元的段内偏移地址类型属性:用来指明变量所代表数据单元的字节数在同一个程序中,一个标号或变量只能定义一次,不能重复定义,4.2 汇编语言语句类型及格式,2、操作码用来指明操作的性质或功能。指令中的助记符都是操作码。3、操作数指令中的操作数用来指定参与操作的数据。对于一
5、般指令,操作数可以没有,有一或两个操作数。对于伪指令,可以根据需要有多个操作数。操作数多于一个时各操作数之间用逗号分开操作数可以是常数和表达式,4.2 汇编语言语句类型及格式,(1)常数常数(常量)表示一个固定的数值它又分成多种形式:十进制常数十六进制常数二进制常数八进制常数字符串常数符号常数:常数用符号名来代替就是符号常数,4.2 汇编语言语句类型及格式,(2)表达式由运算对象和运算符组成的合法式子就是表达式,分为数值表达式和地址表达式两种。地址表达式:运算结果是一个存储单元的地址。数值表达式数值表达式一般是指由运算符连接的各种常数所构成的表达式,汇编程序在汇编过程中计算表达式,最终得到一个
6、数值,4.2 汇编语言语句类型及格式,算术运算符,实现加、减、乘、除、取余的算术运算mov ax,3*4+5;等价于 mov ax,17其中MOD也称为取模,它产生除法之后的余数,如19 mod 7=5加+和减-运算符还可以用于地址表达式除加、减外,其他运算符的参数必须是整数,4.2 汇编语言语句类型及格式,逻辑运算符移位运算符,实现按位相与、相或、异或、求反的逻辑运算or al,03h AND 45h;等价于 or al,01h,实现对数值的左移、右移的逻辑操作;移入低位或高位的是0格式为:数值表达式 SHL/SHR 移位次数mov al,0101b SHL(2*2);等价于 mov al,
7、01010000b,4.2 汇编语言语句类型及格式,关系运算符EQ NE GT LT GE LE,用于比较和测试符号数值MASM用0FFFFH(补码-1)表示条件为真MASM用0000H表示条件为假mov bx,(PORT LT 5)AND 20)OR(PORT GE 5)AND 30);当PORT5时,汇编结果为mov bx,20;否则,汇编结果为mov bx,30,4.2 汇编语言语句类型及格式,在数值表达式中使用的操作符HIGH、LOW、LENGTH、SIZE、OFFSET、SEG、TYPE、WIDTH等HIGH、LOW从一个字数值或符号常量中得到高、低字节mov ah,HIGH 876
8、5h;等价于mov ah,87h例:MOV AL,LOW 3080H MOV AH,HIGH 2050H MOV AX,HIGH 1234H+5 MOV AX,HIGH(1234H+5)MOV AX,LOW 1234H-3,4.2 汇编语言语句类型及格式,运算符和操作符的优先级(从高到低)圆括号、LENGTH、SIZE、WIDTHPTR、OFFSET、SEG、TYPE、THIS、冒号*、/、MOD、SHL、SHRHIGH、LOW+、EQ、NE、LT、GE、LE、GI、GTNOTANDOR、XORSHORT,4.2 汇编语言语句类型及格式,4、注释项注释是语句的说明部分,用来说明一条指令或一段程
9、序的功能,由“;”开始。一条语句可以写在多行上,续行符为“&”三、伪指令在汇编程序时,需要向汇编程序提供一些信息,如源程序时候已结束,程序中用到的数据放在什么位置,哪个段是数据段等。这些信息要和源程序一起提供给汇编程序。这些信息的提供也是以指令的形式出现,这种功能的指令称为伪指令。,4.2 汇编语言语句类型及格式,1、符号定义伪指令对于多次出现同一个表达式,为了方便起见,常将该表达式赋予一个名字。用名字代替表达式,以后要修改该表达式的值时,只需在赋予名字的地方修改即可。(1)等值伪指令EQU格式:符号名 EQU 表达式功能:给符号名定义一个值、别的符号名、表达式或助记符,4.2 汇编语言语句类
10、型及格式,(2)等号伪指令“=”“=”的格式与功能和EQU类似。不同的是:在同一个程序中,“=”可以对一个符号重复定义,而EQU不能对同一符号重复定义。Y1=1 Y1=128(3)解除定义伪指令PURGE格式:PURGE 符号1,符号2符号n功能:解除指定符号的定义,之后可以用EQU重新定义,Y1 EQU 7 Y1 EQU 128,Y1 EQU 7 PURGE Y1Y1 EQU 128,4.2 汇编语言语句类型及格式,2、数据定义伪指令可为数据项分配存储单元,并根据需要设置初值,还可用符号代表数据项,此时符号就与分配的存储单元相联系。代表数据项的符号本身称为变量名,与之对应的存储单元用于存放变
11、量,所以常常把这样的存储单元称为变量。格式:变量名 数据定义符 操作数,操作数,;注释功能:为操作数分配存储单元,并用变量与存储单元相联系。,4.2 汇编语言语句类型及格式,(1)定义字节数据项 DB占1个字节存储单元(2)定义字数据项 DW占2个字节存储单元(3)定义字节数据项 DD占4个字节存储单元(4)定义没有初值的数据项?不预置初值,只给变量分配存储单元,4.2 汇编语言语句类型及格式,(5)定义字符串操作数为字符串,字符和字符串都必须放在单引号中,内存中存放是各字符的ASCII码。超过两个字符的字符串只能用DB伪指令定义例(6)定义其他类型数据项DQ、DT(7)重复操作符DUP格式:
12、重复个数 DUP(表达式,表达式,)功能:重复操作数若干次,4.2 汇编语言语句类型及格式,(8)、分析操作符用于从变量或标号中分解出某些属性值,并通告数值回送。TYPE 变量或标号:计算出变量的类型值或标号类型值DB,DW,DD,DQ,DT对应类型值:1,2,4,8,10NEAR,FAR对应类型值:-1,-2LENGTH 变量:对于使用DUP定义的变量,计算出分配给该变量的单元数,其他变量的LENGTH值为1,4.2 汇编语言语句类型及格式,SIZE 变量:计算出分配给该变量的字节数,其值为TYPE和LENGTH的乘积。OFFSET 变量或标号:计算出变量或标号的段内偏移地址SEG 变量或标
13、号:计算出变量或标号的段地址例,4.2 汇编语言语句类型及格式,(9)、属性操作符用来改变原有变量或标号的类型。PTR操作符格式:类型 PTR 表达式类型名可以是BYTE/WORD/DWORD或者是NEAR/FAR,mov al,byte ptr w_var;w_var是一个字变量jmp far ptr n_label;n_label是一个标号使用PTR操作符,可以临时改变名字或标号的类型,4.2 汇编语言语句类型及格式,THIS操作符THIS 类型名利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指定的类型b_var equ THIS byte;按字节访问变量b_var,但与w_va
14、r的地址相同w_var dw 10 dup(0);按字访问变量w_var,系统功能调用,21H号中断是DOS提供给用户的用于调用系统功能的中断,它有近百个功能供用户选择使用,主要包括设备管理、目录管理和文件管理三个方面的功能ROM-BIOS也以中断服务程序的形式,向程序员提供系统的基本输入输出程序汇编语言程序设计需要采用系统的各种功能程序充分利用操作系统提供的资源是程序设计的一个重要方面,需要掌握,功能调用的步骤,通常按照如下4个步骤进行:在AH寄存器中设置系统功能调用号 在指定寄存器中设置入口参数 执行指令INT 21H(或ROM-BIOS的中断向量号)实现中断服务程序的功能调用 根据出口参
15、数分析功能调用执行情况,输入输出类功能调用,向显示器输出字符 字符的输出 字符串的输出从键盘输入数据 字符的输入 字符串的输入 按键的判断,字符输出的功能调用,DOS功能调用INT 21H功能号:AH02H入口参数:DL字符的ASCII码功能:在显示器当前光标位置显示给定的字符,光标右移一个字符位置。如按Ctrl-Break或Ctrl-C则退出,例:显示问号,;在当前显示器光标位置显示一个问号mov ah,02h;设置功能号:ah02hmov dl,?;提供入口参数:dl?int 21h;DOS功能调用:显示,进行字符输出时,当输出响铃字符(07H)以及退格(08H)、回车(0DH)和换行(0
16、AH)字符时,该功能调用可以自动识别并能进行相应处理,字符串输出的功能调用,DOS功能调用INT 21H功能号:AH09H入口参数:DS:DX欲显示字符串在主存中的首地址字符串应以$(24H)结束功能:在显示器输出指定的字符串可以输出回车(0DH)和换行(0AH)字符产生回车和换行的作用,例:显示字符串,string db Hello,Everybody!,0dh,0ah,$;在数据段定义要显示的字符串.mov ah,09h;设置功能号:ah09hmov dx,offset string;提供入口参数:dx字符串的偏移地址int 21h;DOS功能调用:显示,字符输入的功能调用,DOS功能调用INT 21H功能号:AH01H出口参数:AL字符的ASCII码功能:获得按键的ASCII代码值调用此功能时,若无键按下,则会一直等待,直到按键后才读取该键值,例:判断按键,getkey:mov ah,01h;功能号:ah01hint 21h;功能调用cmp al,Y;处理出口参数alje yeskey;是“Y”cmp al,Nje nokey;是“N”jne getkey.yeskey:.nokey:.,4.2 汇编语言语句类型及格式,4.2 汇编语言语句类型及格式,