资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,第七章 高级汇编语言技术,7.1,宏汇编,7.2,重复汇编,7.3,条件汇编,宏(,Macro),是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法,统称宏结构,7.1,宏汇编,宏,:,具有宏名的一段汇编语句序列,宏定义,时书写,宏指令,:,这段汇编语句序列的缩写,宏调用,时书写,宏展开,:,宏指令处用这段宏代替的过程,宏汇编,时实现,宏的参数功能强大,颇具特色,配合宏,还有宏操作符和有关伪指令,一、,宏定义,SAVEREGMACRO,PUSH AX,PUSH BX,PUSH CX,PUSH DX,PUSH SI,PUSH DI,ENDM;,;,宏定义结束,宏名,macro,形参表,宏定义体,endm,mainbeginMACRO ;,定义名为,mainbegin,的宏,无参数,mov ax,data,;,宏定义体,mov ds,ax,ENDM;,;,宏定义结束,宏调用及其展开,start:mainbegin,;,宏调用,建立,DS,内容,mainend 4ch,;,宏调用,返回,DOS,end start,宏名,实参表,宏调用的实质是在汇编过程中进行宏展开,宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代,宏展开,start:mainbegin,;,宏指令,1,mov ax,data,;,宏展开,1,mov ds,ax,mainend 4ch,;,宏指令,1,mov al,0,;,宏展开,1,mov ah,4ch,1int 21h,在汇编时,用宏定义体的代码序列替代宏指令的过程,宏展开,SAVEREG;,宏指令,1PUSH AX;,宏展开,1PUSH BX,1PUSH CX,1PUSH DX,1PUSH SI,1PUSH DI,FOO WORD_VAR,INC,AX;,宏指令,1MOV AX,WORD_VAR,;,宏展开,1INC AX,FOOMACRO P1,P2,P3,MOV AX,P1,P2 P3,ENDM,宏的参数,可以,无参数,,例如,mainbegin,可以带有,一个参数,,例如,mainend,也可以具有,多个参数,;,参数可以是,常数、变量、存储单元、指令(操作码)或它们的一部分,,也可以是,表达式,;,宏定义体可以是任何合法的汇编语句,既可以是,指令序列,,又可以是,伪指令序列,;,;统一4条移位指令的宏指令,shiftmacro soprand,snum,sopcode,push cx,mov cl,snum,s&sopcode&soprand,cl,pop cx,endm,替换操作符,;,统一移位和循环移位8条指令的宏指令,shrotmacro sroprand,srnum,sropcode,push cx,mov cl,srnum,sropcode sroprand,cl,pop cx,endm,;,宏注释符。采用这个符号的注释,在宏展开时不出现,&,替换操作符,用于将参数与其他字符分开。如果参数紧接在其他字符之前或之后,或者参数出现在带引号的字符串中,就必须使用该伪操作符,字符串传递操作符,用于括起字符串。在宏调用中,如果传递的字符串实参数含有逗号、空格等间隔符号,则必须用这对操作符,以保证字符串的完整,!,转义操作符,用于指示其后的一个字符作为一般字符,不含特殊意义,%,表达式操作符,用在宏调用中,表示将后跟的一个表达式的值作为实参,而不是将表达式本身作为参数,宏操作符,;宏定义,Absolmacro oprd,local next,cmp oprd,0,jge next,neg oprd,next:,endm,;宏调用,absol word ptr bx,absol bx,;,宏展开,1,cmp word ptr bx,0,1jge?0000,1neg word ptr bx,1?0000:,1cmp bx,0,1jge?0001,1neg bx,1?0001:,仅是,源程序级的简化,:宏调用,在汇编时,进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变,通过形参、实参结合实现参数传递,简捷直观、灵活多变,还是,目标程序级的简化,:子程序调用,在执行时,由,CALL,指令转向、,RET,指令返回;形成的目标代码较短,执行速度减慢,需要利用寄存器、存储单元或堆栈等传递参数,比较,宏,子程序,宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法,通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序,比较,宏,子程序,二、重复汇编,重复汇编,指在汇编过程中,重复展开一段(基本)相同的语句,重复汇编没有名字,不能被调用,重复汇编常用在宏定义体中,也可以在一般汇编语句中使用,重复汇编伪指令有三个:,REPEAT,按参数值重复,FOR,按参数个数重复,FORC,按参数的字符个数重复,最后,用,ENDM,结束,按参数个数重复,FOR,形参,实参表,重复体,ENDM,FOR regad,push regad,ENDM,1,push ax,1push bx,1push cx,1push dx,按参数字符个数重复,FORC,形参,字符串,重复体,ENDM,FORC regad,dcba,pop®ad&x,ENDM,1,pop dx,1pop cx,1pop bx,1pop ax,pdata macro num,IF num lt 100,;,如果,num 100,,则汇编如下语句,db num dup(?),ELSE,;,否则,汇编如下语句,db 100 dup(?),ENDIF,endm,pdata 12 ;,宏调用,db 12 dup(?);,宏汇编结果,pdata 102 ;,宏调用,db 100 dup(?);,宏汇编结果,第八章 输入/输出程序设计,8.1,I/O,设备的数据传送方式,8.2,程序直接控制,I/O,方式,8.3,中断传送方式,8.2,程序直接控制,I/O,方式,8086,通过输入输出指令与外设进行数据交换;呈现给程序员的外设是端口(,Port),即,I/O,地址,8086用于寻址外设端口的地址线为16条,端口最多为2,16,65536(64,K),个,端口号为0000,HFFFFH,8.2,程序直接控制,I/O,方式,输入输出寻址方式,8086的,端口有64,K,个,无需分段,设计有两种寻址方式,直接寻址,:只用于寻址00,HFFH,前256个端口,操作数,i8,表示端口号,间接寻址,:可用于寻址全部64,K,个端口,,DX,寄存器的值就是端口号,对大于,FFH,的端口只能采用间接寻址方式,8.2,程序直接控制,I/O,方式,输入指令,IN,IN AL,i8;,字节输入:,ALI/O,端口(,i8,直接寻址),IN AL,DX;,字节输入:,ALI/O,端口(,DX,间接寻址),IN AX,i8;,字输入:,AXI/O,端口(,i8,直接寻址),IN AX,DX;,字输入:,AXI/O,端口(,DX,间接寻址),将外设数据传送给,CPU,内的,AL/AX,IN AL,21H,8.2,程序直接控制,I/O,方式,输出指令,OUT,OUT i8,AL;,字节输出:,I/O,端口,AL(i8,直接寻址),OUT DX,AL;,字节输出:,I/O,端口,AL(DX,间接寻址),OUT i8,AX;,字输出:,I/O,端口,AX(i8,直接寻址),OUT DX,AX;,字输出:,I/O,端口,AX(DX,间接寻址),将,CPU,内的,AL/AX,数据传送给外设,8.2,程序直接控制,I/O,方式,输出指令,OUT,(,例),;间接寻址,字节量输出,mov dx,3fch,mov al,80h,out dx,al,OUT 43H,AL,例8.1 发声程序设计,mov dx,100,in al,61h,and al,11111100b,sound:,xor al,2,out 61h,al,mov cx,140h,wait1:loop wait1,dec dx,jne sound,8.3,中断传送方式,一种有效的,CPU,与,I/O,传送数据的方式,一、中断源与中断分类,中断的分类,外部中断:非CPU内部原因产生的中断,内部中断:CPU内部原因产生的中断,非屏蔽中断,NMI:,不受,IF,限制,,CPU,必须响应,可屏蔽中断,INTR:,CLI IF=0,关中断,STIIF=1,开中断,CPU,错误,:除法出错、溢出,INTO,由,INT,指令引起的软中断,DEBUG,设置的中断,二、中断向量表,80,X86,系列在内存最低地址的1,K,空间保存着一张地址表,它的地址与中断类型号对应,中断号为,N,则其中断子程序入口地址在向量表中的位置为:,N*4,IP,(N*4),CS(N*4+2),三、中断指令,INT,INT n,;,中断调用指令:产生,n,号中断,IRET,;,中断返回指令:实现中断返回,INTO,;,溢出中断指令:,;若溢出标志,OF=1,,产生4号中断,;否则顺序执行,四、设置中断向量,第九章,BIOS,和,DOS,中断,
展开阅读全文