收藏 分销(赏)

IBM汇编-第七章--高级汇编语言技术.ppt

上传人:精*** 文档编号:12640645 上传时间:2025-11-18 格式:PPT 页数:69 大小:413.54KB 下载积分:8 金币
下载 相关 举报
IBM汇编-第七章--高级汇编语言技术.ppt_第1页
第1页 / 共69页
IBM汇编-第七章--高级汇编语言技术.ppt_第2页
第2页 / 共69页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,ch7,*,安徽理工大学,计算机科学与技术系,李敬兆,汇编语言,第7章,高级汇编语言技术,第7章,1,ch7,7.1 宏汇编,为什么使用宏汇编?,在编制汇编语言程序过程中,有些功能程序段需要多次重复使用,所不同的只是参与操作的操作数。,为了减少编程的工作量,通常采用两种方法,:,将程序段编写为独立的子程序,将程序段定义成宏,宏概念,宏(或宏指令)是源程序中一段有独立功能的程序代码,,只需定义一次,可以多次使用。,第7章,2,ch7,1.宏定义,用伪指令,MACRO/ENDM,实现,其语句格式是:,宏指令名,MACRO,形参1,形参2,形参n,宏定义体,ENDM,7.1.1 宏定义、宏调用和宏展开,3,ch7,说明,宏指令名,是该宏定义的名称。调用时使用,宏指令名,对该宏定义进行调用,。,宏指令符合标识符规定。,宏指令名不能重复,并且指令的第一个字符必须是字母。,MACRO,必须与,ENDM,成对出现。,MACRO,标识宏定义的开始,。,形式参数(即形参,也称哑元、虚参)是可选项,宏可以不带参数;带参数时,多个形参间用逗号分隔,。,第7章,4,ch7,2.宏调用,宏调用的格式为,:,宏指令名,实参1,实参2,实参n,宏展开,宏展开就是宏定义体取代源程序中的宏指令名,而且用实元取代哑元。,汇编源程序时,宏汇编程序将对每条宏指令语句进行宏展开,用实参替代相应的形参,对宏体目标代码作相应改变。,说明,:,实参可以是常数、寄存器、存储单元、地址表达式、指令的操作码或者是操作码的一部分,。,第7章,5,ch7,Call Q,Call Q,Call Q,Q:,RET,子程序Q,Q A,B,Q C,D,Q E,F,Q MACRO X,Y,ENDM,主程序,主程序,主程序,展开,子程序调用和宏调用的工作方式,第7章,6,ch7,7.1.2 宏定义中的参数,例7.2 宏定义可以无变元,savereg,macro,push ax,push bx,push cx,push dx,push si,push di,endm,例7.3变元可以是操作码,a macro p1,p2,p3,mov ax,p1,p2,p3,endm,调用,:,a word_ var,inc,ax,展开:,mov,ax,word_,var,1,inc,ax,第7章,宏调用 savereg,宏展开则将宏定义内容全部列出,9,ch7,例7.4 变元可以是操作码或操作数的一部分,但在宏定义体中必须使用分隔符,&,即,&,是操作符,在宏定义中可作为形参的前缀,展开时把,&,前后的两个符号连接起来,形成操作码、操作数或字符串。,&只能出现在宏定义中,。,宏定义,:,LEAP MARCO COND,LAB,J,&,COND LAB,ENDM,宏调用:,LEAP Z,THERE,LEAP NZ,HERE,宏展开,:,JZ THERE,JNZ HERE,10,ch7,例7.5,宏定义,:,fo macro,p1,jmp,ta,&,p1,endm,宏调用:,fo,word_var,宏展开:,1 Jmp,ta,word_var,如果宏定义为:,fo macro p1,jmp tap1,endm,宏调用:,fo word_var,宏展开时,TAP1被看作一个独立的标号,并不把TAP1中的P1作为亚元看待,不能得到预期的结果。,11,ch7,例7.6 变元是ASCII串,宏定义,:,MSGGEN macro,LAB,NUM,XYZ,LAB,&,NUM DB HELLO MR.&XYZ,endm,宏调用:,MSGGEN,MSG,1,TAYLOR,宏展开:,MSG,1,DB HELLO MR.TAYLOR,12,ch7,例7.7 宏定义中的伪操作符%。其格式为:expression,汇编程序把跟在%后面的表达式的值转换为当前基数下的数,用这个数来取代亚元。,宏定义:,MSG MACRO COUNT,STRING,MSG&COUNT DB STRING,ENDM,ERRMSG MACRO TEXT,CNTR=CTNR+1,MSG%CNTR,TEXT,ENDM,宏调用:,CNTR=0,ERRMSG SYNTAX ERROR,ERRMSG INVALID OPERAND,宏展开:,MSG1 SYNTAX ERROR,MSG2 INVALID OPERAND,相当于以下两层展开:,。,CNTR=0,1,CNTR=CNTR+1,1,MSG%CNTR,SYNTAX ERROR,2,MSG1 DB SYNTAX ERROR,1,CNTR=CNTR+1,1,MSG%CNTR,INVALID OPERAND,2,MSG2 DB INVALID OPERAND,13,ch7,7.1.3 LOCAL伪操作,例7.8,宏定义体内可以使用标号。如宏定义:,ABSOL MACRO OPER,CMP OPER,0,JGE NEXT,NEG OPER,NEXT:,ENDM,如果多次调用该宏定义,必产生标号的多重定义,汇编时出错。解决这一问题可使用伪操作指令,LOCAL,,其一般格式为:,LOCAL 局部标号1,局部标号2,,宏汇编程序将为标号分别生成格式为,“?XXXX”,的唯一的符号以代替各局部标号。XXXX代表四位十六进制数0000FFFF。这样,在汇编源程序中,避免了多次宏调用时生成的标号重复。,注意,:LOCAL伪操作只能用在宏定义体内,而且必须是MACRO伪操作后的,第一个,语句,在MACRO与LOCAL不能出现注释和分号标志。,14,ch7,上述ABSOL宏定义可改为:,ABSOL,MACRO,OPER,LOCAL NEXT,CMP OPER,0,JGE,NEXT,NEG OPER,NEXT:,ENDM,宏调用,:,ABSOL VAR,ABSOL BX,宏展开后的指令为:,1 CMP VAR,0,1 JGE?0000,NEG,VAR,1,?,0000,:,1 CMP,BX,,,0,1 JGE,?,0001,1 NEG DX,1,?,0001,:,如果LOCAL后有多个标号,如 LABEL NEXT,GO,QUIT 则宏展开时,汇编程序第一次调用使用?00000取代NEXT,?00001取代GO和?00002取代QUIT,第二次调用则分别用?00003、?00004、?00005取代NEXT、GO和QIUT。,15,ch7,7.1.4 在宏定义内使用宏(宏嵌套),例7,.9,宏定义中允许使用宏调用,,限制条件是:必须先定义,dif macro x,y,mov ax,x,sub ax,y,endm,difsqr macro opr1,opr2,result,push dx,push ax,dif opr1,opr2,mov result,ax,pop ax,pop dx,endm,宏调用:,difsqr var1,var2,var3,宏展开:,1 push dx,1 push ax,2 mov ax,var1,2 sub ax,var2,1 mov var3,ax,1 pop ax,1 pop dx,第7章,16,ch7,例7.10 宏定义中的宏调用,INT21,MACRO FUNCTIN,MOV AH,FUNCTIN,INT 21H,ENDM,DISP MACRO CHAR,MOV DL,CHAR,INT21 02H,ENDM,宏调用:,DISP?,宏展开:,1 MOV DL,?,2 MOV AH,02H,2 INT 21H,第7章,17,ch7,例7.11 宏定义中含宏定义,DEFMAC MACRO MACNAM,OPERATOR,MACNAM MACRO X,Y,Z,PUSH AX,MOV AX,X,OPERATOR AX,Y,MOV Z,AX,POP AX,ENDM,ENDM,宏调用:,DEFMAC ADDITION,ADD,宏展开:(形成加法宏定义),ADDITION MACRO X,Y,Z,PUSH AX,MOV AX,X,ADD AX,Y,MOV Z,AX,POP AX,ENDM,宏调用:,DEFMAC ADDITION,SUB,宏展开形成减法宏定义,宏调用:,DEFMAC ADDITION,OR,宏展开形成逻辑或宏定义,对形成的宏定义,又可以使用宏调用,如:,ADDITION VAR1,VAR2,VAR3,第7章,18,ch7,7.1.5 列表伪操作,Masm提供了,.xall,.lall,sall,来控制汇编清单中宏展开的列出情况,.xall,为,默认情况,,它指示清单中,只列出产生目标 代码的宏展开,;,.lall,列出,包括注释在内的所有宏展开,;,.sall,则,不列出任何信息,;,MASM6.0 分别用.LISTMACROALL、.LISTMACRO、.NOLISTMACRO取代.LALL、.XALL、.SALL,第7章,19,ch7,例7.12列表伪操作实例演示,initz macro ;define macro,mov ax,data;initialize segment,mov ds,ax ;register,mov es,ax,endm,prompt macro messge ;define macro,;this macro displays any message,;generates code that links to DOS,mov ah,9 ;request display,lea dx,messge ;prompt,int 21h,endm ;end macro,finish macro ;define macro,mov ax,4c00h ;end processing,int 21h,endm ;end macro,.model small,.386,.stack 200h,.data,messg1 db Customer name?,13,10,$,messg2 db Customeraddress?,13,10,$,.code ;define code segment,begin proc far,.sall,initz,.xall,prompt messg1,.lall,prompt messg2,.xall,finish,begin endp,end begin,30 0000 .code ;define code segment,31 0000begin proc far,32,.sall,33 initz,34,.xall,35,prompt messg1,36 0007 B4 09 1,mov ah,9 ;request display,37 0009 8D 16 0000 R 1,lea dx,messg1 ;prompt,38 000D CD 21 1,int 21h,39,.lall,40,prompt messg2,41 1,;this macro displays any message,42 1,;,43 000F B4 09 1,mov ah,9 ;request display,44 0011 8D 16 0011 R 1,lea dx,messg2 ;prompt,45 0015 CD 21 1,int 21h,46,.xall,47,finish,48 0017 B8 4C00 1,mov ax,4c00h ;end processing,49 001A CD 21 1,int 21h,50 001Cbegin endp,51 001C end begin,20,ch7,如果,程序中定义了很多宏,,可以把这些宏组合起来建立一个独立的文件,这个只包含若干个宏定义的文件称为宏库,。扩展名由,mac 或inc,来表示。,当需要使用宏库中的某些宏定义时,只需要,在该程序的开始用INCLUDE语句说明,include,C:,MACRO.MAC,第7章,7.1.6 宏库的建立与调用,21,ch7,宏库的建立(文件名macro.mac),;a library of macro sequences-macro.mac,initz macro ;define macro,mov ax,data;initialize segment,mov ds,ax ;register,mov es,ax,endm,prompt macro messge ;define macro,;this macro displays any message,;generates code that links to DOS,mov ah,9 ;request display,lea dx,messge ;prompt,int 21h,endm ;end macro,finish macro ;define macro,mov ax,4c00h ;end processing,int 21h,endm ;end macro,对例7.12宏库的建立和使用,宏库的使用,Include macro.mac,.model small,.386,.stack 200h,.data,messg1 db Customer name?,13,10,$,messg2 db Customeraddress?,13,10,$,.code ;define code segment,begin proc far,.sall,initz,.xall,prompt messg1,.lall,prompt messg2,.xall,finish,begin endp,end begin,22,ch7,宏汇编程序提供了伪操作PURGE,用来在删除不用的宏定义。,PURGE,伪指令的一般格式是:,PURGE,宏名,,,方括号表示PURGE可以取消多个宏定义,宏名之间用逗号隔开,。,如,宏定义:,SUB,MACRO,VARX,VARY,RESULT,ENDM,宏调用:,SUB X,Y,Z,PURGE SUB,第7章,7.1.7 伪指令PURGE,23,ch7,7.2 重复汇编,其一般格式为:,REPT 表达式,(,重复块,),ENDM,其中,,REPT,和,ENDM,必须成对出现,两者间的重复块是要重复汇编的部分。,表达式的值用来表示重复块的重复汇编次数,。,重复伪操作不一定要用在宏定义体内,。,7.2.1 定重复伪操作REPT,有时汇编语言程序要连续地重复完成相同或者几乎完全相同的一组代码,这时可用重复汇编。,第7章,24,ch7,例7.13,X=0,REPT 10,X=X1,DB X,ENDM,汇编后,将数据1,2,3,10分配给十个连续,的字节单元,:,1 DB 1,1 DB 2,1 DB 3,1 DB 10,第7章,25,ch7,例7.14 把字符A到Z的ASCII码填入数组TABLE,CHAR=A,TABLE LABEL BYTE,REPT 26,DB CHAR,CHAR=CHAR+1,ENDM,经汇编产生:,1 DB 41H,1 DB 42H,1 DB 43H,1 DB 5AH,26,ch7,例7.15,用宏定义及重复伪操作把 TAB,TAB+2,TAB+4,TAB+8的内容存入堆栈,宏定义,PUSH_TAB MACRO K,PUSH TAB+K,ENDM,宏调用:,I=0,REPT 5,PUSH_TAB%I,I=I+2,ENDM,宏展开:,2 PUSH TAB+0,2 PUSH TAB+2,2 PUSH TAB+4,2 PUSH TAB+6,2 PUSH TAB+8,27,ch7,例7.16,建立一个8字的数组,其中每个字的内容是下一个字的地址,而最后一个字的内容是第一个字的地址,ARRAY LABEL WORD,REPT 7,DW$+2,ENDM,DW ARRAY,汇编后得到:,1 DW$+2,1 DW$+2,1 DW$+2,DW ARRAY,28,ch7,7.2.2 不定重复伪指令IRP,一般格式为:,IRP 形参,参数1,参数2,,(重复块),ENDM,此伪指令重复执行重复块中所包含的语句,重复的次数由参数表中的参数个数决定。,重复汇编时,依次用参数表中的参数取代形参,直到表中的参数用完为止。,参数表中的参数必须用两个三角号括起来,参数可以是常数、符号、字符串等,各参数间用逗号隔开。,第7章,29,ch7,例7.17,IRP X,(1,2,3,4,5,6,7,8,9,10),DB X,ENDM,汇编后:,1 DB 1,1 DB 2,1 DB 10,30,ch7,例7.18 多次将AX、BX、CX、DX寄存器内容压栈,宏定义如下:,PUSHR,MACRO,IRP REG,,,AX,,,BX,,,CX,,,DX,PUSH REG,ENDM,ENDM,汇编后:,1,PUSH AX,1,PUSH BX,1,PUSH CX,1 PUSH DX,31,ch7,7.2.3 不定重复字符伪操作IRPC,其语句格式为:,IRPC 形参,字符串(或字符串),(重复块),ENDM,此伪指令重复执行重复块中的语句,,重复汇编的次数等于字符串中字符的个数,。每次重复执行时,依次用字符串中的一个字符取代形参,直到字符串结束。可见IRPC伪指令与IRP伪指令类似,只是IRPC用字符串(其三角括号可以有也可以无)代替了IRP伪指令中的参数表。,32,ch7,例7.19,Irpc x,01234567,DB x+1,Endm,汇编后:,DB,1,1,DB,2,1,DB,8,例7.20,PUSHR MACRO,IRPC REG,,,ABCD,PUSH REG,&,X,ENDM,ENDM,同样,汇编后也可得到:,1,PUSH AX,1,PUSH BX,1,PUSH CX,1,PUSH DX,33,ch7,7.3 条件汇编,汇编程序能根据条件把一段源程序包括在汇编语言程序内的或排除在外,这里就用到条件伪操作。条件伪操作的一般格式是:,Ifxx argument,;自变量满足条件汇编此块,ELSE,;自变量不满足条件汇编此块,ENDIF,说明:,汇编程序在对源程序汇编时,,要对源程序扫描二遍。第一遍建立符号表,第二遍才把汇编语言指令翻译成机器语言指令。,那么自变量必须在汇编程序第一遍扫视后就成为确定的数值。,34,ch7,IF,表达式 ;表达式0,则汇编,IFE,表达式 ;表达式0,则汇编,IF1,;在第一遍扫视期间满足条件,IF2,;在第二遍扫视期间满足条件,IFDEF,符号 ;符号已定义,则汇编,IFNDEF,符号 ;符号未定义,则汇编,IFB,;自变量为空,则汇编,IFNB,;自变量不为空,则汇编,IFIDN,;串1与串2相同,IFDIF,;串1与串2不同,35,ch7,IF expression,;汇编程序求出表达式的值,如此,值不为0,则满足条件。,IFE expression,;汇编程序求出表达式的值,如此值,为0,则满足条件。,例7.21:宏指令MAX把三个变元中的最大值放在AX中,而且使变元数不同时产生不同的程序段。,7.3.1,36,ch7,MAX MACRO K,A,B,C,LOCAL NEXT,OUT,MOV AX,A,IF K-1,IF K-2,CMP C,AX,JLE NEXT,MOV AX,C,ENDIF,NEXT:,CMP B,AX,JLE OUT,MOV AX,B,ENDIF,OUT:,ENDM,宏调用:,MAX 1,P,MAX 2,P,Q,MAX 3,P,Q,R,宏展开:,32,33,MAX 1,P,34 0005 A1 0000 R 1 MOV AX,P,35 0008 1?0001:,36,MAX 2,P,Q,37 0008 A1 0000 R 1 MOV AX,P,38 000B 1?0002:,39 000B 39 06 0002 R 1 CMP Q,AX,40 000F 7E 03 1 JLE?0003,41 0011 A1 0002 R 1 MOV AX,Q,42 0014 1?0003:,43,MAX 3,P,Q,R,44 0014 A1 0000 R 1 MOV AX,P,45 0017 39 06 0004 R 1 CMP R,AX,46 001B 7E 03 1 JLE?0004,47 001D A1 0004 R 1 MOV AX,R,48 0020 1?0004:,49 0020 39 06 0002 R 1 CMP Q,AX,50 0024 7E 03 1 JLE?0005,51 0026 A1 0002 R 1 MOV AX,Q,52 0029 1?0005:,宏定义,37,ch7,例7.22,宏指令BRANCH产生一条转向X的指令,当它相对X的距离小于128字节时产生JMP SHORT X,否则产生JMP NER PTR X(X必须位于该转移指令之前,即低地址区),BRANCH MACRO X,IF ($-X)LT 128,JMP SHORT X,ELSE,JMP NEAR PTR X,ENDIF,宏展开产生:,JMP SHORT X,或,JMP NEAR PTR,X,如,LAB:,MOV AX,BX,BRANCH LAB,BRANCH LAB将展开为:,JMP SHORT LAB,38,ch7,例7.23,宏定义允许递归调用,power macro x,n,sal x,1,count=count+1,if count-n,power x,n,endif,endm,宏调用:,count=0,power ax,3,宏展开:,Sal ax,1,Sal ax,1,Sal ax,1,39,ch7,IF1 ;在汇编程序的第一遍扫视期间满足条件,IF2 ;在汇编程序的第二遍扫视期间满足条件,说明:汇编程序在对包括宏库的源程序汇编时也分两次扫描,第一次将宏库及程序中的宏定义登入宏定义表,第二次扫描时进行宏扩展,形成列表文件。,例.24 对,例7.12使用宏库的程序实现中,在INCLUDE语句前加上IF1,是INCLUDE语句只在汇编的第一遍扫描期间出现,这样宏库的拷贝将不在汇编清单中出现,以节省空间。,7.3.2,40,ch7,已建立宏库,(文件名macro.mac),;a library of macro sequences-macro.mac,initz macro ;define macro,mov ax,data;initialize segment,mov ds,ax ;register,mov es,ax,endm,prompt macro messge ;define macro,;this macro displays any message,;generates code that links to DOS,mov ah,9 ;request display,lea dx,messge ;prompt,int 21h,endm ;end macro,finish macro ;define macro,mov ax,4c00h ;end processing,int 21h,endm ;end macro,宏库的使用,IF1,Include macro.mac,ENDIF,.model small,.386,.stack 200h,.data,messg1 db Customer name?,13,10,$,messg2 db Customeraddress?,13,10,$,.code ;define code segment,begin proc far,.sall,initz,.xall,prompt messg1,.lall,prompt messg2,.xall,finish,begin endp,end begin,41,ch7,IFDEF symbol,;如符号已在程序中定义,或者用extrn说明该符号是在外部定义的,则满足条件。,IFNDEF symbol,;如符号未定义或未通过EXTRN说明为外部符号则满足条件,。,7.3.3,42,ch7,mov ax,dividend,mov bx,divisor,sub cx,cx,comp:cmp ax,bx,jb out,sub ax,bx,jnc cx,jmp comp,out:mov quotient,cx,endm,例7.25,divide macro,devidend,divisor,quotient,local cmop,out,cntr=0,ifndef,dividend,cntr=1,endif,ifndef,divisor,cntr=1,endif,ifndef,quotient,cntr=1,endif,;只要有一个参数未定义将从EXITM处退出该宏定义而不做进一步展开,if cntr,exitm,endif,宏定义,43,ch7,宏调用,IF1,Include macro.mac,ENDIF,Purge prompt,.model small,.386,.stack 200h,.data,divdnd dw 200;dividned,divsor dw 25;divsior,quotnt dw?;quotient,.code ;define code segment,begin proc far,.sall,initz,.xall,divide divdnd,divsor,quotnt,.lall,divide divdnd,divsor,quont,.xall,finish,begin endp,end begin,宏展开见教材P,274,44,ch7,IFB ;如自变量为空,则满足条件,IFNB ;如自变量不为空,则满足条件,注意:自变量用“”括起来,7.3.4,例7.26,宏指令 GOTO L,X,REL,Y 可以根据不同情况产生无条件转移指令或比较和条件转移指令。,宏定义:,GOTO MACRO L,X,REL,Y,IFB ,JMP L,ELSE,MOV AX,X,CMP AX,Y,J&REL L,ENDIF,ENDM,宏调用:,GOTO LOOP1,SUM,NZ,15,GOTO QIUIT,宏展开:,MOV AX,SUM,CMP AX,15,JNZ LOOP1,JMP,QUIT,45,ch7,DISP MACRO CHAR,IFB ,MOV DL,ELSE,MOV DL,CHAR,ENDIF,MOV AH,02H,INT 21H,ENDM,宏调用:,DISP A,DISP,例7.27,宏定义DISP可以在给出参数时,在屏幕上显示该字符;不给出参数时,则可显示“空格”。,宏定义:,宏展开:,DISP A,1 MOV DL,A,MOV AH,02H,1 INT 21H,DISP,MOV DL,1 MOV AH,02H,1 INT 21H,46,ch7,IFIDN,;如果字符串和字符串,相同,则满足条件。,IFDIF,;如果字符串和字符串,不相同,则满足条件。,在格式中,两个参数必须用尖括号括起,7.3.5,47,ch7,例7.28,宏定义利用参数为B或W而产生REP MOVSB或REP MOVSW的指令,如不给出参数,则产生REP MOVSB指令。,宏定义:,movif macro tag;define macro,ifidn ,rep movsb ;move bytes,exitm,endif,ifidn ,rep movsw ;move words,else ;no B or W,default to B,rep movsb,endif,endm,宏调用:,if1,include macro.mac,endif,purge prompt,.model small,.386,.stack 200h,.data,.code ;define code segment,begin proc far,.sall,intz,.xall,movif b,movif w,movif,.sall,finish,begin endp,宏展开,见教材P,277,48,ch7,作业,1 3 7 16,49,ch7,1.在DEBUG上机调试程序时,存储器地址表示为12FA:015F,它的物理地址是(),。,a.12FAH b.1305FH c.130FFH d.015FH,2.IP指令指针寄存器是属于(),。,a.通用寄存器 b.段寄存器 c.变址寄存器 d.控制寄存器,3.下面有语法错误的指令是(),。,a.ADD AL,AH b.ADD BX+3,AL,c.ADD AH,DI d.ADD BP+2,DA1(DA1是变量名),4.完成对DX的有符号数除以2的指令是(),。,a.IDIV 2 b.SAR DX,1 c.ROR DX,1 d.RCR DX,1,5.使进位位置1的指令是()。,a.CLC b.CMC c.STC d.NOP,汇编练习题,50,ch7,6.设AL=-15,要使AL=15应执行的指令是(),。,a.NEG AL b.NOT AL c.INC AL d.DEC AL,7.在条件转移指令中,结果为负数则转移的指令是(),。,a.JNS b.JX c.JS d.JP,8.下面的XCHG指令中,语法正确的是(),。,a.XCHG AL,,,DS b.XCHG BL,,,BX,c.XCHG AL,,,0FH d.XCHG BUF1,,,BUF2,9.一条指令中目的操作数不允许使用的寻址方式是(),。,a.,寄存器寻址,b.,立即数寻址,c.,变址寻址,d.,寄存器间接寻址,10.设SP=1FFEH,执行下列指令后,SP寄存器的值是()。,POPF,PUSH AX,a.2000H b.2002H c.1FFCH d.1FFEH,51,ch7,1 下列标号不合法的是,:,A,MOV B.WANG C.F8 D.AB3,2 语句DADA DW AB,CD,E,F汇编后占用的存储空间是:,A,4,个字节,B.8,个字节,C.6,个字节,D.5,个字节,3 PSW中使用的标志位以及其中的状态标志位、控制标志位的位数分别是:,A,9,,,6,,,3 B.9,,,8,,,1 C.9,,,7,,,2 D.16,,,9,,,7,4 指令ADD AX,BXDI中源操作数的寻址方式是:,A,段内寄存器间接寻址,B.,段间寄存器间接寻址,C,基址加变址寻址,C.,寄存器寻址,5 在伪指令语句NUMBER DW 1234H中的NUMBER项称为:,A,标号,B.,变量,C.,伪操作符,D.,数据,52,ch7,6 在存储器中保留待定的10个字节单元的伪指令语句是:,A,NUMB EQU 10 B.NUMB DW 10 DUP,(?),C.NUMB DB 10 D.NUMB DB 2 DUP,(,5 DUP,(?),7 把汇编语言源程序翻译成目标代码的程序是:,A,编译程序,B.,解释程序,C.,汇编程序,D.,连接程序,8 下列指令中,不影响PSW的指令是,:,A.MOV B.TEST C.SAL D.CLD,9 下列叙述不正确的是,:,A.,立即数不能直接送段寄存器。,B.,目的操作数不能是立即数和段寄存器。,C.,不能在两个存储单元间直接传送数据。,D.,两个段寄存器之间不能直接传送数据。,10 汇编语言在程序设计语言家族中属于,:,A.,第一代语言,B.,第二代语言,C.,第三代语言,D.,第四代语言,53,ch7,1、设DS=8225H,DI=3942H,指令NEGBYTEPTR DI操作数的物理地址是(),A,、,85B92H B,、,86192H C,、,BB690H D,、,12169H,2、下列寄存器组中在段内寻址时可以提供偏移地址的寄存器组是(),A,、,AX,,,BX,,,CX,,,DX B,、,BX,,,BP,,,SI,,,DI,C,、,SP,,,IP,,,BP,,,DX D,、,CS,,,DS,,,ES,,,SS,3、循环指令LOOPNZ终止循环的条件是()。,A,、,CX=0,,且,Z=0 B,、,CX=0,,或,Z=1,C,、,CX,0,,且,Z=0 D,、,CX,0,,或,Z=1,4、对寄存器AX的内容乘以4的正确指令序列是()。,A,、,SHRAX,,,1SHRAX,,,1,B,、,SHLAX,,,1SHL,,,AX,,,1,C,、,ROLAX,,,1 ROLAX,,,1,D,、,RCRAX,,,1 RCRAX,,,1,5、保存字除法商的寄存器是()。,A,、,AX B,、,AH C,、,AL D,、通用寄存器,54,ch7,6、设DH=10H,执行NEGDH指令后,正确的结果是()。,A,、,DH=10HC=1 B,、,DH=0F0H C=0,C,、,DH=10HC=0 D,、,DH=0F0H C=1,7、下列传送指令中有语法错误的是()。,A,、,MOVCS,,,AX B,、,MOVDS,,,AX,C,、,MOVSS,,,AX D,、,MOVES,,,AX,8、下面指令执行后,改变AL寄存器内容的指令是()。,A,、,TESTAL,,,02H B,、,ORAL,,,AL,C,、,CMPAL,,,BL D,、,ANDAL,,,BL,9、一条指令中目的操作数不允许使用的寻址方式是(),A.,寄存器寻址,B.,立即数寻址,C.,变址寻址,D.,寄存器间接寻址,10、执行下面指令序列后,结果是()。,MOVAL,,,82H,CBW,A,、,AX=0FF82H B,、,AX=8082H C,、,AX=0082H D,、,AX=0F82H,55,ch7,1指令JMP FAR PTR DONE属于()。,参考答案为,:C,A,段内转移直接寻址,B,段内转移间接寻址,C,段间转移直接寻址,D,段间转移间接寻址,2下列叙述正确的是()。,参考答案为,:C,A,对两个无符号数进行比较采用,CMP,指令,对两个有符号数比较用,CMPS,指令,B,对两个无符号数进行比较采用,CMPS,指令,对两个有符号数比较用,CMP,指令,C,对无符号数条件转移采用,JAE/JNB,指令,对有符号数条件转移用,JGE/JNL,指令,D,对无符号数条件转移采用,JGE/JNL,指令,对有符号数条件转移用,JAE/JNB,指令,3一个有128个字的数据区,它的起始地址为12ABH:00ABH,请给出这个数据区最末一个字单元的物理地址是()。,参考答案为,:C,A,12CSBH,B,12B6BH,C,12C59H,D,12BFEH,4在下列指令的表示中,不正确的是()。,参考答案为,:C,A,MOV AL,,,BX+SI,B,JMP SHORT DONI,C,DEC BX,D,MUL CL,5在进行二重循环程序设计时,下列描述正确的是()。,参考答案为,:A,A,外循环初值应置外循环之外;内循环初值应置内循环之外,外循环之内,B,外循环初值应置外循环之内;内循环初值应置内循环之内,C,内、外循环初值都应置外循环之外,D,内、外循环初值都应置内循环之外,外循环之内,56,ch7,6条件转移指令JNE的测试条件为()。,参考答案为,:A,A,ZF=0,B,CF,0,C,ZF=1,D,CF=1,78086CPU在基址加变址的寻址方式中,变址寄存器可以为()。,参考答案为,:D,A,BX,或,CX,B,CX,或,SI,C,DX,或,SI,D,SI,或,DI,8已知BX=2000H,SI=1234H,则指令MOV AX,BX+SI+2的源操作在()中,。,参考答案为,:A,A,数据段中偏移量为,3236H,的字节,B,附加段中偏移量为,3234H,的字节,C,数据段中偏移量为,3234H,的字节,D,附加段中偏移量为,3236H,的字节,9执行如下程序,:,MOV AX,,,0,MOV BX,,,1,MOV CX,,,100,A,:,ADD AX,,,BX,INC BX,LOOP A,HLT,执行后(,BX,),=,(,)。,参考答案为,:C,A,99,B,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服